Ansible 플레이북의 출력을 분리하려고 하는데 다음과 같이 표시됩니다."output.stdout": "VARIABLE IS NOT DEFINED!"
내 플레이북 코드는 다음과 같습니다.
--- - hosts: localhost tasks: - name: Register variable shell: "echo {{ item }}" loop: - "one" - "two" register: output - debug: var: output.stdout
흥미롭게도 디버그 출력은 키를 사용하여 격리하지 않으면 제대로 작동합니다 stdout
.
TASK [Register variable] ***********************************************************************************************************************************************
changed: [localhost] => (item=one)
changed: [localhost] => (item=two)
TASK [debug] ***********************************************************************************************************************************************************
ok: [localhost] => {
"output": {
"changed": true,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": true,
"cmd": "echo one",
"delta": "0:00:00.002986",
"end": "2020-01-24 00:20:57.226744",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "echo one",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
내가 도대체 뭘 잘못하고있는 겁니까 ?
답변1
루프와 함께 레지스터를 사용하면 변수에 배치된 데이터 구조에는 모듈의 모든 응답 목록인 결과 속성이 포함됩니다.
따라서:
output.results[0].stdout
output.results[1].stdout
답변2
더 쉬운 방법은 별도의 .yml 파일(포함을 통해)로 루프를 만들어 부드러운 작업 + 출력을 수행하는 것입니다. 예를 들어:
main.yml:
- name: RUN start.yml
include: start.yml
vars:
app: "{{ item.name }}"
static: false
with_items: "{{ list_items }}"
동일한 역할의 start.yml:
- name: "Run {{ app }}"
command: './runapp.sh {{ app }}'
register: start_app_register
no_log: True
- debug:
msg: '{{ start_app_register.stdout }}'