Инструкция описывает порядок действий по конфигурации шеллбокса cо структурой Ansible с динамическим инвентарем, подключенным к Openstack API,
на примере диструбутива Ubuntu.
Шеллбокс - система, которая выполняет роль консольного shell-терминала для доступа на хосты окружения. Другими словами,
это виртуальный сервер, выступающий в роли точки входа на другие серверы датацентра, таким образом решаются вопросы ограничения доступа в окружение.
При этом нет необходимости приносить свой приватный SSH ключ на удаленный сервер, вы можете использовать перенаправление SSH ключей (SSH forwarding).
Вы можете в один клик создать виртуальный сервер,
полностью настроенный и готовый к работе с датацентром, с настроенным форвардингом
SSH ключей, используя шаблон
'Ansible & Openstack shellbox' в форме установки окружений из Heat шаблонов.
Для самостоятельной установки выполянем следующие шаги:
1. Устанавливаем необходимые пакеты. Redis сервер нужен будет для кэширования в ansible.
$ apt update
$ apt -y install git python python-pip virtualenv python-apt redis-server
2. Если нужен форвардинг SSH ключей, разрешаем форвард ключей для SSH сервера
$ sed -i '/^#AllowAgentForwarding\ yes/s/#//' /etc/ssh/sshd_config
$ systemctl restart ssh
$ echo 'Defaults env_keep+=SSH_AUTH_SOCK' | tee -a /etc/sudoers.d/sudo_ssh_forward
3. Настраиваем viurtalenv окружение с ansible и openstacksdk
$ virtualenv ~/ansible2.9
$ echo 'source ~/ansible2.9/bin/activate' >> ~/.bashrc
$ source ~/ansible2.9/bin/activate
$ pip install ansible==2.9.7
$ pip install openstacksdk==0.43.0
$ pip install openstackclient
$ pip install "python-ironicclient!=2.5.2,!=2.7.1,!=3.0.0,>=2.3.0,<4.0.0;python_version=='2.7'"
4. Конфигурируем параметры подключения к датацентру, параметры подключения доступны в Панели управления в разделе Инфо
$ cat > ~/keystone_dc01 <<EOF
unset OS_USERNAME OS_PASSWORD OS_TENANT_NAME OS_AUTH_URL OS_TOKEN OS_URL
unset SERVICE_TOKEN SERVICE_ENDPOINT
unset OS_USER_DOMAIN_NAME OS_PROJECT_DOMAIN_NAME OS_PROJECT_NAME
export OS_IMAGE_API_VERSION=2
export OS_URL=<< dc_endpoint_public_url >>
export OS_AUTH_URL=<< dc_endpoint_public_url >>
export NEW_OS_AUTH_URL=<< dc_endpoint_public_url >>
export OS_USER_DOMAIN_NAME=myaccount003-domain
export OS_PROJECT_DOMAIN_NAME=myaccount003-domain
export OS_USERNAME=myaccount003
export OS_PROJECT_NAME=myaccount003-dc01
export OS_PASSWORD=<< openstack_password >>
export OS_IDENTITY_API_VERSION=3
EOF
5. Конфигурируем ansible
$ pip install redis
$ mkdir -p ~/ansible_dc01/group_vars
$ mkdir -p ~/ansible_dc01/host_vars
$ cat > ~/ansible_dc01/ansible.cfg <<EOF
[defaults]
inventory=openstack.yml
force_valid_group_names=ignore
interpreter_python=auto_silent
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[ssh_connection]
ssh_args='-o ControlMaster=auto -o ControlPersist=1m'
control_path = /tmp/ansible-%%r@%%h:%%p
scp_if_ssh=True
[inventory]
enable_plugins = openstack
cache = True
EOF
$ cat > ~/ansible_dc01/openstack.yml <<EOF
plugin: openstack
cache: True
cache_plugin: redis
cache_connection = localhost
expand_hostvars: yes
fail_on_errors: yes
EOF
Теперь вы можете обращаться к виртуальным серверам из ansible.
ubuntu@shellbox:~$ source keystone_dc01
ubuntu@shellbox:~$ cd ansible_dc01
ubuntu@shellbox:~/ansible_dc01$ ansible all --list-hosts
hosts (3):
server01
server02
shellbox
ubuntu@shellbox:~/ansible_dc01$ openstack server list -c 'Name' \
-c 'Status' -c 'Image' -c 'Flavor'
+-------------------+--------+----------------------------------+--------+
| Name | Status | Image | Flavor |
+-------------------+--------+----------------------------------+--------+
| server01 | ACTIVE | Ubuntu Bionic 18.04 (2020-03-27) | vibox1 |
| server02 | ACTIVE | Ubuntu Bionic 18.04 (2020-03-27) | vibox2 |
| shellbox | ACTIVE | Ubuntu Bionic 18.04 (2020-03-27) | vibox2 |
+-------------------+--------+----------------------------------+--------+