Исправить строку
shell: id "{{ item }}"
правильный синтаксис (используйте shell
только при необходимости)
command: "id {{ item }}"
Playbook ниже
- hosts: testdrive
tasks:
- set_fact:
db_list: "{{ lookup('file', 'vars/' ~ inventory_hostname ~ '.dblist')|from_yaml }}"
- name: Shutdown running databases
include_tasks: shutdowndb.yml
loop: "{{ db_list }}"
с включенными задачами
$ cat shutdowndb.yml
- debug:
msg:
- "shell: {{ 'shutdown.sh ' ~ item }}"
- "become: {{ item is search('ebs')|ternary('yes', 'no') }}"
- "become_user: {{ item }}"
дают
"msg": [
"shell: shutdown.sh ebs1",
"become: yes",
"become_user: ebs1"
]
"msg": [
"shell: shutdown.sh ebs2",
"become: yes",
"become_user: ebs2"
]
"msg": [
"shell: shutdown.sh ndb1",
"become: no",
"become_user: ndb1"
]
Q: " Почему команда whoami все еще дает oracle вместо ebs1?"
A: Краткий ответ: поскольку become
не установлен в значение True.
Отладка
1) Является ли это можно стать всеми пользователями в db_list
? Да.
- hosts: test_01
become: no
remote_user: admin
vars:
db_list: ['ebs1', 'ebs2', 'ndb1']
tasks:
- command: whoami
become_user: "{{ item }}"
become: true
register: result
loop: "{{ db_list }}"
- debug:
msg: "{{ result.results|json_query('[].stdout') }}"
дай
"msg": [
"ebs1",
"ebs2",
"ndb1"
]
2) Правильно ли работают search
и ternary
? Да.
- debug:
msg: "{{ item is search('ebs')|ternary(true, false) }}"
loop: "{{ db_list }}"
дает
"msg": true
"msg": true
"msg": false
3) Правильно ли работают become
и become_user
?. Да.
- command: whoami
become_user: "{{ item }}"
become: "{{ item is search('ebs')|ternary(true, false) }}"
register: result
loop: "{{ db_list }}"
- debug:
msg: "{{ result.results|json_query('[].stdout') }}"
Да
"msg": [
"ebs1",
"ebs2",
"admin"
]