рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

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

рдкреНрд░рджрд╛рддрд╛ рд╕рдзреНрдпрд╛ рд╕реЗрд╡рд╛ рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЛ "рдЖрднрд╛рд╕реА рдЦрд╛рдЬрдЧреА рдореЗрдШ" (рдпрд╛рдкреБрдвреЗ VPC рдореНрд╣рдгреВрди рд╕рдВрджрд░реНрднрд┐рдд). рднрд╡рд┐рд╖реНрдпрд╛рдд, рдЖрдореНрд╣реА Selectel рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рд╕реЗрд╡рд╛рдВрд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрдд рдЖрд╣реЛрдд.

рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА, VPC рд╕реЗрд╡рд╛ OpenStack рд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ. рддрдерд╛рдкрд┐, OpenStack рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЙрдбрд▓рд╛ рд╕реЗрд╡рд╛ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдореВрд│ рд╕рд╛рдзрдиреЗ рдкреНрд░рджрд╛рди рдХрд░рдд рдирд╛рд╣реА рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ, рдЖрдореНрд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд API рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдордзреНрдпреЗ рдЧрд╣рд╛рд│ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬреА рдЬрдЯрд┐рд▓ рд╕рдВрдорд┐рд╢реНрд░ рд╡рд╕реНрддреВрдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реБрд▓рдн рдХрд░рддреЗ рдЖрдгрд┐ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдХрд░рддреЗ. OpenStack рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓реА рдХрд╛рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдереЗрдЯ рд╡рд╛рдкрд░рд╛рдкрд╛рд╕реВрди рдмрдВрдж рдЖрд╣реЗ, рдкрд░рдВрддреБ рджреНрд╡рд╛рд░реЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рдЖрдордЪреЗ API.

Selectel Terraform рдкреНрд░рджрд╛рддреНрдпрд╛рдордзреНрдпреЗ рдЖрддрд╛ рдЦрд╛рд▓реАрд▓ VPC рд╕рдВрд╕рд╛рдзрдиреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:

  • рдкреНрд░рдХрд▓реНрдк рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдХреЛрдЯрд╛;
  • рд╡рд╛рдкрд░рдХрд░реНрддреЗ, рддреНрдпрд╛рдВрдЪреА рднреВрдорд┐рдХрд╛ рдЖрдгрд┐ рдЯреЛрдХрди;
  • рдХреНрд░реЙрд╕-рд░рд┐рдЬрдирд▓ рдЖрдгрд┐ рд╡реНрд╣реАрдЖрд░рдЖрд░рдкреАрд╕рд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдмрдиреЗрдЯ;
  • рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдкрд░рд╡рд╛рдиреЗ.

VPC API рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рджрд╛рддрд╛ рдЖрдордЪреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ Go рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рддреЛ. рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдкреНрд░рджрд╛рддрд╛ рджреЛрдШреЗрд╣реА рдореБрдХреНрдд-рд╕реНрд░реЛрдд рдЖрд╣реЗрдд, рддреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рдХрд╛рд╕ Github рд╡рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ:

рдЗрддрд░ рдХреНрд▓рд╛рдЙрдб рд╕рдВрд╕рд╛рдзрдиреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЬрд╕реЗ рдХреА рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдиреНрд╕, рдбрд┐рд╕реНрдХреНрд╕, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░реНрд╕, рддреБрдореНрд╣реА рдУрдкрдирд╕реНрдЯреЕрдХ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рджреЛрдиреНрд╣реА рдкреНрд░рджрд╛рддреНрдпрд╛рдВрд╕рд╛рдареА рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЦрд╛рд▓реАрд▓ рд▓рд┐рдВрдХреНрд╕рд╡рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ:

рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ

рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреЕрдХреЗрдЬреЗрд╕рдЪреНрдпрд╛ рд╕реВрдЪрдирд╛ рдЖрдгрд┐ рд▓рд┐рдВрдХ рдпреЗрдереЗ рдЖрдврд│реВ рд╢рдХрддрд╛рдд. рдЕрдзрд┐рдХреГрдд рд╡реЗрдмрд╕рд╛рдЗрдЯ).

рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рджрд╛рддреНрдпрд╛рд▓рд╛ Selectel API рдХреА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреА рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ рдЦрд╛рддреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓.

рд╕рд┐рд▓реЗрдХреНрдЯреЗрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╡рд╛рдкрд░реВрди рдХрд┐рдВрд╡рд╛ рдЖрдордЪреНрдпрд╛ рдЧрд┐рдердм рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рддрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдЪрд╛ рд╕рдВрдЪ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд: рдЯреЗрд░рд╛рдлреЙрд░реНрдо-рдЙрджрд╛рд╣рд░рдгреЗ.

рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рднрд╛рдВрдбрд╛рд░ рджреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ:

  • рд╡рд┐рднрд╛рдЧ, рд▓рд╣рд╛рди рдкреБрди: рд╡рд╛рдкрд░рддрд╛ рдпреЗрдгреНрдпрд╛рдЬреЛрдЧреНрдпрд╛ рдореЙрдбреНрдпреВрд▓реНрд╕ рдЕрд╕рд▓реЗрд▓реЗ рдЬреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪрд╛ рдПрдХ рд╕рдВрдЪ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддрд╛рдд рдЖрдгрд┐ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдЪ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдд;
  • рдЙрджрд╛рд╣рд░рдгреЗ, рдЗрдВрдЯрд░рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЪрд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рдЕрд╕рд▓реЗрд▓реА.

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдПрдХ 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")}"
}

рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдкрдг рднрд┐рдиреНрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдХреА рдлрд╛рдИрд▓ рдкрде рдореНрд╣рдгреВрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА; рддреБрдореНрд╣реА рдореВрд▓реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореНрд╣рдгреВрди рджреЗрдЦреАрд▓ рдЬреЛрдбреВ рд╢рдХрддрд╛.

рдкреБрдвреЗ рдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рдореЙрдбреНрдпреВрд▓реНрд╕ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдкреНрд░рдХрд▓реНрдк_рд╡рд╛рдкрд░рдХрд░реНрддрд╛ ╨╕ рд╕рд░реНрд╡реНрд╣рд░_рд▓реЛрдХрд▓_рд░реВрдЯ_рдбрд┐рд╕реНрдХ, рдЬреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдд.

рдЪрд▓рд╛ рдпрд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рдХрдбреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдкрд╛рд╣реВ.

рднреВрдорд┐рдХреЗрд╕рд╣ рдкреНрд░рдХрд▓реНрдк рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдкреНрд░рдердо рдореЙрдбреНрдпреВрд▓ рдПрдХ рдкреНрд░рдХрд▓реНрдк рдЖрдгрд┐ рддреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ рднреВрдорд┐рдХрд╛ рдЕрд╕рд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рддреЛ: terraform-examples/modules/vpc/project_with_user.

рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ OpenStack рдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рд╕рдВрд╕рд╛рдзрдиреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓. рдореЙрдбреНрдпреВрд▓ рд╕реЛрдкреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдлрдХреНрдд рддреАрди рд╕рдВрд╕реНрдерд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

рд╕реНрдерд╛рдирд┐рдХ рдбрд┐рд╕реНрдХрд╕рд╣ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд░ рддрдпрд╛рд░ рдХрд░рдгреЗ

рджреБрд╕рд░реЗ рдореЙрдбреНрдпреВрд▓ OpenStack рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЬреЗ рд╕реНрдерд╛рдирд┐рдХ рдбрд┐рд╕реНрдХрд╕рд╣ рд╕рд░реНрд╡реНрд╣рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд.

рдЖрдкрдг рд╕рдВрд╕рд╛рдзрдирд╛рд╕рд╛рдареА рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрдХрдбреЗ рд▓рдХреНрд╖ рджрд┐рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

рдпреБрдХреНрддрд┐рд╡рд╛рдж рджреБрд░реНрд▓рдХреНрд╖_рдмрджрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрджрд▓рд╛рдВрдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ id рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддрд┐рдореЗрд╕рд╛рдареА. VPC рд╕реЗрд╡реЗрдордзреНрдпреЗ, рдмрд╣реБрддреЗрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдорд╛ рдЖрдард╡рдбреНрдпрд╛рддреВрди рдПрдХрджрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рддреНрдпрд╛рдВрдЪреЗ id рджреЗрдЦреАрд▓ рдмрджрд▓рддреЗ. рд╣реЗ рдУрдкрдирд╕реНрдЯреЕрдХ рдШрдЯрдХ - рдЧреНрд▓рд╛рдиреНрд╕рдЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдореБрд│реЗ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рддрд┐рдорд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШрдЯрдХ рдорд╛рдирд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.

рдЬрд░ рддреБрдореНрд╣реА рд╡рд┐рджреНрдпрдорд╛рди рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдбрд┐рд╕реНрдХ рддрдпрд╛рд░ рдХрд┐рдВрд╡рд╛ рд╕реБрдзрд╛рд░рд┐рдд рдХрд░рдд рдЕрд╕рд╛рд▓ рдЬреНрдпрд╛рдд рд╡рд╛рдж рдЖрд╣реЗ image_id рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗ id рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рддрд┐рдорд╛, рдирдВрддрд░ рддреА рдкреНрд░рддрд┐рдорд╛ рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рдиреЗ рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдбрд┐рд╕реНрдХ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рд╣реЛрдИрд▓. рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░рдгреЗ рджреБрд░реНрд▓рдХреНрд╖_рдмрджрд▓ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЕрд╢реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЯрд╛рд│рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рдЯреАрдк: рдпреБрдХреНрддрд┐рд╡рд╛рдж рджреБрд░реНрд▓рдХреНрд╖_рдмрджрд▓ рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреНрдпреЗ рдЦреВрдк рдкреВрд░реНрд╡реА рджрд┐рд╕рд▓реЗ: рдкреБрд▓#2525.

рдпреБрдХреНрддрд┐рд╡рд╛рдж ignore_resize_confirmation рд╕реНрдерд╛рдирд┐рдХ рдбрд┐рд╕реНрдХ, рдХреЛрд░ рдХрд┐рдВрд╡рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдореЗрдорд░реА рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЕрд╕реЗ рдмрджрд▓ OpenStack Nova рдШрдЯрдХрд╛рджреНрд╡рд╛рд░реЗ рд╡рд┐рдирдВрддреА рд╡рд╛рдкрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдХрд╛рд░ рдмрджрд▓реВ. рд╡рд┐рдирдВрддреАрдирдВрддрд░ рдбреАрдлреЙрд▓реНрдЯ рдиреЛрд╡реНрд╣рд╛ рдЖрдХрд╛рд░ рдмрджрд▓реВ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рд╕реНрдерд┐рддреАрдд рдареЗрд╡рддреЗ verify_resize рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╖реНрдЯреАрдХрд░рдгрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ. рддрдерд╛рдкрд┐, рд╣реЗ рд╡рд░реНрддрди рдмрджрд▓рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЬреЗрдгреЗрдХрд░реБрди рдиреЛрд╡реНрд╣рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдХрдбреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдВрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдд рдирд╛рд╣реА.

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

рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рджреЛрди рднрд┐рдиреНрди рдкреНрд░рджрд╛рддреЗ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ OpenStack рдкреНрд░рджрд╛рддрд╛ рд╕рд┐рд▓реЗрдХреНрдЯреЗрд▓ рдкреНрд░рджрд╛рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп, рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рдЖрд╣реЗ. . рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рддреНрдпрд╛рдЪ рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рдЖрдореНрд╣реА рдлрдХреНрдд рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВ рд╢рдХрдд рдирд╛рд╣реА рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд▓рд╛рдЧреВ рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреНрдпрд╛ рдЖрдд. рдЖрдкрдг рдкреНрд░рдердо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЕрд░реНрдЬ рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рдкреНрд░рдХрд▓реНрдк_рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рдЗрддрд░ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреАрдВрд╕рд╛рдареА.

рдЯреАрдк: рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдЕрджреНрдпрд╛рдк рдЯреЗрд░рд╛рдлреЙрд░реНрдордордзреНрдпреЗ рдирд┐рд░рд╛рдХрд░рдг рдЭрд╛рд▓реЗрд▓реЗ рдирд╛рд╣реА, рддреБрдореНрд╣реА рдпреЗрдереЗ Github рд╡рд░реАрд▓ рдЪрд░реНрдЪреЗрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░реВ рд╢рдХрддрд╛ рдЕрдВрдХ#2430 ╨╕ рдЕрдВрдХ#4149.

рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╡рд░ рдЬрд╛ terraform-examples/examples/vpc/server_local_root_disk, рддреНрдпрд╛рдЪреА рд╕рд╛рдордЧреНрд░реА рдЕрд╢реА рдЕрд╕рд╛рд╡реА:

$ ls
README.md	   main.tf		vars.tf

рдЖрдореНрд╣реА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рдореЙрдбреНрдпреВрд▓ рд╕реБрд░реВ рдХрд░рддреЛ:

$ terraform init

рдЖрдЙрдЯрдкреБрдЯ рджрд╛рдЦрд╡рддреЗ рдХреА Terraform рддреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рджрд╛рддреНрдпрд╛рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рдЖрдгрд┐ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рд╕рд░реНрд╡ рдореЙрдбреНрдпреВрд▓ рддрдкрд╛рд╕рддреЗ.

рдкреНрд░рдердо рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдЧреВ рдХрд░реВ рдкреНрд░рдХрд▓реНрдк_рд╡рд╛рдкрд░рдХрд░реНрддрд╛. рдпрд╛рд╕рд╛рдареА рд╕реЗрдЯ рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╕рд╛рдареА рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдореВрд▓реНрдпреЗ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  • 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

рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рдирдВрддрд░, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдХреЛрдгрддреА рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЖрд╣реЗ рддреЗ рджрд░реНрд╢рд╡реЗрд▓ рдЖрдгрд┐ рдкреБрд╖реНрдЯреАрдХрд░рдгрд╛рд╕рд╛рдареА рд╡рд┐рдЪрд╛рд░реЗрд▓:

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"

рддреБрдореНрд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ IP рд╡рд╛рдкрд░реВрди SSH рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛.

рд╕рдВрд╕рд╛рдзрдиреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреЗ

рдЯреЗрд░рд╛рдлреЙрд░реНрдорджреНрд╡рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддреЗ рд╕реБрдзрд╛рд░рд┐рдд рджреЗрдЦреАрд▓ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рдореВрд▓реНрдпреЗ рдмрджрд▓реВрди рдЖрдкрд▓реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рдХреЛрд░ рдЖрдгрд┐ рдореЗрдорд░реАрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡реВ. рд╕рд░реНрд╡реНрд╣рд░_рд╡реНрд╣реАрд╕реАрдкрд╕ ╨╕ рд╕рд░реНрд╡реНрд╣рд░_рд░рд╛рдо_рдПрдордмреА рдлрд╛рдЗрд▓ рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдгреЗ/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

рдкрд░рд┐рдгрд╛рдореА, рдЯреЗрд░рд╛рдлреЙрд░реНрдордиреЗ рд╕рдВрд╕рд╛рдзрди рдмрджрд▓рд▓реЗ openstack_compute_instance_v2 ╨╕ openstack_compute_flavor_v2.

рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╣реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд░реАрдмреВрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдирд╡реАрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд▓рд╛рдЧреВ, рдЬреЗ рдЖрдореНрд╣реА рдЖрдзреАрдЪ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рдордзреНрдпреЗ рд╕рд░реНрд╡ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓ VPC рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓:

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

рдЖрдордЪреНрдпрд╛ рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдг рднрд╛рдВрдбрд╛рд░ рдЖрдкрдг рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрд╡реНрд╣рд╕рд╣ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЕрдирд┐рдлреЗрд╕реНрдЯ рджреЗрдЦреАрд▓ рдкрд╛рд╣реВ рд╢рдХрддрд╛.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг

рдкреБрдвреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдХрдбреЗ рдЬрд╛рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рд╕рдВрд╕рд╛рдзрдиреЗ рд╕рд╛рдл рдХрд░реВ. рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдореБрд│рд╛рд╢реА рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА 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.

рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рддреЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рднреВрдорд┐рдХрд╛ рдЕрд╕рд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рдПрдХ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╡рд╛рдврд╡рддреЛ. рдлрд╛рдИрд▓рдордзреНрдпреЗ vars.tf рддреБрдореНрд╣реА рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдпреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЬрд╕реЗ рдХреА рдиреЛрдбреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛, рддреНрдпрд╛рдВрдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЖрд╡реГрддреНрддреА рдЗ.

рдкрд╣рд┐рд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдкреНрд░рдорд╛рдгреЗ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд░реНрд╡ рдкреНрд░рдердо рдЖрдкрдг рдореЙрдбреНрдпреВрд▓ рд╕реБрд░реВ рдХрд░реВ рдЖрдгрд┐ рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░ рдХрд░реВ рдкреНрд░рдХрд▓реНрдк_рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдЖрдгрд┐ рдирдВрддрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рддрдпрд╛рд░ рдХрд░рд╛:

$ 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 рдХреНрд▓рд╕реНрдЯрд░реНрд╕рдЪреА рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реВ. рдЖрдордЪреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рдордзреНрдпреЗ рдХреНрд▓рд╕реНрдЯрд░рд╕рд╣ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдК рд╢рдХрддрд╛ рдорд╛рдЧреАрд▓ рд▓реЗрдЦрддрд╕реЗрдЪ рдкрд╛рдпрд╛рднреВрдд рдорд╛рд╣рд┐рддреА.

рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдбрд┐рд╕реНрдХ рдЖрдгрд┐ рдЖрднрд╛рд╕реА рдорд╢реАрди рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓. рддрдпрд╛рд░реАрд▓рд╛ рд╕реБрдорд╛рд░реЗ 4 рдорд┐рдирд┐рдЯреЗ рд▓рд╛рдЧрддрд╛рдд, рддреНрдпрд╛ рджрд░рдореНрдпрд╛рди рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдЦрд╛рд▓реАрд▓ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрд▓:

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.

рдпреБрдЯрд┐рд▓рд┐рдЯреАрджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА kubectl рддреБрдореНрд╣рд╛рд▓рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдНрдХреНрд╕реЗрд╕ рдлрд╛рдЗрд▓ рдорд┐рд│рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдордЪреНрдпрд╛ рдЦрд╛рддреНрдпрд╛рддреАрд▓ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреНрдпрд╛ рд╕реВрдЪреАрдордзреНрдпреЗ рдЯреЗрд░рд╛рдлреЙрд░реНрдорджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдЬрд╛:

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

рдкреБрдвреЗ, рд╕рд╛рд░рдЦреНрдпрд╛ рд▓рд┐рдВрдХрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛ xxxxxx.selvpc.ruрдЬреЗ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдЦрд╛рд▓реА рджрд┐рд╕рддреЗ:

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

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

рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдЖрдд рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЕрдмрд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕:

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ Selectel

рдЯреЗрд░рд╛рдлреЙрд░реНрдорджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдпреЗрдереЗ рдЖрд╣реЗ. рд╕рд╛рдареА рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛ kubectl рдЖрдкрдг "рдкреНрд░рд╡реЗрд╢" рдЯреЕрдмрд╡рд░ рдХрд░реВ рд╢рдХрддрд╛:

рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдкреНрд░рджрд╛рддрд╛ 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

рдЯреЗрд░рд╛рдлреЙрд░реНрдорджреНрд╡рд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рд╕рд╣рдЬрдкрдгреЗ рдмрджрд▓рддрд╛ рдпреЗрддреЗ.
рдлрд╛рдИрд▓рдордзреНрдпреЗ 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

рдмрджрд▓ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкрд╣рд┐рд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдкреНрд░рдорд╛рдгреЗ, рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛ рдЯреЗрд░рд╛рдлреЙрд░реНрдо рд▓рд╛рдЧреВ:

$ 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 рдкреНрд░рджрд╛рддрд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рдЕрднрд┐рдкреНрд░рд╛рдп рджрд┐рд▓реНрдпрд╛рд╕ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓.

Selectel Terraform рдкреНрд░рджрд╛рддреНрдпрд╛рдордзреНрдпреЗ рдЖрдврд│рд▓реЗрд▓реЗ рдХреЛрдгрддреЗрд╣реА рдмрдЧ рджреНрд╡рд╛рд░реЗ рдиреЛрдВрджрд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд Github рд╕рдорд╕реНрдпрд╛.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛