Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

рд╣рд╛рдореАрд▓реЗ Selectel рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Terraform рдкреНрд░рджрд╛рдпрдХ рд╕реБрд░реВ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдпреЛ рдЙрддреНрдкрд╛рджрдирд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдб рдкрджреНрдзрддрд┐ рдорд╛рд░реНрдлрдд рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдкреНрд░рджрд╛рдпрдХрд▓реЗ рд╣рд╛рд▓ рд╕реЗрд╡рд╛ рд╕реНрд░реЛрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ "рднрд░реНрдЪреБрдЕрд▓ рдирд┐рдЬреА рдХреНрд▓рд╛рдЙрдб" (рдпрд╕рдкрдЫрд┐ VPC рднрдирд┐рдиреНрдЫ)ред рднрд╡рд┐рд╖реНрдпрдорд╛, рд╣рд╛рдореА Selectel рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд░реЛрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдердкреНрдиреЗ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЫреМрдВред

рддрдкрд╛рдИрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рдЫ, VPC рд╕реЗрд╡рд╛ OpenStack рдорд╛ рдирд┐рд░реНрдорд┐рдд рдЫред рдЬреЗ рд╣реЛрд╕реН, рдУрдкрдирд╕реНрдЯреНрдпрд╛рдХрд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЙрдбрдХреЛ рд╕реЗрд╡рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрдЯрд┐рдн рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИрди рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рдХрд╛рд░рдгрд▓реЗ, рд╣рд╛рдореАрд▓реЗ рдЬрдЯрд┐рд▓ рдХрдореНрдкреЛрдЬрд┐рдЯ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рд░ рдХрд╛рдорд▓рд╛рдИ рдердк рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдЙрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд API рд╣рд░реВрдХреЛ рд╕реЗрдЯрдорд╛ рдЫреБрдЯреЗрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдпреМрдВред OpenStack рдорд╛ рдЙрдкрд▓рдмреНрдз рдХреЗрд╣рд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдмрдиреНрдж рдЫ, рддрд░ рдорд╛рд░реНрдлрдд рдЙрдкрд▓рдмреНрдз рдЫ рд╣рд╛рдореНрд░реЛ API.

Selectel Terraform рдкреНрд░рджрд╛рдпрдХрд▓реЗ рдЕрдм рдирд┐рдореНрди VPC рд╕реНрд░реЛрддрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

  • рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХреЛрдЯрд╛;
  • рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ, рддрд┐рдиреАрд╣рд░реВрдХреЛ рднреВрдорд┐рдХрд╛ рд░ рдЯреЛрдХрдирд╣рд░реВ;
  • рдХреНрд░рд╕-рдХреНрд╖реЗрддреНрд░реАрдп рд░ VRRP рд╕рд╣рд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдмрдиреЗрдЯрд╣рд░реВ;
  • рд╕рдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрд╕реЗрдиреНрд╕ред

рдкреНрд░рджрд╛рдпрдХрд▓реЗ VPC API рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╣рд╛рдореНрд░реЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░ рдкреНрд░рджрд╛рдпрдХ рджреБрдмреИ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реБрдиреН, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╡рд┐рдХрд╛рд╕ Github рдорд╛ рдЧрд░рд┐рдиреНрдЫ:

рдЕрдиреНрдп рдХреНрд▓рд╛рдЙрдб рд╕реНрд░реЛрддрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди, рдЬрд╕реНрддреИ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ, рдбрд┐рд╕реНрдХрд╣рд░реВ, Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ, рддрдкрд╛рдИрдВрд▓реЗ OpenStack Terraform рдкреНрд░рджрд╛рдпрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рджреБрдмреИ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рдд рдирд┐рдореНрди рд▓рд┐рдЩреНрдХрд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ:

рд╕реБрд░реБрд╡рд╛рдд

рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ Terraform рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд░ рд╕реНрдерд╛рдкрдирд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдпрд╣рд╛рдБ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ).

рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди, рдкреНрд░рджрд╛рдпрдХрд▓рд╛рдИ Selectel API рдХреБрдЮреНрдЬреА рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬреБрди рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЦрд╛рддрд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓рд╣рд░реВ.

Selectel рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ manifests Terraform рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛ рд╣рд╛рдореНрд░реЛ Github рднрдгреНрдбрд╛рд░рдорд╛ рдЙрдкрд▓рдмреНрдз рд░реЗрдбреАрдореЗрдб рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ: рдЯреЗрд░рд╛рдлрд╛рд░реНрдо рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ.

рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд╕рд╛рде рднрдгреНрдбрд╛рд░рд▓рд╛рдИ рджреБрдИ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ:

  • рдореЛрдбреНрдпреБрд▓рд╣рд░реВ, рд╕рд╛рдирд╛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд▓рд┐рдиреНрдЫ рд░ рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рд╕рд╛рдиреЛ рд╕реЗрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрджрдЫ;
  • рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ, рдЕрдиреНрддрд░рд╕рдореНрдмрдиреНрдзрд┐рдд рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реЗрдЯрдХреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИред

Terraform рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдкрдЫрд┐, Selectel API рдХреБрдЮреНрдЬреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрд░ рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд╕рдБрдЧ рдЖрдлреИрд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рдЧрд░реМрдВ, рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдЬрд╛рдФрдВред

рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рд╕рд░реНрднрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг

рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ, рднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХрдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди: terraform-examples/examples/vpc/server_local_root_disk.

рдлрд╛рдЗрд▓рдорд╛ 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 ╨╕ рд╕рд░реНрднрд░_рд▓реЛрдХрд▓_рд░реВрдЯ_рдбрд┐рд╕реНрдХрдЬрд╕рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд░реЛрддрд╕рд╛рдзрдирдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдЫ ред

рдпреА рдореЛрдбреНрдпреБрд▓рд╣рд░реВрд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╣реЗрд░реМрдВред

рднреВрдорд┐рдХрд╛рдХреЛ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

рдкрд╣рд┐рд▓реЛ рдореЛрдбреНрдпреБрд▓рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░ рддреНрдпрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ: terraform-examples/modules/vpc/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 рдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдпреЛ: рддрд╛рди #2525.

рддрд░реНрдХ ignore_resize_confirmation рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХ, рдХреЛрд░, рд╡рд╛ рд╕рд░реНрднрд░ рдореЗрдореЛрд░реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд░рд┐рд╕рд╛рдЗрдЬ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреНрдпрд╕реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ OpenStack Nova рдХрдореНрдкреЛрдиреЗрдиреНрдЯ рдорд╛рд░реНрдлрдд рдЕрдиреБрд░реЛрдз рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрдирд╛рдЗрдиреНрдЫ рдкреБрдирдГрдЖрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдиреБрд░реЛрдз рдкрдЫрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдиреЛрднрд╛ рдкреБрдирдГрдЖрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рд░реНрднрд░рд▓рд╛рдИ рд╕реНрдерд┐рддрд┐рдорд╛ рд░рд╛рдЦреНрдЫ verify_resize рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдердк рдкреБрд╖реНрдЯрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреНрдЫред рдпрджреНрдпрдкрд┐, рдпреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рддрд╛рдХрд┐ рдиреЛрднрд╛рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдердк рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрджреИрдиред

рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХрд▓реЗ Terraform рд▓рд╛рдИ рд╕реНрдерд┐рддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ verify_resize рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐ рд░ рдпрд╕рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐ рд╕рд░реНрднрд░ рд╕рдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐рдорд╛ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рд░рд╣рдиреБрд╣реЛрд╕реНред рддрд░реНрдХ OpenStack Terraform рдкреНрд░рджрд╛рдпрдХрдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.10.0 рдмрд╛рдЯ рдЙрдкрд▓рдмреНрдз рдЫ: рддрд╛рди #422.

рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

manifests рдЪрд▓рд╛рдЙрдиреБ рдЕрдШрд┐, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рджреБрдИ рдлрд░рдХ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ рд╕реБрд░реВ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ OpenStack рдкреНрд░рджрд╛рдпрдХ Selectel рдкреНрд░рджрд╛рдпрдХрдХреЛ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдХрд┐рдирдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдирдЧрд░реАрдХрди, рдпреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд╕реНрддреБрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдЫред ред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЙрд╣реА рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдХреЗрд╡рд▓ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рд╕рдХреНрджреИрдиреМрдВ terraform рд▓рд╛рдЧреВ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдг рднрд┐рддреНрд░ред рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдирд┐рд╡реЗрджрди рдЧрд░реНрдиреБ рдореЛрдбреНрдпреБрд▓рдХреЛ рд▓рд╛рдЧрд┐ Project_with_user рд░ рддреНрдпрд╕ рдкрдЫрд┐ рдЕрд░реВ рд╕рдмреИрдХреЛ рд▓рд╛рдЧрд┐ред

рдиреЛрдЯ: рдпреЛ рдореБрджреНрджрд╛ рдЕрдЭреИ Terraform рдорд╛ рд╣рд▓ рднрдПрдХреЛ рдЫреИрди, рддрдкрд╛рдИрдВ рдорд╛ Github рдорд╛ рдЫрд▓рдлрд▓ рдкрдЫреНрдпрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЕрдВрдХ #2430 ╨╕ рдЕрдВрдХ #4149.

рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН terraform-examples/examples/vpc/server_local_root_disk, рдпрд╕рдХреЛ рд╕рд╛рдордЧреНрд░реА рдпрд╕ рдкреНрд░рдХрд╛рд░ рд╣реБрдиреБрдкрд░реНрдЫ:

$ 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 рд▓рд╛рдЧреВрдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реБрд░реБ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВред

рд╕рдмреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ рдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреЗрдЫрдиреН VPC рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓рд╣рд░реВ:

Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

рд╣рд╛рдореНрд░реЛрдорд╛ рдЙрджрд╛рд╣рд░рдг рднрдгреНрдбрд╛рд░рд╣рд░реВ рддрдкрд╛рдИрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрднрдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ manifests рдкрдирд┐ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг

рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рдлрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдореВрд▓ рдорд╛ рдЧрд░реНрди terraform-examples/examples/vpc/server_local_root_disk OpenStack рд╡рд╕реНрддреБрд╣рд░реВ рдореЗрдЯрд╛рдЙрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

$ 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

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ рдЫ terraform-examples/examples/vpc/kubernetes_cluster.

рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрднреВрдорд┐рдХрд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛, рд░ рдПрдЙрдЯрд╛ 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 рдкреНрд░рджрд╛рдпрдХ Selectel

рдЕрд░реНрдХреЛ, рд▓рд┐рдЩреНрдХ рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН xxxxxx.selvpc.ruрдЬреБрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдирд╛рдо рддрд▓ рджреЗрдЦрд┐рдиреНрдЫ:

Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

рд▓рдЧрдЗрди рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ Terraform рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдзреЛрдХрд╛ рджрд┐рдиреБрднрдПрдХреЛ рдЫреИрди рднрдиреЗ vars.tf рд╡рд╛ main.tf рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдирд╛рдо рд╣реБрдиреЗрдЫ tf_userред рддрдкрд╛рдИрдВрд▓реЗ рдЪрд░рдХреЛ рдорд╛рди рдкрд╛рд╕рд╡рд░реНрдбрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ TF_VAR_user_password, рдЬреБрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ terraform рд▓рд╛рдЧреВ рдкрд╣рд┐рд▓реЗ

рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрд┐рддреНрд░ рддрдкрд╛рдИрдВрд▓реЗ рдЯреНрдпрд╛рдмрдорд╛ рдЬрд╛рди рдЖрд╡рд╢реНрдпрдХ рдЫ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕:

Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

Terraform рдорд╛рд░реНрдлрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдпрд╣реАрдБ рдЫред рдХреЛ рд▓рд╛рдЧреА рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН kubectl рддрдкрд╛рдИрдВ "рдкрд╣реБрдБрдЪ" рдЯреНрдпрд╛рдмрдорд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

Terraform рдкреНрд░рджрд╛рдпрдХ Selectel

рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдПрдЙрдЯреИ рдЯреНрдпрд╛рдмрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреНред 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

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореАрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рддрд░рд┐рдХрд╛рд╣рд░реВрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рдЫреМрдВ "рднрд░реНрдЪреБрдЕрд▓ рдирд┐рдЬреА рдХреНрд▓рд╛рдЙрдб" Terraform рдорд╛рд░реНрдлрддред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Selectel Terraform рдкреНрд░рджрд╛рдпрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрднрдпреЛ рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдиреБрднрдпреЛ рднрдиреЗ рд╣рд╛рдореА рдЦреБрд╕реА рд╣реБрдиреЗрдЫреМрдВред

Selectel Terraform рдкреНрд░рджрд╛рдпрдХрдорд╛ рдлреЗрд▓рд╛ рдкрд░реЗрдХрд╛ рдХреБрдиреИ рдкрдирд┐ рдмрдЧрд╣рд░реВ рдорд╛рд░реНрдлрдд рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ Github рдореБрджреНрджрд╛рд╣рд░реВ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди