4.4.0

dev
stSolo 2 years ago
parent c647785e72
commit 26f04f2a25

@ -2,44 +2,64 @@
В данном разделе рассмотрены различные способы удаления ресурсов, проблемы, которые могут возникнуть, их причины, а так же способы их решить. В данном разделе рассмотрены различные способы удаления ресурсов, проблемы, которые могут возникнуть, их причины, а так же способы их решить.
## Команда destroy ## Команда destroy
Для удаления ресурса, в terraform имеется команда Для удаления ресурса, в terraform имеется команда
```bash ```bash
terraform destroy terraform destroy
``` ```
По умолчанию, эта команда производит удаление всей инфраструктуры, описанной и сохраненной в .tfstate-файле. По умолчанию, эта команда производит удаление всей инфраструктуры, описанной и сохраненной в .tfstate-файле.
### Влияние конфигурационного параметра permanently ### Влияние конфигурационного параметра permanently
В некоторых ресурсах terraform провайдера имеется параметр permanently, который регулирует удаление ресурса: В некоторых ресурсах terraform провайдера имеется параметр permanently, который регулирует удаление ресурса:
- Если флаг имеет значение - `true`, то ресурс будет мгновенно удален с платформы и восстановить его будет невозможно. - Если флаг имеет значение - `true`, то ресурс будет мгновенно удален с платформы и восстановить его будет невозможно.
- Если флаг имеет значение - `false` (используется по умолчанию), то ресурс будет помещен в корзину, с возможностью дальнейшего восстановления. Ресурс будет удален автоматически из корзины через 7 дней (зависит от настроек платформы). - Если флаг имеет значение - `false` (используется по умолчанию), то ресурс будет помещен в корзину, с возможностью дальнейшего восстановления. Ресурс будет удален автоматически из корзины через 7 дней (зависит от настроек платформы).
#### Возможные проблемы #### Возможные проблемы
Так как terraform, при удалении ресурса, производит удаление .tfstate-файла, то при использовании фдага permanently = false, ресурс невозможно будет восстановить из конфигурационного файла инфраструктуры - при использовании `terraform apply` - будет создана новая инфраструктура. Поэтому, старую инфраструктуру необходимо импортировать, чтобы сформировать .tfstate - файл, а потом применить `terraform apply` - тогда ресурс будет восстановлен из корзины (_фича находится в разработке - доступно в ресурсе disks_, в провайдере версии 3.2.0+) Так как terraform, при удалении ресурса, производит удаление .tfstate-файла, то при использовании фдага permanently = false, ресурс невозможно будет восстановить из конфигурационного файла инфраструктуры - при использовании `terraform apply` - будет создана новая инфраструктура. Поэтому, старую инфраструктуру необходимо импортировать, чтобы сформировать .tfstate - файл, а потом применить `terraform apply` - тогда ресурс будет восстановлен из корзины (_фича находится в разработке - доступно в ресурсе disks_, в провайдере версии 3.2.0+)
## Команда destroy с флагом target ## Команда destroy с флагом target
Как и было сказано выше, команда `terraform destroy` производит удаление всей инфраструктуры. Для того, чтобы произвести удаление определенных ресурсов, используется флаг `-target`. Флаг, в качестве параметра, принимает название ресурса для удаления, вида Как и было сказано выше, команда `terraform destroy` производит удаление всей инфраструктуры. Для того, чтобы произвести удаление определенных ресурсов, используется флаг `-target`. Флаг, в качестве параметра, принимает название ресурса для удаления, вида
``` ```
<тип-ресурса>.<имя-ресурса> <тип-ресурса>.<имя-ресурса>
``` ```
либо либо
``` ```
<модуль>.<имя-ресурса> <модуль>.<имя-ресурса>
``` ```
для ресурсов, содержащихся в модулях. для ресурсов, содержащихся в модулях.
Таким образом, общая команда выглядит так: Таким образом, общая команда выглядит так:
``` ```
terraform destroy -target <тип-ресурса>.<имя-ресурса> terraform destroy -target <тип-ресурса>.<имя-ресурса>
``` ```
или или
``` ```
terraform destroy -target <модуль>.<имя-ресурса> terraform destroy -target <модуль>.<имя-ресурса>
``` ```
В примерах не используется модуль, поэтому, далее, в качестве примера, будет взята команда `terraform destroy -target <тип-ресурса>.<имя-ресурса>` В примерах не используется модуль, поэтому, далее, в качестве примера, будет взята команда `terraform destroy -target <тип-ресурса>.<имя-ресурса>`
### Способы передачи параметра ### Способы передачи параметра
1. `terraform destroy -target <тип-ресурса>.<имя-ресурса>` 1. `terraform destroy -target <тип-ресурса>.<имя-ресурса>`
2. `terraform destroy -target="<тип-ресурса>.<имя-ресурса>"` 2. `terraform destroy -target="<тип-ресурса>.<имя-ресурса>"`
### Пример использования target ### Пример использования target
В качестве примера возьмем пример конфигурации из [прошлой статьи](https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki/05.04-Массовое-создание-ресурсов.-Мета-аргументы): В качестве примера возьмем пример конфигурации из [прошлой статьи](https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki/05.04-Массовое-создание-ресурсов.-Мета-аргументы):
```terraform ```terraform
resource "decort_disk" "disk1" { resource "decort_disk" "disk1" {
account_id = 777 account_id = 777
@ -55,33 +75,49 @@ resource "decort_disk" "disk2" {
gid = 212 gid = 212
} }
``` ```
- Чтобы удалить всю инфраструктуру, необходимо просто выполнить в терминале команду - Чтобы удалить всю инфраструктуру, необходимо просто выполнить в терминале команду
```bash ```bash
terraform destroy terraform destroy
``` ```
- Чтобы удалить "disk2", можно воспользоваться командой: - Чтобы удалить "disk2", можно воспользоваться командой:
``` ```
terraform destroy -target decort_disk.disk2 terraform destroy -target decort_disk.disk2
``` ```
- Чтобы удалить "disk1", можно воспользоваться другим способом удаления: - Чтобы удалить "disk1", можно воспользоваться другим способом удаления:
``` ```
terraform destroy -target="decort_disk.disk1" terraform destroy -target="decort_disk.disk1"
``` ```
Таким образом, определенный ресурс можно удалить с помощью флага target. Таким образом, определенный ресурс можно удалить с помощью флага target.
### Использование флага target при работе с ресурсами, созданными с помощью мета аргументов. ### Использование флага target при работе с ресурсами, созданными с помощью мета аргументов.
При создании ресурсов с помощью мета аргументов, первые получают дополнительные символы в именах ресурсов, что может привести к некоторым проблемам при работе с такими ресурсами. При создании ресурсов с помощью мета аргументов, первые получают дополнительные символы в именах ресурсов, что может привести к некоторым проблемам при работе с такими ресурсами.
#### Работа с for_each #### Работа с for_each
При работе с for_each, ресурс получается имя вида: `<тип-ресурса>.<общее-имя-ресурса>["<название>"]` При работе с for_each, ресурс получается имя вида: `<тип-ресурса>.<общее-имя-ресурса>["<название>"]`
Таким образом, обращение к такому ресурсу будет выглядит следующим образом: Таким образом, обращение к такому ресурсу будет выглядит следующим образом:
``` ```
terraform destroy -target='<тип-ресурса>.<общее-имя-ресурса>[\"<название>\"]' terraform destroy -target='<тип-ресурса>.<общее-имя-ресурса>[\"<название>\"]'
``` ```
или или
``` ```
terraform destroy -target '<тип-ресурса>.<общее-имя-ресурса>[\"<название>\"]' terraform destroy -target '<тип-ресурса>.<общее-имя-ресурса>[\"<название>\"]'
``` ```
Пример: Пример:
Для примера рассмотрим создание ресурса с помощью мета аргумента for_each из предыдущей статьи: Для примера рассмотрим создание ресурса с помощью мета аргумента for_each из предыдущей статьи:
```terraform ```terraform
locals { locals {
disk_names = [ disk_names = [
@ -98,36 +134,50 @@ resource "decort_disk" "disks" {
gid = 212 gid = 212
} }
``` ```
В результате применения команды `terrafrom apply`, будут созданы ресурсы с именами: В результате применения команды `terrafrom apply`, будут созданы ресурсы с именами:
- decort_disk.disks["disk-1"] - decort_disk.disks["disk-1"]
- decort_disk.disks["disk-2"] - decort_disk.disks["disk-2"]
Чтобы удалить определенный ресурс, можно воспользоваться одной из команд: Чтобы удалить определенный ресурс, можно воспользоваться одной из команд:
``` ```
#для удаления disk-1 #для удаления disk-1
terraform destroy -target='decort_disk.disks[\"disk-1\"]' terraform destroy -target='decort_disk.disks[\"disk-1\"]'
``` ```
``` ```
#для удаления disk-2 #для удаления disk-2
terraform destroy -target 'decort_disk.disks[\"disk-2\"]' terraform destroy -target 'decort_disk.disks[\"disk-2\"]'
``` ```
Либо: Либо:
``` ```
#для удаления всей инфраструктуры #для удаления всей инфраструктуры
terraform destroy terraform destroy
``` ```
Такая запись с экранирование кавычек обуславливается работой терминальной оболочки, через которую будет производится вызов данной команды, а так же то, что terraform в качестве параметра флага ожидает строку. Так же, есть еще одно правило - в terraform в квадратных скобках указывается либо строка в двойных кавычках (в качестве имени ключа для объекта, используется для for_each), либо число - в качестве индекса для массива (используется для count) Такая запись с экранирование кавычек обуславливается работой терминальной оболочки, через которую будет производится вызов данной команды, а так же то, что terraform в качестве параметра флага ожидает строку. Так же, есть еще одно правило - в terraform в квадратных скобках указывается либо строка в двойных кавычках (в качестве имени ключа для объекта, используется для for_each), либо число - в качестве индекса для массива (используется для count)
#### Работа с count #### Работа с count
При работе с count, ресурс получается имя вида: `<тип-ресурса>.<общее-имя-ресурса>[<индекс>]` При работе с count, ресурс получается имя вида: `<тип-ресурса>.<общее-имя-ресурса>[<индекс>]`
Таким образом, обращение к такому ресурсу будет выглядит следующим образом: Таким образом, обращение к такому ресурсу будет выглядит следующим образом:
``` ```
terraform destroy -target="<тип-ресурса>.<общее-имя-ресурса>[<индекс>]" terraform destroy -target="<тип-ресурса>.<общее-имя-ресурса>[<индекс>]"
``` ```
или или
``` ```
terraform destroy -target <тип-ресурса>.<общее-имя-ресурса>[<индекс>] terraform destroy -target <тип-ресурса>.<общее-имя-ресурса>[<индекс>]
``` ```
Пример: Пример:
Для примера рассмотрим создание ресурса с помощью мета аргумента for_each из предыдущей статьи: Для примера рассмотрим создание ресурса с помощью мета аргумента for_each из предыдущей статьи:
```terraform ```terraform
locals { locals {
disk_names = [ disk_names = [
@ -144,24 +194,58 @@ resource "decort_disk" "disks" {
gid = 212 gid = 212
} }
``` ```
В результате применения команды `terrafrom apply`, будут созданы ресурсы с именами: В результате применения команды `terrafrom apply`, будут созданы ресурсы с именами:
- decort_disk.disks[0] - decort_disk.disks[0]
- decort_disk.disks[1] - decort_disk.disks[1]
Чтобы удалить определенный ресурс, можно воспользоваться одной из команд: Чтобы удалить определенный ресурс, можно воспользоваться одной из команд:
``` ```
#для удаления disk-1 #для удаления disk-1
terraform destroy -target="decort_disk.disks[0]" terraform destroy -target="decort_disk.disks[0]"
``` ```
``` ```
#для удаления disk-2 #для удаления disk-2
terraform destroy -target decort_disk.disks[1] terraform destroy -target decort_disk.disks[1]
``` ```
Либо: Либо:
``` ```
#для удаления всей инфраструктуры #для удаления всей инфраструктуры
terraform destroy terraform destroy
``` ```
### Удаление ресурса из состояния
В ходе работы, могут возникать случаи, когда состояние (state, стейт) terraform имеет ресурсы, которые были удалены с платформы. В таком случае, можно, при выполнении команд `terraform plan/apply` получить ошибку:
```bash
Planning failed. Terraform encountered an error while generating this plan.
│ Error: The resource cannot be updated because it has been destroyed
│ with decort_kvmvm.instances["pgsmonsietc03"],
│ on main.tf line 33, in resource "decort_kvmvm" "instances":
│ 33: resource "decort_kvmvm" "instances" {
```
Для того, чтобы этого избежать, необходимо удалть отсутствующий ресурс из стейта, выполнив команду `terraform rm state <res>.<name>`
Например, `terraform rm state decort_kvmvm.vm1`
В случае, если ресурс был создан путен работы генераторов count/for_each, работают те же правила, что и для команды `terraform destroy`.
## Возможные проблемы
Были обнаружены проблемы при использовании _oh my zsh_, которые заключались в том, что не считывались данные, переданные, при экранировании строки.
Рекомендация: использовать _bash_.
## Заключение ## Заключение
Таким образом, terraform позволяет выполнять удаление: Таким образом, terraform позволяет выполнять удаление:
- всей инфраструктуры, хранящейся в файле .tfstate с помощью `terraform destroy` - всей инфраструктуры, хранящейся в файле .tfstate с помощью `terraform destroy`
- части инфраструктуры, используя флаг target. ОБщий вид команды такой: `terraform destroy -target <тип-ресурса>.<имя-ресурса>` - части инфраструктуры, используя флаг target. ОБщий вид команды такой: `terraform destroy -target <тип-ресурса>.<имя-ресурса>`

@ -3,34 +3,46 @@
_Resource_ функция **decort_k8s_wg** служит для управления worker groups (рабочики группами, wg) кластера. _Resource_ функция **decort_k8s_wg** служит для управления worker groups (рабочики группами, wg) кластера.
## Изменения в 3.3.0 ## Изменения в 3.3.0
Добавлены описания IP адресов для группы воркеров. Добавлены описания IP адресов для группы воркеров.
Добавлены описания IP адресов виртуальной сети, которая присоеденена к группе воркеров. Добавлены описания IP адресов виртуальной сети, которая присоеденена к группе воркеров.
Добавлена возможность импорта k8s_wg. Добавлена возможность импорта k8s_wg.
## Импортирование ресурса ## Импортирование ресурса
Так как ресурс k8s_wg является подресурсом k8s, то для его импорта необходимо указать ID кластера, а так же само имя ресурса. Так как ресурс k8s_wg является подресурсом k8s, то для его импорта необходимо указать ID кластера, а так же само имя ресурса.
Общая схема: Общая схема:
```terraform ```terraform
terraform import decort_k8s_wg.<var> <wg_id>#<k8s_id> terraform import decort_k8s_wg.<var> <wg_id>#<k8s_id>
``` ```
Пример: Пример:
``` ```
terraform import decort_k8s_wg.wg 777#888 terraform import decort_k8s_wg.wg 777#888
``` ```
## Ограничение на наименование ресурса ## Ограничение на наименование ресурса
Ресурс не должен содержать в названии символ `#` Ресурс не должен содержать в названии символ `#`
## Работа в параллельном режиме
Рекомендуется создавать одновременно не более одного экземпляра ресурса.
В случае необходимости создания нескольких ресурсов одновременно, необходимо запускать `terraform apply/plan` в режиме `-parallelism=1`.
## Аргументы ## Аргументы
_Resource_ функция **decort_k8s_wg** для создания worker group принимает следующие аргументы: _Resource_ функция **decort_k8s_wg** для создания worker group принимает следующие аргументы:
| Аргумент | Тип | Обязательный | Описание | | Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- | | --------------- | -------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| k8s_id | int | :heavy_check_mark: | ID экземпляра k8s | | k8s_id | int | :heavy_check_mark: | ID экземпляра k8s |
| name | string | :heavy_check_mark: | Наименование worker group | | name | string | :heavy_check_mark: | Наименование worker group |
| num | int | :x: | Количество worker node для создания<br/>по - умолчанию - 1| | num | int | :x: | Количество worker node для создания<br/>по - умолчанию - 1 |
| cpu | int | :x: | Количество cpu для 1 worker node<br/>по - умолчанию - 1| | cpu | int | :x: | Количество cpu для 1 worker node<br/>по - умолчанию - 1 |
| ram | int | :x: | Количество RAM для одной worker node в Мбайтах, <br/>по-умолчанию - 1024| | ram | int | :x: | Количество RAM для одной worker node в Мбайтах, <br/>по-умолчанию - 1024 |
| disk | int | :x: | Размер загрузочного диска для worker node, в Гбайтах<br/>по - умолчанию - 0<br/>если установлен параметр 0, то размер диска будет равен размеру образа | | disk | int | :x: | Размер загрузочного диска для worker node, в Гбайтах<br/>по - умолчанию - 0<br/>если установлен параметр 0, то размер диска будет равен размеру образа |
| labels | []string | :x: | Список lables | | labels | []string | :x: | Список lables |
| annotations | []string | :x: | Список annotations | | annotations | []string | :x: | Список annotations |
@ -51,8 +63,9 @@ _Resource_ функция **decort_k8s_wg** для создания worker group
| taints | []string | Ограничения для группы воркеров | | taints | []string | Ограничения для группы воркеров |
### Описание структуры detailed_info ### Описание структуры detailed_info
| Параметр | Тип | Описание | | Параметр | Тип | Описание |
| --- | --- | --- | | -------------------- | ----------------------------------------------------- | ---------------------------------------- |
| compute_id | int | ID компьюта, входящего в группу воркеров | | compute_id | int | ID компьюта, входящего в группу воркеров |
| name | string | Имя компьюта | | name | string | Имя компьюта |
| status | string | Статус компьюта | | status | string | Статус компьюта |
@ -62,13 +75,16 @@ _Resource_ функция **decort_k8s_wg** для создания worker group
| natable_vins_network | string | Сеть vins | | natable_vins_network | string | Сеть vins |
### Описание структуры interfaces ### Описание структуры interfaces
| Параметр | Тип | Описание | | Параметр | Тип | Описание |
| --- | --- | --- | | ---------- | ------ | ----------------- |
| def_gw | string | Шлюз по умолчанию | | def_gw | string | Шлюз по умолчанию |
| ip_address | string | IP адрес компьюта | | ip_address | string | IP адрес компьюта |
## Пример использования ## Пример использования
Пример вызова _resource_ функции **decort_k8s_wg**: Пример вызова _resource_ функции **decort_k8s_wg**:
```terraform ```terraform
resource "decort_k8s_wg" "wg" { resource "decort_k8s_wg" "wg" {
#id экземпляра k8s #id экземпляра k8s

@ -3,10 +3,11 @@
_Resource_ функция **decort_k8s** служит для управления кластером. _Resource_ функция **decort_k8s** служит для управления кластером.
## Аргументы ## Аргументы
_Resource_ функция **decort_k8s** для создания кластера принимает следующие аргументы: _Resource_ функция **decort_k8s** для создания кластера принимает следующие аргументы:
| Аргумент | Тип | Обязательный | Описание | | Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- | | --------- | ----------------------------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name | string | :heavy_check_mark: | Наименование кластера, <br/>при изменении - изменяет наименование кластера | | name | string | :heavy_check_mark: | Наименование кластера, <br/>при изменении - изменяет наименование кластера |
| rg_id | int | :heavy_check_mark: | ID ресурсной группы | | rg_id | int | :heavy_check_mark: | ID ресурсной группы |
| k8sci_id | int | :heavy_check_mark: | ID catalogue item | | k8sci_id | int | :heavy_check_mark: | ID catalogue item |
@ -16,10 +17,11 @@ _Resource_ функция **decort_k8s** для создания кластер
| extnet_id | int | :x: | ID внешней сети для соединения workers.<br/>Если не задано,<br/>то сеть будет выбрана платформой. | | extnet_id | int | :x: | ID внешней сети для соединения workers.<br/>Если не задано,<br/>то сеть будет выбрана платформой. |
## Возвращаемые значения ## Возвращаемые значения
В случае успешного выполнения _resource_ функция **decort_k8s** возвращает в указанную при вызове переменную следующие значения: В случае успешного выполнения _resource_ функция **decort_k8s** возвращает в указанную при вызове переменную следующие значения:
| Параметр | Тип | Описание | | Параметр | Тип | Описание |
| --- | --- | --- | | ------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| default_wg_id | int | ID рабочей группы (worker group) для этого экземпляра кластера. | | default_wg_id | int | ID рабочей группы (worker group) для этого экземпляра кластера. |
| kubeconfig | string | Kubeconfig для доступа к кластеру. | | kubeconfig | string | Kubeconfig для доступа к кластеру. |
| lb_ip | string | IP адрес балансировщика нагрузки (load balancer) по-умолчанию. | | lb_ip | string | IP адрес балансировщика нагрузки (load balancer) по-умолчанию. |
@ -32,7 +34,9 @@ _Resource_ функция **decort_k8s** для создания кластер
| extnet_id | int | ID внешней сети для соединения workers | | extnet_id | int | ID внешней сети для соединения workers |
## Пример использования ## Пример использования
Пример вызова _resource_ функции **decort_k8s**: Пример вызова _resource_ функции **decort_k8s**:
```terraform ```terraform
resource "decort_k8s" "cluster" { resource "decort_k8s" "cluster" {
name = "tftest" name = "tftest"

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save