This project need for creates you own PostgreSQL cluster
Selectel modules for terraform took from https://github.com/selectel/terraform-examples
Что нужно заполнить перед началом работы?
Для работы с terraform и ansible необходимо определить переменные среды. Для этого в корне проекта необходимо создать файл os-credentials.sh и заполнить его по аналогии с файлом os-credentials.sh.example
#!/bin/sh
export OS_AUTH_URL="https://api.selvpc.ru/identity/v3"
export OS_X_TOKEN=<YourSelectelToken> - токен созданный в панели my.selectel
export OS_PROJECT_NAME=<YourProjectName> - имя создаваемого проекта
export OS_USER_DOMAIN_NAME=<YourUserDomainName> - ваш логин в my.selectel
export OS_USERNAME=<YourUserName> - имя пользователя который будет создан в проекте
export OS_PASSWORD=<YourPassword> - пароль этого пользователя
export OS_REGION=<YourRegion> - регион в котором будут созданы инстансы
export OS_AVAILABILITY_ZONE=<YourAvailabilityZone> - зона для инстансов
export RESELL_API_URL='https://api.selectel.ru/vpc/resell/v2'
export TF_VAR_OS_AUTH_URL=$OS_AUTH_URL
export TF_VAR_OS_X_TOKEN=$OS_X_TOKEN
export TF_VAR_OS_PROJECT_NAME=$OS_PROJECT_NAME
export TF_VAR_OS_USER_DOMAIN_NAME=$OS_USER_DOMAIN_NAME
export TF_VAR_OS_USERNAME=$OS_USERNAME
export TF_VAR_OS_PASSWORD=$OS_PASSWORD
export TF_VAR_OS_REGION=$OS_REGION
export TF_VAR_OS_AVAILABILITY_ZONE=$OS_AVAILABILITY_ZONE
после чего выполнить команду
source os-credentials.sh
Для работы с terraform необходимо определить переменные. Для этого в директории terraform/selectel-vpc необходимо создать файл terraform.tfvars и заполнить его по аналогии с файлом terraform.tfvars.example
# OpenStack instances vars
# Имя обязательно должно содержать подстроку 'srv' для корректной работы dynamic inventory
srv_instance_prefix_name = "srv"
# Пока Ansible работает корректно только с 1-м мастером
master_instance_count = 1
# Имя обязательно должно содержать подстроку 'master' для корректной работы dynamic inventory
master_instance_prefix_name = "master"
slave_instance_count = 2
# Имя обязательно должно содержать подстроку 'slave' для корректной работы dynamic inventory
slave_instance_prefix_name = "slave"
instance_vcpus = 1
instance_ram_mb = 1024
instance_root_disk_gb = 10
instance_image_name = "Ubuntu 18.04 LTS 64-bit"
public_key_path = "~/.ssh/id_rsa.pub"
после чего можно поднимать кластер, для этого в корне проекта необходимо выполнить
make tf-init
make tf-apply
P.S. для разрушения кластера в корне можно выполнить команду make tf-destroy
Для работы с Ansible необходимо задать пользовательские креды. Для этого в директории ansible/environments/stage необходимо создать файл credentials.yml и заполнить его по аналогии с файлом credentials.yml.example
---
credentials:
admins:
postgres: - Имя пользователя PostgresSQL (нельзя менять)
password: "<YouPass>" - Пароль для пользователя postgres (можно менять)
replicator: - Имя пользователя под которым будет происходить репликация (нельзя менять)
password: "<YouPass>" - Пароль для пользователя replicator (можно менять)
users:
bar: - имя пользователя Linux (можно менять)
password: "<YouPass>" (можно менять)
groups: sudo - может ли пользователь зайти под sudo (можно не указывать)
database: "<YouDBName>" - Имя базы данных для пользователя (можно менять)
patroni:
patroni_rest_password: "<YouPass>" - Пароль для доступа к REST API Patroni (можно менять)
На основании этих данных Ansible на каждом инстансе создаст Linux и Postgres пользователей имеющих по одной базе c 'GRANT ALL' привилегиями.
Прежде чем приступить к запуску Ansible нужно создать файл vault.key в директории ./ansible, его содержимое может быть абсолютно произвольным, например:
aijdajhsdh84385709834jusdhfiu473thyhdofhouyvrbvouybhouojjxp8uuhsuibsdfp
он нужен для шифрования файла credentials.yml. В папке ./ansible можно выполнять комманды
make encrypt - для шифрования файла credentials.yml
make decrypt - для расшифровки файла credentials.yml
make edit - для редактирования файла credentials.yml в консоли без предварительной расшифровки
P.S. перед запуском Ansible credentials.yml должен быть в зашифрованном виде
После того как все готово можно запустить Ansible, выполнив команду в директории ./ansible
make
В результате должен быть получен кластер.