[ 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 можно найти по следующим ссылкам:
OpenStack-Ansible Ошибка 1479812
Ansible forks запись для ansible.cfg