Ansible: Могу ли я выполнить роль из командной строки?

Предположим, у меня есть роль под названием "Apache"

Теперь я хочу выполнить эту роль на хосте 192.168.0.10 из командной строки с хоста Ansible

ansible-playbook -i  "192.168.0.10" --role  "path to role"

Есть способ сделать это?

Ответы на вопрос(5)

но если это часто используется для вас, попробуйте этот скрипт.
Поместите это где-нибудь в вашей доступной для поиска PATH под именемansible-role:

#!/bin/bash

if [[ $# < 2 ]]; then
  cat <<HELP
Wrapper script for ansible-playbook to apply single role.

Usage: $0 <host-pattern> <role-name> [ansible-playbook options]

Examples:
  $0 dest_host my_role
  $0 custom_host my_role -i 'custom_host,' -vv --check
HELP
  exit
fi

HOST_PATTERN=$1
shift
ROLE=$1
shift

echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."

export ANSIBLE_ROLES_PATH="$(pwd)/roles"
export ANSIBLE_RETRY_FILES_ENABLED="False"
ansible-playbook "[email protected]" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  roles:
    - $ROLE
END
 jhutar20 июл. 2018 г., 07:53
Я создал предложение по инструменту «создать анзиновую роль», мы увидим:github.com/ansible/proposals/issues/131
 jhutar06 мая 2019 г., 22:54
Да попробуй пожалуйстаansible localhost -m include_role -a name=myrole - работает для меня!
 EM010 авг. 2018 г., 10:00
Похоже, это было реализовано в Ansible 2.7:github.com/ansible/ansible/pull/43131
 Christian Ciach27 мая 2019 г., 15:41
ansible localhost -m include_role -a name=myrole сломан, так как ansible 2.8. Он просто регистрирует загадочные сообщения об ошибках, такие как'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.

С ansible 2.7 вы можете сделать это:

$ cd /path/to/ansible/
$ ansible localhost -m include_role -a name=<role_name>
localhost | SUCCESS => {
    "changed": false,
    "include_variables": {
        "name": "<role_name>"
    }
}
localhost | SUCCESS => {
    "msg": "<role_name>"
}

Это будет запускать роль из / path / to / ansible / role или настроенного пути роли.

Узнайте больше здесь:https://github.com/ansible/ansible/pull/43131

 Julius Žaromskis18 февр. 2019 г., 15:23
Надеюсь, я уточнил ответ @Kola
 Kola18 февр. 2019 г., 13:04
Это на самом деле не отвечает на этот вопрос, потому что нет ссылки на внешнюю роль, реализованную в YAML-файле @kari, и она хочет включить. У меня такой же вопрос. Тем не менее, прочитав этот ответ, я только понимаю, что это возможно. Я просто не знаю как.
 user206648022 авг. 2019 г., 13:23
Это решение, кажется, работает для меня с ANSIBLE 2.8.2. Кажется, у него есть проблема с отображением переменных для других ролей, включенных в исходную роль (что не является проблемой в сборнике пьес). Я пытался изменить на-a "name=<role_name> public=yes", но это не помогло.
 Christian Ciach27 мая 2019 г., 15:46
Это сломано в Ansible 2.8. Он просто регистрирует загадочные сообщения об ошибках, такие как'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.

auto_tags, который динамически генерирует для каждой роли в вашей книге игр одноименный тег. Вы можете найти этоВот.

После его установки (инструкции приведены выше) вы можете выполнить определенную роль с помощью:

ansible-playbook -i "192.168.0.10" --tags "name_of_role"

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

roles:
    - {role: 'mysql', tags: 'mysql'}
    - {role: 'apache', tags: 'apache'}

ansible-playbook webserver.yml --tags "apache"

Вы также можете проверитьанзибль-инструментов репозиторий. Это позволит вам использовать что-то вроде

ansible-role --host 192.168.0.10 --gather --user centos --become my-role

Ваш ответ на вопрос