Документация
Инструкции
Установка клиента Openstack и подключение Ansible


Инструкция описывает порядок действий по конфигурации шеллбокса 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 |
    +-------------------+--------+----------------------------------+--------+