рд╣рд╛рдореАрд▓реЗ Selectel рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Terraform рдкреНрд░рджрд╛рдпрдХ рд╕реБрд░реВ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдпреЛ рдЙрддреНрдкрд╛рджрдирд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдб рдкрджреНрдзрддрд┐ рдорд╛рд░реНрдлрдд рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдкреНрд░рджрд╛рдпрдХрд▓реЗ рд╣рд╛рд▓ рд╕реЗрд╡рд╛ рд╕реНрд░реЛрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ
рддрдкрд╛рдИрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рдЫ, VPC рд╕реЗрд╡рд╛ OpenStack рдорд╛ рдирд┐рд░реНрдорд┐рдд рдЫред рдЬреЗ рд╣реЛрд╕реН, рдУрдкрдирд╕реНрдЯреНрдпрд╛рдХрд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЙрдбрдХреЛ рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрдЯрд┐рдн рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИрди рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рдХрд╛рд░рдгрд▓реЗ, рд╣рд╛рдореАрд▓реЗ рдЬрдЯрд┐рд▓ рдХрдореНрдкреЛрдЬрд┐рдЯ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рд░ рдХрд╛рдорд▓рд╛рдИ рдердк рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдЙрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд API рд╣рд░реВрдХреЛ рд╕реЗрдЯрдорд╛ рдЫреБрдЯреЗрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдпреМрдВред OpenStack рдорд╛ рдЙрдкрд▓рдмреНрдз рдХреЗрд╣рд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдмрдиреНрдж рдЫ, рддрд░ рдорд╛рд░реНрдлрдд рдЙрдкрд▓рдмреНрдз рдЫ
Selectel Terraform рдкреНрд░рджрд╛рдпрдХрд▓реЗ рдЕрдм рдирд┐рдореНрди VPC рд╕реНрд░реЛрддрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:
- рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХреЛрдЯрд╛;
- рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ, рддрд┐рдиреАрд╣рд░реВрдХреЛ рднреВрдорд┐рдХрд╛ рд░ рдЯреЛрдХрдирд╣рд░реВ;
- рдХреНрд░рд╕-рдХреНрд╖реЗрддреНрд░реАрдп рд░ VRRP рд╕рд╣рд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдмрдиреЗрдЯрд╣рд░реВ;
- рд╕рдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрд╕реЗрдиреНрд╕ред
рдкреНрд░рджрд╛рдпрдХрд▓реЗ VPC API рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╣рд╛рдореНрд░реЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░ рдкреНрд░рджрд╛рдпрдХ рджреБрдмреИ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реБрдиреН, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╡рд┐рдХрд╛рд╕ Github рдорд╛ рдЧрд░рд┐рдиреНрдЫ:
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рднрдгреНрдбрд╛рд░
Go-selvpcclient , - рдкреНрд░рджрд╛рдпрдХ рднрдгреНрдбрд╛рд░
Terraform-рдкреНрд░рджрд╛рдпрдХ Selectel .
рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рд╕реНрд░реЛрддрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди, рдЬрд╕реНрддреИ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ, рдбрд┐рд╕реНрдХрд╣рд░реВ, Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ, рддрдкрд╛рдИрдВрд▓реЗ OpenStack Terraform рдкреНрд░рджрд╛рдпрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рджреБрдмреИ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рдд рдирд┐рдореНрди рд▓рд┐рдЩреНрдХрд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ:
- Selectel рд╕рдВрд╕рд╛рдзрди рджрд╕реНрддрд╛рд╡реЗрдЬ:
Terraform-рдкреНрд░рджрд╛рдпрдХ Selectel , - OpenStack рд╕рдВрд╕рд╛рдзрди рджрд╕реНрддрд╛рд╡реЗрдЬ:
Terraform-рдкреНрд░рджрд╛рдпрдХ OpenStack .
рд╕реБрд░реБрд╡рд╛рдд
рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ Terraform рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд░ рд╕реНрдерд╛рдкрдирд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдпрд╣рд╛рдБ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред
рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди, рдкреНрд░рджрд╛рдпрдХрд▓рд╛рдИ Selectel API рдХреБрдЮреНрдЬреА рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬреБрди рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ
Selectel рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ manifests Terraform рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛ рд╣рд╛рдореНрд░реЛ Github рднрдгреНрдбрд╛рд░рдорд╛ рдЙрдкрд▓рдмреНрдз рд░реЗрдбреАрдореЗрдб рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ:
рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд╕рд╛рде рднрдгреНрдбрд╛рд░рд▓рд╛рдИ рджреБрдИ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ:
- рдореЛрдбреНрдпреБрд▓рд╣рд░реВ, рд╕рд╛рдирд╛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд▓рд┐рдиреНрдЫ рд░ рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рд╕рд╛рдиреЛ рд╕реЗрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрджрдЫ;
- рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ, рдЕрдиреНрддрд░рд╕рдореНрдмрдиреНрдзрд┐рдд рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реЗрдЯрдХреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИред
Terraform рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдкрдЫрд┐, Selectel API рдХреБрдЮреНрдЬреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрд░ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд╕рдБрдЧ рдЖрдлреИрд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рдЧрд░реМрдВ, рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдЬрд╛рдФрдВред
рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рд╕рд░реНрднрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг
рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ, рднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди:
рдлрд╛рдЗрд▓рдорд╛ vars.tf рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдХрд▓ рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╕рдмреИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдХреЗрд╣реА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ рдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рд░реНрднрд░ рдХреНрд╖реЗрддреНрд░рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫ ru-3a рдирд┐рдореНрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рдВрдЧ:
variable "server_vcpus" {
default = 4
}
variable "server_ram_mb" {
default = 8192
}
variable "server_root_disk_gb" {
default = 8
}
variable "server_image_name" {
default = "Ubuntu 18.04 LTS 64-bit"
}
рдлрд╛рдЗрд▓рдорд╛ main.tf Selectel рдкреНрд░рджрд╛рдпрдХ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдЫ:
provider "selectel" {
token = "${var.sel_token}"
}
рдпреЛ рдлрд╛рдЗрд▓рд▓реЗ рд╕рд░реНрднрд░рдорд╛ рд╕реНрдерд╛рдкрдирд╛ рд╣реБрдиреЗ SSH рдХреБрдЮреНрдЬреАрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:
module "server_local_root_disk" {
...
server_ssh_key = "${file("~/.ssh/id_rsa.pub")}"
}
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдлрд░рдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдХреБрдЮреНрдЬреАрд▓рд╛рдИ рдлрд╛рдЗрд▓ рдорд╛рд░реНрдЧрдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди; рддрдкрд╛рдИрдБрд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд░реВрдкрдорд╛ рдорд╛рди рдкрдирд┐ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдпрд╕ рдлрд╛рдЗрд▓рдорд╛ рдердк рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рд╕реБрд░реВ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН Project_with_user ╨╕ рд╕рд░реНрднрд░_рд▓реЛрдХрд▓_рд░реВрдЯ_рдбрд┐рд╕реНрдХрдЬрд╕рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд░реЛрддрд╕рд╛рдзрдирдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдЫ ред
рдпреА рдореЛрдбреНрдпреБрд▓рд╣рд░реВрд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╣реЗрд░реМрдВред
рднреВрдорд┐рдХрд╛рдХреЛ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдкрд╣рд┐рд▓реЛ рдореЛрдбреНрдпреБрд▓рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рддреНрдпрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ:
рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ OpenStack рдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рд░ рдпрд╕рдХреЛ рд╕реНрд░реЛрддрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред рдореЛрдбреНрдпреБрд▓ рд╕рд░рд▓ рдЫ рд░ рдХреЗрд╡рд▓ рддреАрди рд╕рдВрд╕реНрдерд╛рд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрджрдЫ:
- Selectel_vpc_project_v2,
- Selectel_vpc_user_v2,
- Selectel_vpc_role_v2.
рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рд╕рд░реНрднрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рджреЛрд╕реНрд░реЛ рдореЛрдбреНрдпреБрд▓рд▓реЗ рдУрдкрдирд╕реНрдЯреНрдпрд╛рдХ рд╡рд╕реНрддреБрд╣рд░реВ рдкреНрд░рдмрдиреНрдзрдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫ, рдЬреБрди рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рд╕рд░реНрднрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрд░реЛрддрдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХрд╛ рдХреЗрд╣реА рддрд░реНрдХрд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ openstack_compute_instance_v2:
resource "openstack_compute_instance_v2" "instance_1" {
...
lifecycle {
ignore_changes = ["image_id"]
}
vendor_options {
ignore_resize_confirmation = true
}
}
рддрд░реНрдХ ignore_changes рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ id рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫрд╡рд┐рдХреЛ рд▓рд╛рдЧрд┐ред VPC рд╕реЗрд╡рд╛рдорд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЫрд╡рд┐рд╣рд░реВ рд╣рдкреНрддрд╛рдорд╛ рдПрдХ рдкрдЯрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрдиреНрдЫрдиреН рд░ рдПрдХреИ рд╕рдордпрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ id рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫред рдпреЛ OpenStack рдХрдореНрдкреЛрдиреЗрдиреНрдЯ - Glance рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░рдг рд╣реЛ, рдЬрд╕рдорд╛ рдЫрд╡рд┐рд╣рд░реВрд▓рд╛рдИ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд╕реНрдерд╛рд╣рд░реВ рдорд╛рдирд┐рдиреНрдЫред
рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╡рд┐рджреНрдпрдорд╛рди рд╕рд░реНрднрд░ рд╡рд╛ рдбрд┐рд╕реНрдХ рд╕рд┐рд░реНрдЬрдирд╛ рд╡рд╛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рдЫ image_id рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ id рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЫрд╡рд┐, рддреНрдпрд╕рдкрдЫрд┐ рддреНрдпреЛ рдЫрд╡рд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, Terraform manifest рдлреЗрд░рд┐ рдЪрд▓рд╛рдЙрдБрджрд╛ рд╕рд░реНрднрд░ рд╡рд╛ рдбрд┐рд╕реНрдХ рдкреБрди: рд╕рд┐рд░реНрдЬрдирд╛ рд╣реБрдиреЗрдЫред рддрд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ ignore_changes рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдмрд╛рдЯ рдмрдЪреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдиреЛрдЯ: рддрд░реНрдХ ignore_changes рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордп рдкрд╣рд┐рд▓реЗ Terraform рдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдпреЛ:
рддрд░реНрдХ ignore_resize_confirmation рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХ, рдХреЛрд░, рд╡рд╛ рд╕рд░реНрднрд░ рдореЗрдореЛрд░реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд░рд┐рд╕рд╛рдЗрдЬ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреНрдпрд╕реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ OpenStack Nova рдХрдореНрдкреЛрдиреЗрдиреНрдЯ рдорд╛рд░реНрдлрдд рдЕрдиреБрд░реЛрдз рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрдирд╛рдЗрдиреНрдЫ рдкреБрдирдГрдЖрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдиреБрд░реЛрдз рдкрдЫрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдиреЛрднрд╛ рдкреБрдирдГрдЖрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рд░реНрднрд░рд▓рд╛рдИ рд╕реНрдерд┐рддрд┐рдорд╛ рд░рд╛рдЦреНрдЫ verify_resize рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдердк рдкреБрд╖реНрдЯрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреНрдЫред рдпрджреНрдпрдкрд┐, рдпреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рддрд╛рдХрд┐ рдиреЛрднрд╛рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдердк рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрджреИрдиред
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХрд▓реЗ Terraform рд▓рд╛рдИ рд╕реНрдерд┐рддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ verify_resize рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐ рд░ рдпрд╕рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐ рд╕рд░реНрднрд░ рд╕рдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐рдорд╛ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рд░рд╣рдиреБрд╣реЛрд╕реНред рддрд░реНрдХ OpenStack Terraform рдкреНрд░рджрд╛рдпрдХрдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.10.0 рдмрд╛рдЯ рдЙрдкрд▓рдмреНрдз рдЫ:
рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
manifests рдЪрд▓рд╛рдЙрдиреБ рдЕрдШрд┐, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рджреБрдИ рдлрд░рдХ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ рд╕реБрд░реВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ OpenStack рдкреНрд░рджрд╛рдпрдХ Selectel рдкреНрд░рджрд╛рдпрдХрдХреЛ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдХрд┐рдирдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдирдЧрд░реАрдХрди, рдпреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд╕реНрддреБрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдЫред ред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЙрд╣реА рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдХреЗрд╡рд▓ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рд╕рдХреНрджреИрдиреМрдВ terraform рд▓рд╛рдЧреВ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдг рднрд┐рддреНрд░ред рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдирд┐рд╡реЗрджрди рдЧрд░реНрдиреБ рдореЛрдбреНрдпреБрд▓рдХреЛ рд▓рд╛рдЧрд┐ Project_with_user рд░ рддреНрдпрд╕ рдкрдЫрд┐ рдЕрд░реВ рд╕рдмреИрдХреЛ рд▓рд╛рдЧрд┐ред
рдиреЛрдЯ: рдпреЛ рдореБрджреНрджрд╛ рдЕрдЭреИ Terraform рдорд╛ рд╣рд▓ рднрдПрдХреЛ рдЫреИрди, рддрдкрд╛рдИрдВ рдорд╛ Github рдорд╛ рдЫрд▓рдлрд▓ рдкрдЫреНрдпрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН
$ ls
README.md main.tf vars.tf
рд╣рд╛рдореАрд▓реЗ рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрдЫреМрдВ:
$ terraform init
рдЖрдЙрдЯрдкреБрдЯрд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ Terraform рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджрдЫ рд░ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рд╕рдмреИ рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред
рдкрд╣рд┐рд▓реЗ рдореЛрдбреНрдпреБрд▓ рд▓рд╛рдЧреВ рдЧрд░реМрдВ Project_with_userред рдпрд╕рд▓рд╛рдИ рд╕реЗрдЯ рдирдЧрд░рд┐рдПрдХрд╛ рдЪрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░реНрдиреЗ рдорд╛рдирд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдЫ:
- sel_рдЦрд╛рддрд╛ рдЖрдлреНрдиреЛ Selectel рдЦрд╛рддрд╛ рдирдореНрдмрд░ рд╕рдВрдЧ;
- sel_token Selectel API рдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдЗрдБрдХреЛ рдХреБрдЮреНрдЬреА рд╕рдВрдЧ;
- user_password OpenStack рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд╕рд╛рдеред
рдкрд╣рд┐рд▓реЛ рджреБрдИ рдЪрд░рдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рдирд╣рд░реВ рдмрд╛рдЯ рд▓рд┐рдиреБрдкрд░реНрдЫ
рдЕрдиреНрддрд┐рдо рдЪрд░рдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБ рдХреБрдиреИ рдкрдирд┐ рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд╕рд╛рде рдЖрдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдореЛрдбреНрдпреБрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдирд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ SEL_ACCOUNT, SEL_TOKEN ╨╕ USER_PASSWORD рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдБрджреИ:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply -target=module.project_with_user
рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдкрдЫрд┐, Terraform рд▓реЗ рдХреБрди рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫ рд░ рдкреБрд╖реНрдЯрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреНрдЫ рджреЗрдЦрд╛рдЙрдиреЗрдЫ:
Plan: 3 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
рдПрдХ рдкрдЯрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рднреВрдорд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдкрдЫрд┐, рддрдкрд╛рдЗрдБ рдмрд╛рдБрдХреА рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рдмрд╛рд╣реНрдп IP рдареЗрдЧрд╛рдирд╛рдХреЛ рд╕рд╛рде рдЯреЗрд░рд╛рдлрд░реНрдо рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдЬрд╣рд╛рдБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд╕рд░реНрднрд░ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рд╣реБрдиреЗрдЫ:
module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
floating_ip: "" => "x.x.x.x"
рддрдкрд╛рдЗрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдкреА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ SSH рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рд╕рдореНрдкрд╛рджрди рд╕рдВрд╕рд╛рдзрдирд╣рд░реВ
Terraform рдорд╛рд░реНрдлрдд рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХрд╛ рд╕рд╛рдереИ, рддрд┐рдиреАрд╣рд░реВ рдкрдирд┐ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрд░ рд░ рдореЗрдореЛрд░реАрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдЙрдиреБрд╣реЛрд╕реНред server_vcpus ╨╕ рд╕рд░реНрднрд░_рд░рд╛рдо_рдПрдордмреА рдлрд╛рдЗрд▓рдорд╛ рдЙрджрд╛рд╣рд░рдг/vpc/server_local_root_disk/main.tf:
- server_vcpus = "${var.server_vcpus}"
- server_ram_mb = "${var.server_ram_mb}"
+ server_vcpus = 8
+ server_ram_mb = 10240
рдпрд╕ рдкрдЫрд┐, рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ рдХрд┐ рдХреБрди рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдиреЗрддреГрддреНрд╡ рдЧрд░реНрдиреЗрдЫ:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform plan
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, Terraform рдПрдХ рд╕реНрд░реЛрдд рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдпреЛ openstack_compute_instance_v2 ╨╕ openstack_compute_flavor_v2.
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпрд╕рд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд░рд┐рдмреБрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред
рдирдпрд╛рдБ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрди, рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН terraform рд▓рд╛рдЧреВрдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реБрд░реБ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВред
рд╕рдмреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ рдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреЗрдЫрдиреН
рд╣рд╛рдореНрд░реЛрдорд╛
Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг
рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рдлрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдореВрд▓ рдорд╛ рдЧрд░реНрди
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform destroy -target=module.server_local_root_disk
рддреНрдпрд╕рдкрдЫрд┐ Selectel VPC API рд╡рд╕реНрддреБрд╣рд░реВ рдЦрд╛рд▓реА рдЧрд░реНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform destroy -target=module.project_with_user
рджреБрд╡реИ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рд╕рдмреИ рд╡рд╕реНрддреБрд╣рд░реВ рдореЗрдЯрд╛рдЙрдиреЗ рдкреБрд╖реНрдЯрд┐ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ рдЫ
рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛, рд░ рдПрдЙрдЯрд╛ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рдмрдврд╛рдЙрдБрдЫред рдлрд╛рдЗрд▓рдорд╛ vars.tf рддрдкрд╛рдИрдВрд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕реНрддреИ рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдЩреНрдЦреНрдпрд╛, рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ, Kubernetes рд╕рдВрд╕реНрдХрд░рдг, рдЖрджрд┐ред
рдкрд╣рд┐рд▓реЛ рдЙрджрд╛рд╣рд░рдг рдЬрд╕реНрддреИ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рд╕рдмреИ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореА рдореЛрдбреНрдпреБрд▓ рд╕реБрд░реБ рдЧрд░реНрди рд░ рдореЛрдбреНрдпреБрд▓ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВ Project_with_userрд░ рддреНрдпрд╕рдкрдЫрд┐ рдЕрд░реВ рд╕рдмреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
$ terraform init
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply -target=module.project_with_user
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
рд╣рд╛рдореА OpenStack Magnum рдХрдореНрдкреЛрдиреЗрдиреНрдЯ рдорд╛рд░реНрдлрдд Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВред рддрдкрд╛рдЗрдБ рд╣рд╛рдореНрд░реЛ рдПрдХ рдорд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрдЧ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдердк рдЬрд╛рдиреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдЧрд░реНрджрд╛, рдбрд┐рд╕реНрдХ рд░ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫ рд░ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдиреЗрдЫред рддрдпрд╛рд░реАрд▓реЗ рдХрд░рд┐рдм рек рдорд┐рдиреЗрдЯ рд▓рд┐рдиреНрдЫ, рдЬреБрди рд╕рдордпрдорд╛ Terraform рд▓реЗ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫ:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
рдПрдХ рдкрдЯрдХ рд╕реНрдерд╛рдкрдирд╛ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐, рдЯреЗрд░рд╛рдлрд░реНрдорд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗрдЫ рд░ рдпрд╕рдХреЛ рдЖрдИрдбреА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫ:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди kubectl рддрдкрд╛рдИрдВрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд╣реБрдБрдЪ рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрдХреЛ рдЦрд╛рддрд╛рдорд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ Terraform рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЬрд╛рдиреБрд╣реЛрд╕реН:
рдЕрд░реНрдХреЛ, рд▓рд┐рдЩреНрдХ рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН
рд▓рдЧрдЗрди рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ Terraform рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдзреЛрдХрд╛ рджрд┐рдиреБрднрдПрдХреЛ рдЫреИрди рднрдиреЗ vars.tf рд╡рд╛ main.tf рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдирд╛рдо рд╣реБрдиреЗрдЫ tf_userред рддрдкрд╛рдИрдВрд▓реЗ рдЪрд░рдХреЛ рдорд╛рди рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ TF_VAR_user_password, рдЬреБрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ terraform рд▓рд╛рдЧреВ рдкрд╣рд┐рд▓реЗ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрд┐рддреНрд░ рддрдкрд╛рдИрдВрд▓реЗ рдЯреНрдпрд╛рдмрдорд╛ рдЬрд╛рди рдЖрд╡рд╢реНрдпрдХ рдЫ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕:
Terraform рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдпрд╣реАрдБ рдЫред рдХреЛ рд▓рд╛рдЧреА рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН kubectl рддрдкрд╛рдИрдВ "рдкрд╣реБрдБрдЪ" рдЯреНрдпрд╛рдмрдорд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдПрдЙрдЯреИ рдЯреНрдпрд╛рдмрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред kubectl рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдкреНрд░рдпреЛрдЧ config.yaml.
рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрдЫрд┐ kubectl рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрджреИ KUBECONFIG рддрдкрд╛рдИрдВ Kubernetes рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-9578f5c87-g6bjf 1/1 Running 0 8m
kube-system coredns-9578f5c87-rvkgd 1/1 Running 0 6m
kube-system heapster-866fcbc879-b6998 1/1 Running 0 8m
kube-system kube-dns-autoscaler-689688988f-8cxhf 1/1 Running 0 8m
kube-system kubernetes-dashboard-7bdb5d4cd7-jcjq9 1/1 Running 0 8m
kube-system monitoring-grafana-84c97bb64d-tc64b 1/1 Running 0 8m
kube-system monitoring-influxdb-7c8ccc75c6-dzk5f 1/1 Running 0 8m
kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1 Running 0 8m
kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1 Running 0 8m
kube-system openstack-cloud-controller-manager-8vrmp 1/1 Running 3 8m
prometeus-monitoring grafana-76bcb7ffb8-4tm7t 1/1 Running 0 8m
prometeus-monitoring prometheus-75cdd77c5c-w29gb 1/1 Running 0 8m
рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдЬрд┐рд▓реИ Terraform рдорд╛рд░реНрдлрдд рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдлрд╛рдЗрд▓рдорд╛ main.tf рдирд┐рдореНрди рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:
cluster_node_count = "${var.cluster_node_count}"
рдпреЛ рдорд╛рди рдмрд╛рдЯ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдЫ vars.tf:
variable "cluster_node_count" {
default = 2
}
рддрдкрд╛рдИрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ vars.tf, рд╡рд╛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд╕рд┐рдзреИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН main.tf:
- cluster_node_count = "${var.cluster_node_count}"
+ cluster_node_count = 3
рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди, рдкрд╣рд┐рд▓реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН terraform рд▓рд╛рдЧреВ:
$ env
TF_VAR_sel_account=SEL_ACCOUNT
TF_VAR_sel_token=SEL_TOKEN
TF_VAR_user_password=USER_PASSWORD
terraform apply
рдЬрдм рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫ, рдХреНрд▓рд╕реНрдЯрд░ рдЙрдкрд▓рдмреНрдз рд░рд╣рдиреЗрдЫред Terraform рдорд╛рд░реНрдлрдд рдиреЛрдб рдердкреЗрдкрдЫрд┐, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдмрд┐рдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореАрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рддрд░рд┐рдХрд╛рд╣рд░реВрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рдЫреМрдВ
Selectel Terraform рдкреНрд░рджрд╛рдпрдХрдорд╛ рдлреЗрд▓рд╛ рдкрд░реЗрдХрд╛ рдХреБрдиреИ рдкрдирд┐ рдмрдЧрд╣рд░реВ рдорд╛рд░реНрдлрдд рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ
рд╕реНрд░реЛрдд: www.habr.com