Case 1
# Все последующие действия выполняются из-под пользователя altlinux (не root)
mkdir -p /home/altlinux/Projects/Project_01
# Для скрипта deploy_project_01.sh будет использоваться Terraform
# Создадим директорию terraform в ранее созданной директории для Project_01:
mkdir /home/altlinux/Projects/Project_01/terraform
# Перейдём в директорию /home/altlinux/Projects/:
cd /home/altlinux/Projects/
# Создадим файл с именем cloudinit.conf (имя произвольное) и поместим в него следующее содержимое:
# указав переменные окружения для работы OpenStack CLI с API облака
# в данном конкретном примере подразумевается что у участника:
# Внешний доступ к панели самообслуживания: https://cyberinfra.ssa2026.region:8800
# Домен: Competence_SiSA
# Проект: Project2
# Учётная запись: User2
# Пароль от уч.записи: P@ssw0rd
export OS_AUTH_URL=https://cyberinfra.ssa2026.region:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_TYPE=password
export OS_PROJECT_DOMAIN_NAME=Competence_SiSA
export OS_USER_DOMAIN_NAME=Competence_SiSA
export OS_PROJECT_NAME=Project2
export OS_USERNAME=User2
export OS_PASSWORD=P@ssw0rd
# Применяем переменные окружения указанные в файле
source cloudinit.conf
# Тест (должно вывести сервер Cloud-ADM):
openstack --insecure server list
# Тест созданных сетей:
openstack --insecure network list
# Если есть ошибки, то исправить конфиг выше
# Например url будет не по https://cyberinfra.ssa2026.region:5000/v3, а по ip адресу
# Для корректной работы с Terraform, необходимо создадать файл конфигурации зеркала
# Файл должен иметь имя .terraformrc ибыть расположен в домашнем каталоге пользователя
# Файл ~/.terraformrc должен содержать в себе следующее:
nano ~/.terraformrc
# Заполнить:
provider_installation {
network_mirror {
url = "https://terraform-mirror.mcs.mail.ru"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
# Перейти в директорию проекта/terraform
cd Project_01/terraform/
# СОздать файл:
provider.tf
# Заполнить:
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "openstack" {
auth_url = "https://172.17.2.11:5000/v3"
tenant_name = "Project2"
user_name = "User2"
password = "P@ssw0rd"
insecure = true
}
# Инициализируем текущий каталог для работы с terraform и провайдером openstack:
terraform init
# Должно вывести: Terraform has been succsessfully initialized!
# Чтобы с инстанса Cloud-ADM был доступ по SSH (для Ansible) до всех создаваемых инстансов (средствами Terraform), будет использоваться файл cloud-init.yml
# Создадим ключевую пару:
ssh-keygen -t rsa
# Поместим содержимое публичного ключа (id_rsa.pub) в файл cloud-init.yml:
cat ~/.ssh/id_rsa.pub > cloud-init.yml
# Откроем файл cloud-init.yml на редактирование и добавим в самое начало (до содержимого ключа ssh):
nano cloud-init.yml
# Содержимое файла:
#cloud-config
users:
- name: altlinux
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh_authorized_keys:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDN/HflhQqq+He0Quo8c2edmgawCvq1gP2V+vfcLNIdL6u1VQskeKGKZBvPlAIZAvbvA49aP6BK1s3Eej+rbKxOmcUfLl4q9CDXSwy5zpcKw/nhxBG712D9LJr3EMDLHUbT76nRaThQUegRVN5SZeHs0s00Kk3PbLTwikt1UmPmQ1gjcYCIrCTIrda+7Rjnw6n5jzYVM0GdcDi8bxb43nXnif2VaNaYEyjhwei2VZwRs9VeU3lnVSK5cCi8TasqLTfEgEuEyHjRxzC/vDHkkGtd+06f5lOS57f/cuvhqxK1rmOoaL8duT+agxw0miu8QBTMpKMwyw68OWxudiDE14aCwgPFEgx70ui50hzVvDenv8XiksmVgoh5kqf/XaVm77ULb9HxtamCfpT+gjq8vwwLuJLYmxXq07KbutBm0aMA7n2dAiSjpd5Y392Wq/ySJIzf+KB/wzBpzFMNDrt5xWyPPJm5pIfRAdmHKDk0aho3ls9BycF0zc+CxrEImHwahuc= altlinux@cloud-a
chpasswd:
list: |
altlinux:P@ssw0rd
root:toor
expire: false
ssh_pwauth: false
# Создадим файл vm-game.tf и опишем конфигурацию для создаваемых инстансов game01, game02 и game03:
# Значение для параметра flavor_id можно узнать используя команду openstack --insecure flavor list скопировав ID Типа ВМ с 1024 RAM и 1 VCPUs;
# значение для параметра uuid можно узнать используя команду openstack --insecure image list скопировав ID образа alt-p11-cloud-x86_64.qcow2.