Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Terraform 4 базис


Terraform 4 базис

Продолжаем цикл статей:
http://snakeproject.ru/rubric/article.php?art=е1_21082024
http://snakeproject.ru/rubric/article.php?art=terraform_05092024
http://snakeproject.ru/rubric/article.php?art=terraform_13092024


Сегодня кратко поговорим о provisioners

Существуют разные provisioners, которые помогают настраивать виртуальные машины
Одни provisioners используются во время создания виртуальной машины
Другие provisioners используются после создания виртуальной машины

Документацию смотри:
https://developer.hashicorp.com/terraform/language/resources/provisioners/syntax

Ниже показан пример provisioner - remote-exec:
- применяется во время создания vps
- выполнитьяет указанный список команд

Больше документации:
https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec

remote-exec provisioner вызывает скрипт на удаленном ресурсе после его создания
Для remote-exec поставщика требуется подключение, и он поддерживает как ssh, так и winrm

Документация по подключениям ssh или winrm:
https://developer.hashicorp.com/terraform/language/resources/provisioners/connection


Задача - задать пароль учетке root на созданной vps

Код из предыдущих статей дублироваться не будет
connection - блок подключения
provisioner - блок provisioner

Ниже:
Синтаксис [*] представляет собой символьное выражение
Перебирает все элементы списка, указанного слева от него
Возвращает список заданных атрибутов для каждого из них.

variables.tf
variable "do_token" {}
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "local_ssh_public_key" {
    default     = "~/.ssh/id_rsa.pub"
}
variable "local_ssh_private_key" {
    default     = "~/.ssh/id_rsa"
}
variable "instance_count" {
  default = "2"
}

resources.tf
resource "digitalocean_volume" "vol5" {
  count                   = var.instance_count
  region                  = "nyc1"
  name                    = "vol-${count.index + 1}"
  size                    = 5
  initial_filesystem_type = "ext4"
  description             = "5gb_volume"
}
resource "digitalocean_ssh_key" "local_ssh_pkey" {
  name       = "local_ssh_public_key"
  public_key = file(var.local_ssh_public_key)
}
resource "digitalocean_droplet" "foobar" {
  count      = var.instance_count
  name       = "serv-${count.index + 1}"
  size       = "s-1vcpu-1gb"
  image      = "ubuntu-20-04-x64"
  region     = "nyc1"
  ssh_keys   = [digitalocean_ssh_key.local_ssh_pkey.id]
  volume_ids = ["${element(digitalocean_volume.vol5.*.id, count.index)}"]
  connection {
      user = "root"
      type = "ssh"
      private_key = file(var.local_ssh_private_key)
      timeout = "2m"
      host = self.ipv4_address
  }
  provisioner "remote-exec" {
    inline = [
          "usermod --password 'My_Super_Pass' root"
      ]
  }
}
locals {
  vps_ip = digitalocean_droplet.foobar[*].ipv4_address
}
data "aws_route53_zone" "zone" {
  name = "devops.domain.ru"
}
resource "aws_route53_record" "record" {
  for_each = toset(local.vps_ip)
  zone_id = data.aws_route53_zone.zone.id
  name    = "serv-${index(local.vps_ip, each.value) + 1}"
  type    = "A"
  ttl     = "300"
  records = [each.value]
}

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект