2016-07-12 3 views
3

анзибль версия: 2.1.0Как играть с определенной группой, используя анзибль Playbook

Мой анзибль хостов файл:

[PM] 
asma.example.com ansible_connection=ssh 

[ND] 
malliswar.example.com ansible_connection=ssh 

[CM] 
asma.example.com ansible_connection=ssh 
malliswar.example.com ansible_connection=ssh 

И это сборник пьес:

- hosts: PM:ND:CM 
    remote_user: root 
    tasks: 
    {some thing} 

- hosts: PM 
    remote_user: root 
    tasks: 
    {some thing} 

- hosts: ND 
    remote_user: root 
    tasks: 
    {some thing} 

- hosts: CM 
    remote_user: root 
    tasks: 
    {some thing} 

И я бегу плейер с командой:

ansible-playbook --limit 'PM' akana-installation.yml 

Но все же Playbook играет со всеми хостами, это означает

Play 'PM:ND:CM' 
Play 'PM' 
Play 'ND' 
Play 'CM' 

эти все игры играют. Пожалуйста, помогите мне решить эту проблему.

Что мне нужно: При выполнении playbook я дам имя группы, чтобы только группа должна была играть, поэтому, пожалуйста, дайте мне знать, есть ли другой способ.

ответ

2

Оригинальный вопрос: --limit опция не работает

Позвонив ansible-playbook --limit 'PM' akana-installation.yml вы говорите анзибль ограничить серверы для хостов, которые находятся в группе PM.
В вашем случае это будет asma.example.com.
Имейте в виду, что если у вас есть этот сервер в нескольких группах, как и вы, он все равно будет членом этих групп.
Ваш ограниченный инвентарь будет:

[PM] 
asma.example.com ansible_connection=ssh 

[ND] 

[CM] 
asma.example.com ansible_connection=ssh 

И анзибль-Playbook будет выполнять каждую игру в вашем PlayBook, который применяется для asma.example.com.
В вашем случае:

Play 'PM:ND:CM' 
[asma.example.com] 
Play 'PM' 
[asma.example.com] 
Play 'ND' 
skipping: no hosts matched 
Play 'CM' 
[asma.example.com] 
+0

Да, вы правы, это то, что происходит со мной. Но я хочу играть с конкретными групповыми хостами, как я могу это достичь? – KishoreReddy

+1

@ KishoreReddy, это не то, как все работает в недоступном. Вы можете ограничить хосты (как вы это делаете с '--limit'), но это не будет ограничивать игры. Если вы хотите ограничить воспроизведение, подумайте о том, чтобы разделить их на разные учебники и включить их в основную книгу (см. [Пример] (http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are- разделенные по ролям): site.yml и webservers.yml). Или используйте теги. –

0

Это добавить к предыдущему ответу. И я приношу свои извинения, если я неправильно понял ваш вопрос, но ваш примерный учебник не имел описаний.

Очищение пропускаются хосты:
Группа «ND» будет (как указано выше) не соответствуют никаким хостам. И если вы хотите удалить выход из игры, вам придется использовать плагин обратного вызова. Я использую следующие Gist:

Другой способ ограничения:
Чтобы ограничить так, как вы просите, чтобы, вам нужно будет использовать TAGS. Это позволит вам ограничить игру (это то, что вы, похоже, хотите сделать), а не списки хостов.

Чтобы сделать это, добавьте тег в игру:

... 
- hosts: PM 
    remote_user: root 
    tags: pmtag 
    tasks: 
    {some thing} 

Затем запустите Playbook с новым тегом исключенного или включены в зависимости от ваших потребностей.

ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag 

Это гарантирует, что только хосты в PM запускают только теги с меткой pmtag.

1

Создать каталог для PlayBook файлов:

mkdir playbooks 

Сплита вашего playbooks в отдельные файлы, например. playbooks/pm.yml:

- hosts: PM 
    remote_user: root 
    tasks: 
    {some thing} 

Создать файл all.yml

- hosts: PM:ND:CM 
    remote_user: root 
    tasks: 
    {some thing} 

- include: playbooks/pm.yml 
- include: playbooks/nd.yml 
- include: playbooks/cm.yml  

Теперь у вас есть отдельная логика и Вы можете играть все с командой:

ansible-playbook all.yml 

или запустить отдельную команду:

ansible-playbook playbooks/pm.yml 

или

ansible-playbook playbooks/nd.yml