Ansible : 명령의 stdout을 새 변수에 저장 하시겠습니까?
내 플레이 북 안에 외부 명령의 출력을 포함하는 변수를 만들고 싶습니다. 나중에 몇 가지 템플릿에서 해당 변수를 사용하고 싶습니다.
다음은 플레이 북의 관련 부분입니다.
tasks:
- name: Create variable from command
command: "echo Hello"
register: command_output
- debug: msg="{{command_output.stdout}}"
- name: Copy test service
template: src=../templates/test.service.j2 dest=/tmp/test.service
- name: Enable test service
shell: systemctl enable /tmp/test.service
- name: Start test service
shell: systemctl start test.service
이것이 내 템플릿이라고합시다.
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo {{ string_to_echo }}; sleep 1; done"
[Install]
WantedBy=multi-user.target
(알림 {{ string_to_echo }}
)
그래서 내가 기본적으로 찾고 command_output.stdout
있는 것은 (첫 번째 작업 중에 생성 / 검색되는) 내용을 새 변수에 저장하는 방법 string_to_echo
입니다.
나중에 여러 템플릿에서 사용하고 싶은 변수입니다.
{{command_output.stdout}}
내 템플릿에서 사용할 수 있다고 생각 하지만 .stdout
가독성 을 위해 제거하고 싶습니다 .
콘텐츠를 사실로 저장 해야합니다 .
- set_fact:
string_to_echo: "{{ command_output.stdout }}"
사실을 설정할 필요가 없습니다.
- shell: cat "hello"
register: cat_contents
- shell: echo "I cat hello"
when: cat_contents.stdout == "hello"
@udondan의 대답을 넘어선 약간의 수정. 저는 등록 된 변수 이름을와 함께 재사용 set_fact
하여 혼란을 최소화 하고 싶습니다 .
따라서 변수를 사용하여 등록 psk
하려면 set_fact
.
예
- name: generate PSK
shell: openssl rand -base64 48
register: psk
delegate_to: 127.0.0.1
run_once: true
- set_fact:
psk={{ psk.stdout }}
- debug: var=psk
run_once: true
그런 다음 실행할 때 :
$ ansible-playbook -i inventory setup_ipsec.yml
PLAY [all] *************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************
ok: [hostc.mydom.com]
ok: [hostb.mydom.com]
ok: [hosta.mydom.com]
TASK [libreswan : generate PSK] ****************************************************************************************************************************************************
changed: [hosta.mydom.com -> 127.0.0.1]
TASK [libreswan : set_fact] ********************************************************************************************************************************************************
ok: [hosta.mydom.com]
ok: [hostb.mydom.com]
ok: [hostc.mydom.com]
TASK [libreswan : debug] ***********************************************************************************************************************************************************
ok: [hosta.mydom.com] => {
"psk": "6Tx/4CPBa1xmQ9A6yKi7ifONgoYAXfbo50WXPc1kGcird7u/pVso/vQtz+WdBIvo"
}
PLAY RECAP *************************************************************************************************************************************************************************
hosta.mydom.com : ok=4 changed=1 unreachable=0 failed=0
hostb.mydom.com : ok=2 changed=0 unreachable=0 failed=0
hostc.mydom.com : ok=2 changed=0 unreachable=0 failed=0
예를 들어 OS 버전을 비교하기 위해 텍스트 결과를 비교하기 위해 복잡한 명령을 저장하려는 경우 다음이 도움이 될 수 있습니다.
tasks:
- shell: echo $(cat /etc/issue | awk {'print $7'})
register: echo_content
- shell: echo "It works"
when: echo_content.stdout == "12"
register: out
- debug: var=out.stdout_lines
저는 Ansible의 초보자이지만 다음 솔루션을 제안합니다.
playbook.yml
...
vars:
command_output_full:
stdout: will be overriden below
command_output: {{ command_output_full.stdout }}
...
...
...
tasks:
- name: Create variable from command
command: "echo Hello"
register: command_output_full
- debug: msg="{{ command_output }}"
Ansible은 게으른 평가를 사용하기 때문에 작동해야합니다. 하지만 출시 전에 유효성을 확인하는 것 같아서 command_output_full.stdout
vars 에서 정의해야합니다 .
그리고 물론 vars
섹션에 그러한 변수가 너무 많으면 보기 흉하게 보일 것입니다.
참고URL : https://stackoverflow.com/questions/36059804/ansible-store-commands-stdout-in-new-variable
'code' 카테고리의 다른 글
제네릭 유형의 Bean을 Autowire하는 방법 (0) | 2020.11.14 |
---|---|
col-md-1.5를 부트 스트랩에 줄 수 있습니까? (0) | 2020.11.14 |
Angular 1.6.0 : "아마도 처리되지 않은 거부"오류 (0) | 2020.11.14 |
메서드가 'void'를 반환하는지 반영하여 확인하는 방법 (0) | 2020.11.14 |
달력에 대한 날짜 개체 [자바] (0) | 2020.11.14 |