47 lines
1.7 KiB
Bash
Executable File
47 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
YC_TOKEN=$(yc iam create-token)
|
|
export YC_TOKEN
|
|
|
|
# Файл инвентаря Ansible
|
|
inventory_file="inventory.ini"
|
|
|
|
# Группа в файле инвентаря
|
|
group_name="yandex_cloud"
|
|
|
|
# Читаем username из meta.yaml
|
|
username=$(grep -oP '(?<=name: )\S+' meta.yml)
|
|
|
|
# Проверяем существует ли inventory file и удаляем старый
|
|
if [ -f "$inventory_file" ]; then
|
|
rm "$inventory_file"
|
|
echo "Old inventory file $inventory_file removed."
|
|
fi
|
|
|
|
# Запускаем terraform apply и проверяем exit code
|
|
if ! terraform apply -auto-approve; then
|
|
echo "Terraform apply failed. Script execution stopped."
|
|
exit 1
|
|
fi
|
|
|
|
# Запускаем terraform output и сохраняем внешние IP в массив
|
|
mapfile -t ip_addresses < <(terraform output -json | jq -r '.external_ip_addresses.value[]')
|
|
|
|
# Добавляем группу в файл инвентаря, если она еще не существует
|
|
if ! grep -qF "[$group_name]" "$inventory_file"; then
|
|
echo -e "\n[$group_name]" >> "$inventory_file"
|
|
fi
|
|
|
|
base_hostname="host"
|
|
index=1
|
|
|
|
# Добавляем IP-адреса в файл инвентаря Ansible в указанную группу
|
|
for ip_address in "${ip_addresses[@]}"; do
|
|
hostname="${base_hostname}${index}"
|
|
# Проверяем, не содержится ли уже IP-адрес в файле
|
|
if ! grep -qF "$ip_address" "$inventory_file"; then
|
|
# Добавляем IP-адрес в файл и группу
|
|
echo "$hostname ansible_host=$ip_address ansible_connection=ssh ansible_user=$username" >> "$inventory_file"
|
|
fi
|
|
((index++))
|
|
done |