Ansible Playbook에서 문자열을 정수로 변환
powershell 명령에서 카운트를 얻고 변수에 등록합니다. 나는 언제 조건에서 그 카운트를 사용해야합니다. 때 조건에서도 사용하기 전에 int로 변경했습니다. 여기서 카운트가 0이지만 여전히 해당 작업 (메일 알림)을 건너 뛰고 있습니다. 누군가 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있습니까? 아래는 내가 실행하는 코드입니다.
- name: Get message_count
shell: echo "{{ (output.stdout | from_json).MessageCount }}"
register: message_count #message_count is Zero here
delegate_to: localhost
- set_fact:
countt: "{{ message_count | int}}"
#set_fact를 사용하여 조건으로 전달하기 전에 정수로 변환을 시도했습니다.
- debug: var=countt
- name: send mail notification
mail:
host: abc.zzzz.net
port: 25
from: <[email protected]>
to:
- [email protected]
subject: Test mail sent from core server
body: Test mail sent from core server
delegate_to: localhost
when: countt==0
답변
6 RomanSpiak
작동시키기 위해 내가 한 일은 다음과 같습니다.
---
- name: answer serverfault
hosts: all
become: yes
tasks:
- name: Get message_count
shell: ls /tmp/empty | wc -l
register: tmp_count
delegate_to: localhost
- debug: var=tmp_count.stdout
- name: do something else when tmp_count.stdout == 0
shell: echo "I am doing it"
delegate_to: localhost
when: tmp_count.stdout | int == 0
다음은 플레이 북 실행 결과입니다.
ripper@mini-ripper:~/Devel/ansible$ ansip ./test_playbook.yml -i localhost,
PLAY [answer serverfault] **************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
[WARNING]: Platform linux on host localhost is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [localhost]
TASK [Get message_count] ******************************************************************************************************************************************************************************************
changed: [localhost -> localhost]
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"tmp_count.stdout": "0"
}
TASK [do something else when tmp_count.stdout == 0] ***************************************************************************************************************************************************************
changed: [localhost -> localhost]
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
요약하자면 :
- 레지스터 변수가 더 복잡한 구조가 아닌지 확인해야합니다. 일반적으로
- 다른 사용자 지정 사실이 필요하지 않습니다.
- 조건
{{ }}
에서 사용하지 않고 변수를 변환해야합니다.when