[ English | Deutsch | Indonesia | русский | English (United Kingdom) ]

Запуск ad-hoc команд Ansible

Знакомство с выполнением специальных команд Ansible полезно при работе с развертыванием OpenStack-Ansible. Для обзора мы можем рассмотреть структуру следующей команды Ansible:

$ ansible example_group -m shell -a 'hostname'

Эта команда вызывает Ansible для запуска example_group с помощью модуля оболочки -m с аргументом -a, который является командой hostname. Вы можете заменить example_group на любые группы, которые вы могли определить. Например, если у вас есть compute_hosts в одной группе и infra_hosts в другой, укажите имя любой группы и выполните команду. Вы также можете использовать подстановочный знак *, если знаете только первую часть имени группы, например, если вы знаете, что имя группы начинается с compute, вы должны использовать compute_h*. Аргумент -m предназначен для module.

Модули могут использоваться для управления системными ресурсами или обработки выполнения системных команд. Для получения дополнительной информации о модулях см. Cправочник модулей и О модулях.

Если вам нужно выполнить определенную команду для подмножества группы, вы можете использовать флаг ограничения -l. Например, если группа compute_hosts содержит compute1, compute2, compute3 и compute4, и вам нужно выполнить команду только для compute1 и compute4, вы можете ограничить команду следующим образом:

$ ansible example_group -m shell -a 'hostname' -l compute1,compute4

Примечание

Каждый хост разделяется запятыми без пробелов.

Примечание

Запустите специальные команды Ansible из каталога openstack-ansible/playbooks.

Для получения дополнительной информации см. Inventory и Шаблоны.

Запуск shell модуля

Два наиболее часто используемых модуля — это модули shell и copy. Модуль shell принимает имя команды, за которым следует список аргументов, разделенных пробелами. Он почти как модуль command, но запускает команду через оболочку (/bin/sh) на удаленном узле.

Например, вы можете использовать модуль shell для проверки объема дискового пространства на наборе вычислительных хостов:

$ ansible compute_hosts -m shell -a 'df -h'

Чтобы проверить состояние вашего кластера Galera:

$ ansible galera_container -m shell -a "mariadb \
-e 'show status like \"%wsrep_cluster_%\";'"

Когда модуль используется как команда ad-hoc, есть несколько параметров, которые не требуются. Например, для команды chdir нет необходимости в chdir=/home/user ls при запуске Ansible из CLI:

$ ansible compute_hosts -m shell -a 'ls -la /home/user'

Для получения дополнительной информации см. shell - Выполнение команд на узлах.

Запуск модуля copy

Модуль копирования копирует файл с локальной машины на удаленные расположения. Чтобы скопировать файлы из удаленных расположений на локальную машину, используйте модуль fetch. Если вам нужна интерполяция переменных в скопированных файлах, используйте модуль template. Для получения дополнительной информации см. copy - Копирует файлы на удаленные расположения.

В следующем примере показано, как переместить файл с хоста развертывания в каталог /tmp на наборе удаленных машин:

$ ansible remote_machines -m copy -a 'src=/root/FILE '\
'dest=/tmp/FILE'

Модуль fetch собирает файлы с удаленных машин и сохраняет их локально в файловом дереве, организованном по имени хоста. С удаленных машин они сохраняются локально в файловом дереве, организованном по имени хоста.

Примечание

Этот модуль передает файлы журналов, которые могут отсутствовать, поэтому отсутствие удаленного файла не будет ошибкой, если только параметр fail_on_missing не установлен в yes.

В следующих примерах показано, как файл nova-compute.log извлекается из одного вычислительного хоста:

root@libertylab:/opt/rpc-openstack/openstack-ansible/playbooks# ansible compute_hosts -m fetch -a 'src=/var/log/nova/nova-compute.log dest=/tmp'
aio1 | success >> {
    "changed": true,
    "checksum": "865211db6285dca06829eb2215ee6a897416fe02",
    "dest": "/tmp/aio1/var/log/nova/nova-compute.log",
    "md5sum": "dbd52b5fd65ea23cb255d2617e36729c",
    "remote_checksum": "865211db6285dca06829eb2215ee6a897416fe02",
    "remote_md5sum": null
}

root@libertylab:/opt/rpc-openstack/openstack-ansible/playbooks# ls -la /tmp/aio1/var/log/nova/nova-compute.log
-rw-r--r-- 1 root root 2428624 Dec 15 01:23 /tmp/aio1/var/log/nova/nova-compute.log

Использование тегов

Теги похожи на флаг ограничения для групп, за исключением того, что теги используются только для запуска определенных задач в плейбуке. Для получения дополнительной информации о тегах см. Теги.

Ansible forks

Значение по умолчанию MaxSessions для OpenSSH Daemon равно 10. Каждая вилка Ansible использует сеанс. По умолчанию Ansible устанавливает количество forks равным 5. Однако вы можете увеличить количество используемых forks, чтобы улучшить производительность развертывания в больших окружениях.

Обратите внимание, что более 10 forks вызовут проблемы для любых плейбуков, которые используют delegate_to или local_action в задачах. Рекомендуется не увеличивать количество forks при выполнении в плоскости управления, поскольку именно здесь делегирование используется чаще всего.

Количество используемых forks можно изменить на постоянной основе, внеся соответствующие изменения в ANSIBLE_FORKS в файл .bashrc. В качестве альтернативы его можно изменить для конкретного выполнения плейбука, используя параметр CLI --forks. Например, следующий код выполняет nova playbook в плоскости управления с 10 forks, а затем на вычислительных узлов с 50 forks.

# openstack-ansible --forks 10 os-nova-install.yml --limit compute_containers
# openstack-ansible --forks 50 os-nova-install.yml --limit compute_hosts

Более подробную информацию о forks можно найти по следующим ссылкам: