рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреНрдпреЗ рдХрд╛рдп рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ рддреЗ рдкрд╛рд╣реВ рдЖрдгрд┐ рд╣рд│реВрд╣рд│реВ рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рджреЗрдЦреАрд▓ рд╕реБрд░реВ рдХрд░реВ.
рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдЖрдгрд┐ рддреАрди рдЯрдкреНрдкреНрдпрд╛рдд:
-
рдЯреЗрд░рд╛рдлреЙрд░реНрдо - рд╡рд░реНрдгрди, рдлрд╛рдпрджреЗ рдЖрдгрд┐ рдШрдЯрдХ -
рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреА рдирд┐рд░реНрдорд┐рддреА
1. рдЯреЗрд░рд╛рдлреЙрд░реНрдо - рд╡рд░реНрдгрди, рдлрд╛рдпрджреЗ рдЖрдгрд┐ рдШрдЯрдХ
рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╣реЗ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдЖрднрд╛рд╕реА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ IaC (рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдб) рд╕рд╛рдзрди рдЖрд╣реЗ.
рдЖрдореНрд╣реА рд╕рд╛рдзрдирд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдлрд╛рдпрджреЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд▓реЗ:
-
рдирд╡реАрди рднрд╛рдбреЗрдХрд░реВрдВрдЪреНрдпрд╛ рддреИрдирд╛рддреАрдЪреА рдЧрддреА (рд╕рд╛рдиреБрдХреВрд▓ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг). рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдЬрд┐рддрдХреЗ рдЕрдзрд┐рдХ рдирд╡реАрди рдХреНрд▓рд╛рдпрдВрдЯ рдЕрд╕рддреАрд▓ рддрд┐рддрдХреЗ рдЕрдзрд┐рдХ "рдХреНрд▓рд┐рдХ" рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдорд░реНрдерди рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдирд╛ рдирд╡реАрди рд╕рдВрд╕рд╛рдзрдиреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЯреЗрд░рд╛рдлреЙрд░реНрдорд╕рд╣, рд╡рд╛рдкрд░рдХрд░реНрддреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдмрджрд▓реВ рд╢рдХрддрд╛рдд (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ OS рдмрдВрдж рдХрд░рдгреЗ рдЖрдгрд┐ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╕реНрдХ рд╡рд┐рднрд╛рдЬрди рд╡рд╛рдврд╡рдгреЗ) рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдорд░реНрдердирд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рдШреЗрддрд╛ рдХрд┐рдВрд╡рд╛ рдорд╢реАрди рд╕реНрд╡рддрдГрдЪ рдмрдВрдж рдХрд░рдгреЗ.
-
рд╕рдХреНрд░рд┐рдпрдХрд░рдг рдпреЛрдЬрдиреЗрдЪреЗ рддреНрд╡рд░рд┐рдд рд╕рддреНрдпрд╛рдкрди рдирд╡реАрди рднрд╛рдбреЗрдХрд░реВ. рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдбрдЪреЗ рд╡рд░реНрдгрди рд╡рд╛рдкрд░реВрди, рдЖрдореНрд╣реА рддрд╛рдмрдбрддреЛрдм рддрдкрд╛рд╕реВ рд╢рдХрддреЛ рдХреА рдХрд╛рдп рдЬреЛрдбрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ, рддрд╕реЗрдЪ рд╣реЗ рдХрд┐рдВрд╡рд╛ рддреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдХрд┐рдВрд╡рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдЪреНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирд╕рд╣ рдЖрднрд╛рд╕реА рдиреЗрдЯрд╡рд░реНрдХ рдХреЛрдгрддреНрдпрд╛ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддреАрдд рдЕрд╕реЗрд▓.
-
рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛. рдЖрдкрдг рд╕рд╛рдзрди рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ Amazon рдЖрдгрд┐ Google Cloud рдкрд╛рд╕реВрди, VMware vCloud Director рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЦрд╛рдЬрдЧреА рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░, IaaS, SaaS рдЖрдгрд┐ PaaS рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕рдордзреНрдпреЗ рд╕реЗрд╡рд╛ рдСрдлрд░ рдХрд░рддрд╛рдд.
-
рдПрдХрд╛рдзрд┐рдХ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдХреНрд▓рд╛рдЙрдб рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдирд┐рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡рд╛рдкрд░реВрди рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡рд┐рддрд░рдг рдХрд░рд╛.
-
рдбреЗрдореЛ рд╕реНрдЯрдБрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рд╡рд╛рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдбреАрдмрдЧрд┐рдВрдЧрд╕рд╛рдареА. рддреБрдореНрд╣реА рдЪрд╛рдЪрдгреА рд╡рд┐рднрд╛рдЧрд╛рд╕рд╛рдареА рд╕реНрдЯрдБрдб рддрдпрд╛рд░ рдЖрдгрд┐ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рд╕рдорд╛рдВрддрд░рдкрдгреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЪрд╛рдЪрдгреА рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдлрдХреНрдд рдПрдХ рд╕рдВрд╕рд╛рдзрди рдмрд┐рд▓реНрдб рдпреЛрдЬрдирд╛ рддрдпрд╛рд░ рдХрд░реВрди рд╕рдВрд╕рд╛рдзрдиреЗ рддреНрд╡рд░рд┐рдд рдмрджрд▓реВ рдЖрдгрд┐ рд╣рдЯрд╡реВ рд╢рдХрддрд╛.
"рдЯреЗрд░рд╛рд░рд┐рдпрдо" рдЯреЗрд░рд╛рдлреЙрд░реНрдо
рдЖрдореНрд╣реА рдЯреВрд▓рдЪреНрдпрд╛ рдлрд╛рдпрджреНрдпрд╛рдВрдмрджреНрджрд▓ рдереЛрдбрдХреНрдпрд╛рдд рдмреЛрд▓рд▓реЛ, рдЖрддрд╛ рддреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВрдпрд╛
рдкреНрд░рджрд╛рддреЗ.
рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреНрдпреЗ, рдЬрд╡рд│рдЬрд╡рд│ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╕рдВрд╕рд╛рдзрди рдореНрд╣рдгреВрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рд╕рдВрд╕рд╛рдзрдиреЗ рдЖрдгрд┐ API рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордордзреАрд▓ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рддрд╛ рдореЙрдбреНрдпреВрд▓рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордордзреНрдпреЗ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Azure рдХрд┐рдВрд╡рд╛ VMware vCloud Director.
рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди, рддреБрдореНрд╣реА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рджрд╛рддреНрдпрд╛рдВрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзреВ рд╢рдХрддрд╛.
рд╕рдВрд╕рд╛рдзрдиреЗ (рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдгрди).
рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рд╡рд░реНрдгрди рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдШрдЯрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдЬрд╕реЗ рдХреА рдЖрднрд╛рд╕реА рдорд╢реАрди рдХрд┐рдВрд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХ.
рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ VMware vCloud Director рдкреНрд░рджрд╛рддреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдгрди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ vCloud Director рд╡рд╛рдкрд░рдгрд╛рд░реНтАНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддреНрдпрд╛рд╕рд╣ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╡рд░реНрдгрди рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддреНрдпрд╛рдХрдбреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ
рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░реНрд╕.
рд╣рд╛ рдШрдЯрдХ рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордЪреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рдЖрдгрд┐ рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рдгреЗ рд╢рдХреНрдп рдХрд░рддреЗ. рдПрдХрджрд╛ рддреБрдореНрд╣реА рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд░рд┐рд╕реЛрд░реНрд╕ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░, рддреБрдореНрд╣реА SSH рджреНрд╡рд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдЖрдгрд┐ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рд░рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░реНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
рдЗрдирдкреБрдЯ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕.
рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ - рдХреЛрдгрддреНрдпрд╛рд╣реА рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕.
рдЖрдЙрдЯрдкреБрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдореВрд▓реНрдпреЗ рдЬрддрди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд рдЖрдгрд┐ рдЗрддрд░ рдореЙрдбреНрдпреВрд▓реНрд╕рдордзреНрдпреЗ рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░реНрд╕ рдмреНрд▓реЙрдХрдордзреНрдпреЗ.
рд░рд╛рдЬреНрдпреЗ.
рд╕реНрдЯреЗрдЯреНрд╕ рдлрд╛рдЗрд▓реНрд╕ рдкреНрд░рджрд╛рддрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддрд╛рдд. рдЬреЗрд╡реНрд╣рд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдкреНрд░рдердо рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдмрджреНрджрд▓ рдХреЛрдгрддреАрд╣реА рдорд╛рд╣рд┐рддреА рдирд╕рддреЗ рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд╣реА рдСрдкрд░реЗрд╢рдирдкреВрд░реНрд╡реА, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЖрдзреАрдЪ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╣ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддреЗ.
рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордордзреНрдпреЗ рд╡рд╛рд░рдВрд╡рд╛рд░ рдирд┐рд░реНрдорд╛рдг рдЖрдгрд┐ рдмрджрд▓ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рд╡рд╕реНрддреВрдВрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡рд╕реНрддреВрдВрдЪрд╛ рд╕рдореВрд╣ рдЬрддрди рдХрд░рдгреЗ рд╣рд╛ рд░рд╛рдЬреНрдпрд╛рдВрдЪрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢ рдЖрд╣реЗ.
рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рд░рд╛рдЬреНрдп рдорд╛рд╣рд┐рддреА рд╕реНрдерд╛рдирд┐рдХ terraform.tfstate рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ, рдкрд░рдВрддреБ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЯреАрдо рд╡рд░реНрдХрд╕рд╛рдареА рд░рд┐рдореЛрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ.
рдЯреЗрд░рд╛рдлреЙрд░реНрдордЪреНрдпрд╛ рдорджрддреАрд╢рд┐рд╡рд╛рдп рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╢реА рдЖрдгрдЦреА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╡рд░реНрддрдорд╛рди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╕рдВрд╕рд╛рдзрдиреЗ рд░рд╛рдЬреНрдпрд╛рдд рдЖрдпрд╛рдд рдХрд░реВ рд╢рдХрддрд╛.
2. рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреА рдирд┐рд░реНрдорд┐рддреА
рдШрдЯрдХрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ, рдЖрддрд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╡рд╛рдкрд░реВрди рдЖрдореНрд╣реА рд╣рд│реВрд╣рд│реВ рддреАрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╣ рдПрдХ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддрдпрд╛рд░ рдХрд░реВ. рдкрд╣рд┐рд▓рд╛ nginx рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓рд╛, рджреБрд╕рд░рд╛ рдиреЗрдХреНрд╕реНрдЯрдХреНрд▓рд╛рдЙрдбрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдлрд╛рдЗрд▓ рд╕реНрдЯреЛрд░реЗрдЬрд╕рд╣ рдЖрдгрд┐ рддрд┐рд╕рд░рд╛ CMS Bitrix рд╕рд╣.
рдЖрдореНрд╣реА рдХреЛрдб рд▓рд┐рд╣реВ рдЖрдгрд┐ рдЖрдордЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ
рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛ рдирд╡реАрди рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░реВ рдЬреНрдпрд╛рдордзреНрдпреЗ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд▒реНрдпрд╛ рдлрд╛рдИрд▓реНрд╕ рдареЗрд╡рд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.
mkdir project01
рдкреБрдвреЗ, рдЖрдореНрд╣реА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ. рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдлрд╛рдпрд▓реАрдВрдордзреАрд▓ рд╡рд░реНрдгрдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдмрдВрдз рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рдлрд╛рдЗрд▓реНрд╕рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ. рдлрд╛рдпрд▓реАрдВрдирд╛ рд╕реНрд╡рддрдГрдЪ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмреНрд▓реЙрдХреНрд╕рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд╛рд╡ рджрд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, network.tf - рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╛рдареА рдиреЗрдЯрд╡рд░реНрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ.
рдЖрдордЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд:
рдлрд╛рдпрд▓реАрдВрдЪреА рдпрд╛рджреА.
main.tf - рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреЗ рд╡рд░реНрдгрди - рдЖрднрд╛рд╕реА рдорд╢реАрди, рдЖрднрд╛рд╕реА рдХрдВрдЯреЗрдирд░;
network.tf - рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрдгрд┐ NAT рдЖрдгрд┐ рдлрд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдорд╛рдВрдЪреЗ рд╡рд░реНрдгрди;
variables.tf - рдЖрдкрдг рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЪрд▓рд╛рдВрдЪреА рдпрд╛рджреА;
vcd.tfvars - VMware vCloud рдбрд╛рдпрд░реЗрдХреНрдЯрд░ рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реНрд╣реЕрд▓реНрдпреВрдЬ.
рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рднрд╛рд╖рд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рдЖрд╣реЗ рдЖрдгрд┐ рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░ рдмреНрд▓реЙрдХреНрд╕рд╢рд┐рд╡рд╛рдп рдмреНрд▓реЙрдХреНрд╕рдЪрд╛ рдХреНрд░рдо рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдпрд╛ рдмреНрд▓реЙрдХрдордзреНрдпреЗ рдЖрдореНрд╣реА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдЖрджреЗрд╢рд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ рдЖрдгрд┐ рддреЗ рдХреНрд░рдорд╛рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.
рдмреНрд▓реЙрдХ рд░рдЪрдирд╛.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
рдмреНрд▓реЙрдХреНрд╕рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдЪреА рд╕реНрд╡рддрдГрдЪреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ HCL (HashiCorp рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рдБрдЧреНрд╡реЗрдЬ) рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ; JSON рд╡рд╛рдкрд░реВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рдЖрдкрдг рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдК рд╢рдХрддрд╛
рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, variables.tf рдЖрдгрд┐ vcd.tfvars
рдкреНрд░рдердо, рд╡реНрд╣реАрдПрдорд╡реЗрдЕрд░ vCloud рдбрд╛рдпрд░реЗрдХреНрдЯрд░ рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рд╕рд░реНрд╡ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреА рд╕реВрдЪреА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рдореВрд▓реНрдпреЗ рдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рджреЛрди рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдкреНрд░рдердо, variables.tf рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░реВ.
variables.tf рдлрд╛рдЗрд▓рдЪреА рд╕рд╛рдордЧреНрд░реА.
variable "vcd_org_user" {
description = "vCD Tenant User"
}
variable "vcd_org_password" {
description = "vCD Tenant Password"
}
variable "vcd_org" {
description = "vCD Tenant Org"
}
variable "vcd_org_vdc" {
description = "vCD Tenant VDC"
}
variable "vcd_org_url" {
description = "vCD Tenant URL"
}
variable "vcd_org_max_retry_timeout" {
default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
default = "true"
}
variable "vcd_org_edge_name" {
description = "vCD edge name"
}
variable "vcd_org_catalog" {
description = "vCD public catalog"
}
variable "vcd_template_os_centos7" {
description = "OS CentOS 7"
default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
description = "Storage Policies"
default = "Gold Storage Policy"
}
variable "vcd_org_hdd_sp" {
description = "Storage Policies"
default = "Bronze Storage Policy"
}
variable "vcd_edge_local_subnet" {
description = "Organization Network Subnet"
}
variable "vcd_edge_external_ip" {
description = "External public IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
рдкреНрд░рджрд╛рддреНрдпрд╛рдХрдбреВрди рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдгрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдпреЗ.
-
vcd_org_user тАФ рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░рд╛рдВрд╕рд╣ рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡,
-
vcd_org_password тАФ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб,
-
vcd_org тАФ рд╕рдВрд╕реНрдереЗрдЪреЗ рдирд╛рд╡,
-
vcd_org_vdc тАФ рдЖрднрд╛рд╕реА рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░рдЪреЗ рдирд╛рд╡,
-
vcd_org_url - API URL,
-
vcd_org_edge_name тАФ рдЖрднрд╛рд╕реА рд░рд╛рдЙрдЯрд░рдЪреЗ рдирд╛рд╡,
-
vcd_org_catalog тАФ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рд╕рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪреЗ рдирд╛рд╡,
-
vcd_edge_external_ip тАФ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдкрддреНрддрд╛,
-
vcd_edge_external_network тАФ рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдирд╛рд╡,
-
vcd_org_hdd_sp тАФ HDD рд╕реНрдЯреЛрд░реЗрдЬ рдкреЙрд▓рд┐рд╕реАрдЪреЗ рдирд╛рд╡,
-
vcd_org_ssd_sp тАФ SSD рд╕реНрдЯреЛрд░реЗрдЬ рдкреЙрд▓рд┐рд╕реАрдЪреЗ рдирд╛рд╡.
рдЖрдгрд┐ рдЖрдордЪреЗ рдЪрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛:
-
vcd_edge_local_ip_nginx тАФ NGINX рд╕рд╣ рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛,
-
vcd_edge_local_ip_bitrix - 1C рд╕рд╣ рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛: Bitrix,
-
vcd_edge_local_ip_nextcloud тАФ рдиреЗрдХреНрд╕реНрдЯрдХреНрд▓рд╛рдЙрдбрд╕рд╣ рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪрд╛ IP рдкрддреНрддрд╛.
рджреБрд╕рд▒реНрдпрд╛ рдлрд╛рдИрд▓рд╕рд╣ рдЖрдореНрд╣реА vcd.tfvars рдлрд╛рдЗрд▓рдордзреНрдпреЗ VMware vCloud рдбрд╛рдпрд░реЗрдХреНрдЯрд░ рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ: рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдореНрд╣реА рд╡рд╛рдкрд░рддреЛ рддреЗ рдЖрдард╡реВрдпрд╛
vcd.tfvars рдлрд╛рдЗрд▓рдЪреА рд╕рд╛рдордЧреНрд░реА.
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Gold Storage Policy"
vcd_org_hdd_sp = "Bronze Storage Policy"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, network.tf.
рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдЖрддрд╛ рдЖрдореНрд╣реА рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдХрдиреЗрдХреНрд╢рди рдпреЛрдЬрдирд╛ рд╕реЗрдЯ рдХрд░реВ - рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд▓рд╛ рдПрдХ рдЦрд╛рдЬрдЧреА IP рдкрддреНрддрд╛ рдирд┐рдпреБрдХреНрдд рдХрд░реВ рдЖрдгрд┐ рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдкреЛрд░реНрдЯ "рдлреЙрд░рд╡рд░реНрдб" рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЧрдВрддрд╡реНрдп NAT рд╡рд╛рдкрд░реВ. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреЛрд░реНрдЯрд╡рд░ рдкреНрд░рд╡реЗрд╢ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдлрдХреНрдд рдЖрдордЪреНрдпрд╛ IP рдкрддреНрддреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рд╕реЗрдЯ рдХрд░реВ.
рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рдиреЗрдЯрд╡рд░реНрдХ рдЖрдХреГрддреА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рдд рдЖрд╣реЗ
рдЖрдореНрд╣реА net_lan01 рдирд╛рд╡рд╛рдиреЗ рдПрдХ рдЖрднрд╛рд╕реА рд╕рдВрд╕реНрдерд╛рддреНрдордХ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рддреЛ, рдбреАрдлреЙрд▓реНрдЯ рдЧреЗрдЯрд╡реЗ: 192.168.110.254, рдЖрдгрд┐ рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕: 192.168.110.0/24.
рдЖрдореНрд╣реА рдЖрднрд╛рд╕реА рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ.
resource "vcd_network_routed" "net" {
name = "net_lan01"
edge_gateway = var.vcd_org_edge_name
gateway = "192.168.110.254"
dns1 = "1.1.1.1"
dns2 = "8.8.8.8"
static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
}
}
рдЪрд▓рд╛ рдлрд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░реВ рдЬреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдиреНрд╕рдирд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рдпрд╛ рдмреНрд▓реЙрдХрдордзреНрдпреЗ, рдХреНрд▓рд╛рдЙрдбрдордзреАрд▓ рд╕рд░реНрд╡ рдЖрднрд╛рд╕реА рд╕рдВрд╕рд╛рдзрдирд╛рдВрдирд╛ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдкреНрд░рд╡реЗрд╢ рдЕрд╕реЗрд▓:
рдЖрдореНрд╣реА рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ VM рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╛рдареА рдирд┐рдпрдорд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ.
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
edge_gateway = var.vcdorgedgename
name = "Internet Access"
source {
gateway_interfaces = ["internal"]
}
destination {
gateway_interfaces = ["external"]
}
service {
protocol = "any"
}
depends_on = [vcdnetworkrouted.net]
}
vcdnetworkrouted.net рдмреНрд▓реЙрдХрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА vcdnsxvfirewallrule рдмреНрд▓реЙрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдвреЗ рдЬрд╛рдК., рд╡рд╛рдкрд░реВрди рдЪреНрдпрд╛ рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рдгреЗ. рдЖрдореНрд╣реА рд╣рд╛ рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░рддреЛ рдХрд╛рд░рдг рдХрд╛рд╣реА рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдУрд│рдЦрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
рдкреБрдвреЗ, рдЖрдореНрд╣реА рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░реВ рдЬреЗ рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрд╡рд░реВрди рдкреЛрд░реНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд рдЖрдгрд┐ SSH рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪрд╛ IP рдкрддреНрддрд╛ рд╕реВрдЪрд┐рдд рдХрд░реВ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдЗрдВрдЯрд░рдиреЗрдЯ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рдкреЛрд░реНрдЯ 80 рдЖрдгрд┐ 443 рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рддреЛ рдЖрдгрд┐ 90.1.15.1 рдЪрд╛ IP рдкрддреНрддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ SSH рдкреЛрд░реНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рддреЛ.
рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрд╡рд░реВрди рдкреЛрд░реНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреНрдпрд╛.
resource "vcd_nsxv_firewall_rule" "fwnatports" {
edge_gateway = var.vcd_org_edge_name
name = "HTTPs Access"
source {
gateway_interfaces = ["external"]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "80"
}
service {
protocol = "tcp"
port = "443"
}
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
edge_gateway = var.vcd_org_edge_name
name = "Admin Access"
source {
ip_addresses = [ "90.1.15.1" ]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "58301"
}
service {
protocol = "tcp"
port = "58302"
}
service {
protocol = "tcp"
port = "58303"
}
depends_on = [vcd_network_routed.net]
}
рдХреНрд▓рд╛рдЙрдб рд╕реНрдерд╛рдирд┐рдХ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░реВрди рдЗрдВрдЯрд░рдиреЗрдЯ рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╕реНрддреНрд░реЛрдд NAT рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░рддреЛ:
рдЖрдореНрд╣реА рд╕реНрддреНрд░реЛрдд NAT рдирд┐рдпрдорд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ.
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
network_type = "ext"
network_name = var.vcdedgeexternalnetwork
original_address = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
depends_on = [vcd_network_routed.net]
}
рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХрдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрд╡рд░реВрди рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЧрдВрддрд╡реНрдп NAT рдирд┐рдпрдо рдЬреЛрдбрддреЛ:
рдЧрдВрддрд╡реНрдп NAT рдирд┐рдпрдо рдЬреЛрдбрдд рдЖрд╣реЗ.
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Nginx рдЕрдВрддрд░реНрдЧрдд SSH рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкреЛрд░реНрдЯ рдЕрдиреБрд╡рд╛рджрд╛рд╕рд╛рдареА NAT рдирд┐рдпрдо рдЬреЛрдбрд╛.
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
1C-Bitrix рд╕рд╣ SSH рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкреЛрд░реНрдЯ рднрд╛рд╖рд╛рдВрддрд░рд╛рд╕рд╛рдареА NAT рдирд┐рдпрдо рдЬреЛрдбрд╛.
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
рдиреЗрдХреНрд╕реНрдЯрдХреНрд▓рд╛рдЙрдбрд╕рд╣ SSH рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкреЛрд░реНрдЯ рднрд╛рд╖рд╛рдВрддрд░рд╛рд╕рд╛рдареА NAT рдирд┐рдпрдо рдЬреЛрдбрд╛.
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303
translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Main.tf рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
рдЖрдореНрд╣реА рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдпреЛрдЬрдирд╛ рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдореНрд╣реА рддреАрди рдЖрднрд╛рд╕реА рдорд╢реАрди рддрдпрд╛рд░ рдХрд░реВ. рддреЗ "рдЧреЗрд╕реНрдЯ рдХрд╕реНрдЯрдорд╛рдпрдЭреЗрд╢рди" рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓. рдЖрдореНрд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдиреБрд╕рд╛рд░ рдЖрдореНрд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реЗрдЯ рдХрд░реВ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рдВрдХреЗрддрд╢рдмреНрдж рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓.
рдЪрд▓рд╛ vApp рдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдиреНрд╕ рдЕрд╕рддреАрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреЗ.
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
рдЪрд▓рд╛ vApp рдХрдВрдЯреЗрдирд░ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдЬреЗрдгреЗрдХрд░реБрди рдЖрдореНрд╣реА vApp рдЖрдгрд┐ VM рд▓рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХрд╢реА рддреНрд╡рд░рд┐рдд рдХрдиреЗрдХреНрдЯ рдХрд░реВ рд╢рдХреВ, рдЖрдореНрд╣реА depends_on рдкреЕрд░рд╛рдореАрдЯрд░ рджреЗрдЦреАрд▓ рдЬреЛрдбреВ:
рдПрдХ рдХрдВрдЯреЗрдирд░ рддрдпрд╛рд░ рдХрд░рд╛
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
рдЪрд▓рд╛ рд╡рд░реНрдгрдирд╛рд╕рд╣ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдмрдирд╡реВ
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
VM рд╡рд░реНрдгрдирд╛рддреАрд▓ рдореБрдЦреНрдп рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕:
-
рдирд╛рд╡ - рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪреЗ рдирд╛рд╡,
-
vappname - vApp рдЪреЗ рдирд╛рд╡ рдЬреНрдпрд╛рдордзреНрдпреЗ рдирд╡реАрди VM рдЬреЛрдбрд╛рдпрдЪрд╛ рдЖрд╣реЗ,
-
catalogname / templatename - рдХреЕрдЯрд▓реЙрдЧ рдирд╛рд╡ рдЖрдгрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╛рд╡,
-
рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░реЛрдлрд╛рдЗрд▓ - рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдзреЛрд░рдг.
рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕:
-
рдкреНрд░рдХрд╛рд░ - рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рдкреНрд░рдХрд╛рд░,
-
рдирд╛рд╡ тАФ VM рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдЖрднрд╛рд╕реА рдиреЗрдЯрд╡рд░реНрдХрд╢реА рдЬреЛрдбрд╛рдпрдЪреЗ рдЖрд╣реЗ,
-
isprimary - рдкреНрд░рд╛рдердорд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдбреЕрдкреНрдЯрд░,
-
ipallocation_mode тАФ MANUAL/DHCP/POOL рдкрддреНрддрд╛ рд╡рд╛рдЯрдк рдореЛрдб,
-
ip тАФ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╛рдареА IP рдкрддреНрддрд╛, рдЖрдореНрд╣реА рддреЛ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ.
override_template_disk рдмреНрд▓реЙрдХ:
-
sizeinmb тАФ рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╛рдареА рдмреВрдЯ рдбрд┐рд╕реНрдХ рдЖрдХрд╛рд░
-
store_profile тАФ рдбрд┐рд╕реНрдХрд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ рдзреЛрд░рдг
рдиреЗрдХреНрд╕реНрдЯрдХреНрд▓рд╛рдЙрдб рдлрд╛рдЗрд▓ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рд╕рд╣ рджреБрд╕рд░рд╛ VM рддрдпрд╛рд░ рдХрд░реВ
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
vcdvminternal_disk рд╡рд┐рднрд╛рдЧрд╛рдд рдЖрдореНрд╣реА рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╢реА рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдирд╡реАрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдбрд┐рд╕реНрдХрдЪреЗ рд╡рд░реНрдгрди рдХрд░реВ.
vcdvminternaldisk рдмреНрд▓реЙрдХрдЪреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
-
bustype - рдбрд┐рд╕реНрдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░рдХрд╛рд░
-
sizeinmb тАФ рдбрд┐рд╕реНрдХрдЪрд╛ рдЖрдХрд╛рд░
-
рдмрд╕ рдирдВрдмрд░ / рдпреБрдирд┐рдЯ рдирдВрдмрд░ - рдЕрдбреЕрдкреНрдЯрд░рдордзреАрд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рди
-
store_profile тАФ рдбрд┐рд╕реНрдХрд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ рдзреЛрд░рдг
рдЪрд▓рд╛ Bitrix рд╡рд░ рдирд╡реАрдирддрдо VM рдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛
resource "vcd_vapp_vm" "bitrix" {
vapp_name = vcd_vapp.vapp.name
name = "bitrix"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "81920"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
OS рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ
рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЖрдордЪреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░ рдмреНрд▓реЙрдХреНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЖрдгрд┐ рдЙрддреНрддрд░рджрд╛рдпрд┐рдд рди рд╡рд╛рдкрд░рддрд╛ рдЖрдЧрд╛рдК рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрд░рддреВрдж рдХрд░реВ рд╢рдХрддреЛ.
рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░ рдмреНрд▓реЙрдХ рд╡рд╛рдкрд░реВрди рдУрдПрд╕ рдЕрдкрдбреЗрдЯ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рд╕реАрдПрдордПрд╕ рдмрд┐рдЯреНрд░рд┐рдХреНрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╕реЗ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ.
рдкреНрд░рдердо, CentOS рдЕрдкрдбреЗрдЯ рдкреЕрдХреЗрдЬреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдпрд╛.
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
рдШрдЯрдХрд╛рдВрдЪреЗ рдкрджрдирд╛рдо:
-
provisioner тАЬremote-execтАЭ - рд░рд┐рдореЛрдЯ рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХрдиреЗрдХреНрдЯ рдХрд░рд╛
-
рдХрдиреЗрдХреНрд╢рди рдмреНрд▓реЙрдХрдордзреНрдпреЗ рдЖрдореНрд╣реА рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдкреНрд░рдХрд╛рд░ рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ:
-
рдкреНрд░рдХрд╛рд░ тАФ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд SSH;
-
рд╡рд╛рдкрд░рдХрд░реНрддрд╛ - рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд╛рд╡;
-
рдкрд╛рд╕рд╡рд░реНрдб тАФ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣реА vcdvappvm.nginx.customization[0].admin_password рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓рд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ.
-
рд╣реЛрд╕реНрдЯ - рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдмрд╛рд╣реНрдп IP рдкрддреНрддрд╛;
-
рдкреЛрд░реНрдЯ тАФ рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдкреЛрд░реНрдЯ, рдЬреЗ рдкреВрд░реНрд╡реА DNAT рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рд╣реЛрддреЗ;
-
рдЗрдирд▓рд╛рдЗрди - рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдЖрджреЗрд╢рд╛рдВрдЪреА рдпрд╛рджреА рдХрд░рд╛. рдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдЖрджреЗрд╢ рдХреНрд░рдорд╛рдиреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.
рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, 1C-Bitrix рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдЦреАрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ. рдпреЛрдЬрдирд╛ рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдирд┐рдХрд╛рд▓рд╛рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдЙрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рдердо рдЖрдореНрд╣реА рдмреНрд▓реЙрдХрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ:
рдЪрд▓рд╛ 1C-Bitrix рдЪреНрдпрд╛ рд╕реНрдерд╛рдкрдиреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛.
provisioner "file" {
source = "prepare.sh"
destination = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрд╡рд░рд┐рдд рдмрд┐рдЯреНрд░рд┐рдХреНрд╕ рдЕрджреНрдпрддрдирд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░реВ.
1C-Bitrix рддрд░рддреВрджреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг.
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
рдорд╣рддреНрд╡рд╛рдЪреЗ! рддреБрдореНрд╣реА рдЖрдЧрд╛рдК SELinux рдЕрдХреНрд╖рдо рди рдХреЗрд▓реНрдпрд╛рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА! рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ bitrix-env.sh рд╡рд╛рдкрд░реВрди CMS 1C-Bitrix рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд▓реЗрдЦ рд╣рд╡рд╛ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛
3. рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЖрд░рдВрдн рдХрд░рдгреЗ
рдореЙрдбреНрдпреВрд▓реНрд╕ рдЖрдгрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ
рдХрд╛рдорд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХ рд╕рд╛рдзреЗ "рдЬрдВрдЯрд▓рдорди рдХрд┐рдЯ" рд╡рд╛рдкрд░рддреЛ: Windows 10 OS рд╕рд╣ рд▓реЕрдкрдЯреЙрдк рдЖрдгрд┐ рдЕрдзрд┐рдХреГрдд рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рд╡рд┐рддрд░рдг рдХрд┐рдЯ terraform.exe init
рд╕рдВрдЧрдгрдХреАрдп рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЬрдирд╛ рд╕реБрд░реВ рдХрд░рддреЛ, рдЬрд┐рдереЗ рдЖрдореНрд╣реА рдХрд╛рдп рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рддреЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рдХрд╕реЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рдИрд▓ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддреЛ.
-
рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛
- terraform plan -var-file=vcd.tfvars
. -
рдЖрдореНрд╣рд╛рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рддреЛ
- Plan: 16 to add, 0 to change, 0 to destroy.
рдореНрд╣рдгрдЬреЗрдЪ, рдпрд╛ рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░, 16 рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреАрд▓. -
рдЖрдореНрд╣реА рдЖрджреЗрд╢рд╛рдиреБрд╕рд╛рд░ рдпреЛрдЬрдирд╛ рд╕реБрд░реВ рдХрд░рддреЛ
- terraform.exe apply -var-file=vcd.tfvars
.
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓, рдЖрдгрд┐ рдирдВрддрд░ рдЖрдореНрд╣реА рд╕реВрдЪреАрдмрджреНрдз рдХреЗрд▓реЗрд▓реА рдкреЕрдХреЗрдЬреЗрд╕ рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд░ рд╡рд┐рднрд╛рдЧрд╛рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреАрд▓ - OS рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ CMS Bitrix рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.
рдХрдиреЗрдХреНрд╢рди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдд рдЖрд╣реЗ
рдпреЛрдЬрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдордЬрдХреВрд░ рд╕реНрд╡рд░реВрдкрд╛рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ, рдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рднрд╛рдЧ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░реВ:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЖрдореНрд╣рд╛рд▓рд╛ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╛рдареА рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╛рдВрдЧрддреЗ:
Outputs: nginx_password = F#4u8!!N
рдкрд░рд┐рдгрд╛рдореА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдкреБрдвреАрд▓ рдХрд╛рдорд╛рд╕рд╛рдареА рдЕрджреНрдпрдпрд╛рд╡рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрдгрд┐ рдкреНрд░реА-рдЗрдВрд╕реНрдЯреЙрд▓ рдкреЕрдХреЗрдЬреЗрд╕рд╕рд╣ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рддреЛ. рд╕рд░реНрд╡ рддрдпрд╛рд░ рдЖрд╣реЗ!
рдкрд░рдВрддреБ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдзреАрдЪ рд╡рд┐рджреНрдпрдорд╛рди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рдХрд╛рдп?
рей.рез. рд╡рд┐рджреНрдпрдорд╛рди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╣ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХрд╛рд░реНрдпрд░рдд рдЖрд╣реЗ
рд╣реЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рддреБрдореНрд╣реА рдЖрдпрд╛рдд рдЖрджреЗрд╢ рд╡рд╛рдкрд░реВрди рд╡рд░реНрддрдорд╛рди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ vApp рдХрдВрдЯреЗрдирд░ рдЖрдпрд╛рдд рдХрд░реВ рд╢рдХрддрд╛.
рдЪрд▓рд╛ vAPP рд╕рдВрд╕рд╛рдзрди рдЖрдгрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдпрд╛.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ vApp рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рдЖрдпрд╛рдд рдХрд░рдгреЗ vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
, рдХреЛрдареЗ:
-
vApp - vApp рдирд╛рд╡;
-
org тАФ рд╕рдВрд╕реНрдереЗрдЪреЗ рдирд╛рд╡;
-
org_vdc тАФ рдЖрднрд╛рд╕реА рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░рдЪреЗ рдирд╛рд╡.
VAPP рд╕рдВрд╕рд╛рдзрди рдЧреБрдгрдзрд░реНрдо рдЖрдпрд╛рдд рдХрд░рдд рдЖрд╣реЗ
рдЪрд▓рд╛ VM рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рдЖрдпрд╛рдд рдХрд░реВрдпрд╛: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, рдЬреНрдпрд╛рдордзреНрдпреЗ:
-
VM - VM рдирд╛рд╡;
-
vApp - vApp рдирд╛рд╡;
-
org тАФ рд╕рдВрд╕реНрдереЗрдЪреЗ рдирд╛рд╡;
-
orgvdc рд╣реЗ рдЖрднрд╛рд╕реА рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░рдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ.
рдЖрдпрд╛рдд рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реА
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import prepared!
Prepared vcd_vapp_vm for import
vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
рдЖрддрд╛ рдЖрдкрдг рдирд╡реАрди рдЖрдпрд╛рддрд┐рдд рд╕рдВрд╕рд╛рдзрди рдкрд╛рд╣реВ рд╢рдХрддреЛ:
рдЖрдпрд╛рдд рдХреЗрд▓реЗрд▓реЗ рд╕рдВрд╕рд╛рдзрди
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
тАж
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
рдЖрддрд╛ рдЖрдореНрд╣реА рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдЖрд╣реЛрдд - рдЖрдореНрд╣реА рд╢реЗрд╡рдЯрдЪрд╛ рдореБрджреНрджрд╛ рдкреВрд░реНрдг рдХреЗрд▓рд╛ рдЖрд╣реЗ (рд╡рд┐рджреНрдпрдорд╛рди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ рдЖрдпрд╛рдд рдХрд░рдгреЗ) рдЖрдгрд┐ рдЯреЗрд░рд╛рдлреЙрд░реНрдорд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдореБрдЦреНрдп рдореБрджреНрджреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ.
рд╣реЗ рд╕рд╛рдзрди рдЕрддрд┐рд╢рдп рд╕реЛрдпреАрдЪреЗ рдард░рд▓реЗ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рдХреЛрдб рдореНрд╣рдгреВрди рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рдПрдХрд╛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рдЪреНрдпрд╛ рдЖрднрд╛рд╕реА рдорд╢реАрдирдкрд╛рд╕реВрди рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.
рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рдкрд╛рд╕реВрди рд╕реНрд╡рд╛рддрдВрддреНрд░реНрдп рд╕реНрдерд╛рдирд┐рдХ, рдХреНрд▓рд╛рдЙрдб рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рд╢рдХреНрдп рдХрд░рддреЗ. рдЖрдгрд┐ рдЬрд░ рдХреЛрдгрддреЗрд╣реА рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдирд╕реЗрд▓ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдирд╡реАрди рдЬреЛрдбрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдкреНрд░рджрд╛рддрд╛ рд▓рд┐рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com