Initial commit
This commit is contained in:
commit
d78331868d
52
.gitignore
vendored
Normal file
52
.gitignore
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
.vscode/*
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
*.retry
|
||||
|
||||
# Local .terraform directories
|
||||
**/.terraform/*
|
||||
|
||||
# .tfstate files
|
||||
*.tfstate
|
||||
*.tfstate.*
|
||||
|
||||
# Crash log files
|
||||
crash.log
|
||||
crash.*.log
|
||||
|
||||
# Exclude all .tfvars files, which are likely to contain sensitive data, such as
|
||||
# password, private keys, and other secrets. These should not be part of version
|
||||
# control as they are data points which are potentially sensitive and subject
|
||||
# to change depending on the environment.
|
||||
*.tfvars
|
||||
*.tfvars.json
|
||||
|
||||
# Ignore override files as they are usually used to override resources locally and so
|
||||
# are not checked in
|
||||
override.tf
|
||||
override.tf.json
|
||||
*_override.tf
|
||||
*_override.tf.json
|
||||
|
||||
# Ignore transient lock info files created by terraform apply
|
||||
.terraform.tfstate.lock.info
|
||||
.terraform.lock.hcl
|
||||
|
||||
# Include override files you do wish to add to version control using negated pattern
|
||||
# !example_override.tf
|
||||
|
||||
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
|
||||
# example: *tfplan*
|
||||
|
||||
# Ignore CLI configuration files
|
||||
.terraformrc
|
||||
terraform.rc
|
||||
|
||||
# UserSpecific
|
||||
inventory.ini
|
||||
.env
|
1056
ansible.cfg
Normal file
1056
ansible.cfg
Normal file
File diff suppressed because it is too large
Load Diff
37
configure_alma_docker.yml
Normal file
37
configure_alma_docker.yml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
- name: Install Docker, Docker Compose plugin, and add user to docker group on AlmaLinux
|
||||
hosts: yandex_cloud
|
||||
become: true
|
||||
|
||||
tasks:
|
||||
- name: Add Docker repository
|
||||
ansible.builtin.yum_repository:
|
||||
name: docker-ce
|
||||
description: Docker CE Stable - $basearch
|
||||
baseurl: https://download.docker.com/linux/centos/$releasever/$basearch/stable
|
||||
gpgcheck: true
|
||||
gpgkey: https://download.docker.com/linux/centos/gpg
|
||||
|
||||
- name: Install Docker and other soft
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-compose-plugin
|
||||
- unzip
|
||||
- git
|
||||
- vim
|
||||
state: present
|
||||
|
||||
- name: Start Docker service
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: true
|
||||
|
||||
- name: Add user to docker group
|
||||
ansible.builtin.user:
|
||||
name: "{{ ansible_user }}"
|
||||
groups: docker
|
||||
append: true
|
66
main.tf
Normal file
66
main.tf
Normal file
@ -0,0 +1,66 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
yandex = {
|
||||
source = "yandex-cloud/yandex"
|
||||
}
|
||||
}
|
||||
required_version = ">= 0.13"
|
||||
}
|
||||
|
||||
provider "yandex" {
|
||||
cloud_id = "b1g8rpem9q71hdcg3pep"
|
||||
folder_id = "b1gbkqbbl3vnqa30st2n"
|
||||
zone = "ru-central1-b"
|
||||
}
|
||||
|
||||
resource "yandex_compute_instance" "vm-instance" {
|
||||
count = var.num_instances
|
||||
|
||||
name = "alma${count.index}"
|
||||
platform_id = "standard-v2"
|
||||
|
||||
scheduling_policy {
|
||||
preemptible = true
|
||||
}
|
||||
|
||||
resources {
|
||||
core_fraction = 5
|
||||
cores = 2
|
||||
memory = 2
|
||||
}
|
||||
|
||||
boot_disk {
|
||||
initialize_params {
|
||||
image_id = "fd8hd4lps5o16vrl2uvj"
|
||||
size = 20
|
||||
}
|
||||
}
|
||||
|
||||
network_interface {
|
||||
subnet_id = yandex_vpc_subnet.subnet-1.id
|
||||
nat = true
|
||||
}
|
||||
|
||||
metadata = {
|
||||
user-data = "${file("./meta.yml")}"
|
||||
}
|
||||
}
|
||||
|
||||
resource "yandex_vpc_network" "network-1" {
|
||||
name = "network1"
|
||||
}
|
||||
|
||||
resource "yandex_vpc_subnet" "subnet-1" {
|
||||
name = "subnet1"
|
||||
zone = "ru-central1-b"
|
||||
network_id = yandex_vpc_network.network-1.id
|
||||
v4_cidr_blocks = ["192.168.10.0/24"]
|
||||
}
|
||||
|
||||
output "internal_ip_addresses" {
|
||||
value = yandex_compute_instance.vm-instance.*.network_interface.0.ip_address
|
||||
}
|
||||
|
||||
output "external_ip_addresses" {
|
||||
value = yandex_compute_instance.vm-instance.*.network_interface.0.nat_ip_address
|
||||
}
|
9
meta.yml
Normal file
9
meta.yml
Normal file
@ -0,0 +1,9 @@
|
||||
#cloud-config
|
||||
|
||||
users:
|
||||
- name: prygoon
|
||||
groups: sudo
|
||||
shell: /bin/bash
|
||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||
ssh-authorized-keys:
|
||||
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDaUm5WPXz17yeA1QmSmFpLYb5ojOOOFN5KsRSoXWFPJiCoGDXsa516uq2oUUoyrhjdXoLXJEV/EMM1NFtMU4KlCyBTK8X039NHnZM61IOq+pGvoTFZlTW7y0howS5HygjHXiqrAKGGmEZW4CV92z73ddE9XhRA72hcw0f7nyxhiDirhoUtY+ZF3E+4Zhv6Mo5V1v7bfHup4Hnk5B39M34inBB9icLwOEO9Own8OPOATecAtlBOnh0BEXaXfkv8CU8+402UQvOHvZK8zBKdYCKwKtZn5M+n7/+1NFXRyzJqk2/QyPvbiG7pColpBuWZD4URTMKV8AkuLGIZCEK2VwdyJAptWgk5dZXZlbMXwIdXCn46PlBiZZUs9ZnUPR+w4NivYdvYSYxRiYACMTAjBqyAHTASgK36yz5uaNthDkZ+1LkqdLRtiqYf8S9zph5/UJ2Z5wCT5olUtNS4cSKSUQslCXGNSxv5yzAxjdwwLJ357VNmkC5tF32IocZJh2mYNxk= prygoon@pocketowl
|
47
start.sh
Executable file
47
start.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/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
|
21
stop.sh
Executable file
21
stop.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
YC_TOKEN=$(yc iam create-token)
|
||||
export YC_TOKEN
|
||||
|
||||
# Run Terraform destroy and check the exit code
|
||||
if ! terraform destroy -auto-approve; then
|
||||
echo "Terraform destroy failed. Script execution stopped."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ansible inventory file
|
||||
inventory_file="inventory.ini"
|
||||
|
||||
# Check if the inventory file exists and remove it
|
||||
if [ -f "$inventory_file" ]; then
|
||||
rm "$inventory_file"
|
||||
echo "Inventory file $inventory_file removed."
|
||||
else
|
||||
echo "Inventory file $inventory_file does not exist."
|
||||
fi
|
4
variables.tf
Normal file
4
variables.tf
Normal file
@ -0,0 +1,4 @@
|
||||
variable "num_instances" {
|
||||
type = number
|
||||
default = 1
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user