syslog
Ansible 작업을 사용하여 두 그룹(및)의 그룹 ID를 이름으로 검색하려고 합니다 . utmp
테스트 목적으로 Ansible 호스트 자체에서 정보를 검색하는 플레이북을 만들었습니다.
---
- name: My playbook
hosts: enabled
sudo: True
connection: local
gather_facts: False
tasks:
- name: Determine GIDs
shell: "getent group {{ item }} | cut -d : -f 3"
register: gid_{{item}}
failed_when: gid_{{item}}.rc != 0
changed_when: false
with_items:
- syslog
- utmp
안타깝게도 플레이북을 실행할 때 다음 오류가 발생합니다.
fatal: [hostname] => error while evaluating conditional: gid_syslog.rc != 0
등록 시 이러한 작업을 매개변수화된 형식에 통합하는 방법분리변수, 하나모든, 나중에 사용하기 위해? 그래서표적이후 작업에서 사용할 수 있는 그룹 이름을 기반으로 하는 변수를 갖는 것입니다.
이후 작업에서는 int
필터를 사용 gid_syslog.stdout
하고 gid_utmp.stdout
GID를 기반으로 몇 가지 계산을 수행합니다.
나는 또한 대신에 gid.{{item}}
아무 소용이 없다는 것을 사용해 보았습니다.gid[item]
gid_{{item}}
위와 비교하면 다음이 잘 작동합니다.
---
- name: My playbook
hosts: enabled
sudo: True
connection: local
gather_facts: False
tasks:
- name: Determine syslog GID
shell: "getent group syslog | cut -d : -f 3"
register: gid_syslog
failed_when: gid_syslog.rc != 0
changed_when: false
- name: Determine utmp GID
shell: "getent group utmp | cut -d : -f 3"
register: gid_utmp
failed_when: gid_utmp.rc != 0
changed_when: false
답변1
Setfact는 이전 솔루션의 선언과 달리 변수를 지원합니다.
- set_fact:
"{{ item.name }}": "{{ item.val }}"
when: item.name not in vars # this is optional. prevents overwriting vars
with_items:
- { name: test, val: myalue }
- { name: notest, val: novalue }
답변2
이 작업을 수행하는 쉬운 방법은 없다고 생각합니다. 그리고 register
with with_items
루프는 모든 결과를 배열에 넣습니다 variable.results
. 다음 작업을 시도해 보세요.
tasks:
- name: Determine GIDs
shell: "getent group {{ item }} | cut -d : -f 3"
register: gids
changed_when: false
with_items:
- syslog
- utmp
- debug:
var: gids
- assert:
that:
- item.rc == 0
with_items: gids.results
- set_fact:
gid_syslog: "{{gids.results[0]}}"
gid_utmp: "{{gids.results[1]}}"
- debug:
msg: "{{gid_syslog.stdout}} {{gid_utmp.stdout}}"
그러나 set_fact
다음과 같이 키에서 변수 확장을 사용할 수 있습니다.
- set_fact:
"gid_{{item.item}}": "{{item}}"
with_items: gids.results