%EB%A5%BC%20%EB%B0%98%ED%99%98%ED%95%98%EB%8F%84%EB%A1%9D%20%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
win_command
일반적으로 Ansible이 / win_shell
/ 를 사용하여 PowerShell 스크립트를 시작할 때 win_psexec
오류가 발생하지 않는 한 "변경됨"을 반환합니다. 물론 모든 스크립트가 무엇을 했는지 알 수 없기 때문입니다.
PowerShell 스크립트에서 모든 종료 코드를 반환할 수 있으므로 종료 코드 등을 통해 Ansible이 "ok" 상태를 반환하도록 필요한 변경 사항이 없음을 Ansible에 알리는 방법이 있습니까? 아니면 무슨 일이 있어도 항상 "변경됨"을 반환합니까(실패가 없다고 가정)?
답변1
찾은 것 같아요. 그만큼win_powershell모듈은 $Ansible
PowerShell 변수에 액세스하여 컨트롤러에 반환되는 정보를 수정할 수 있습니다.
로부터win_powershell선적 서류 비치:
$Ansible.Result
컨트롤러에 그대로 반환되는 값입니다.$Ansible.Diff
ansible.windows 1.12.0 릴리스에 추가되었으며 Ansible에서 해석할 수 있는 diff 결과로 설정되는 사전입니다.$Ansible.Changed
모듈이 변경되었는지 여부를 반영하기 위해 true 또는 false로 설정할 수 있습니다. 기본적으로 이는 true로 설정됩니다.$Ansible.Failed
스크립트가 오류를 컨트롤러에 다시 반환하려는 경우 true로 설정할 수 있습니다.$Ansible.Tmpdir
모듈이 완료된 후 정리되는 스크래치 위치로 사용할 임시 디렉토리의 경로입니다.$Ansible.Verbosity
이 플레이에 대한 Ansible의 자세한 수준을 보여줍니다. 스크립트가 자세한 정도에 따라 VerbosePreference/DebugPreference를 설정할 수 있도록 허용합니다. 1.9.0에 추가되었습니다.
답변2
간단히 말해서 의사 코드 예제로서 0
아무것도 변경되지 않은 경우, 4
변경된 사항이 있는 경우 및 문제가 발생한 경우 다른 코드를 사용하여 종료한다고 상상할 수 있는 rc 변형 시나리오를 기반으로 합니다.
- name: some shell task
ansible.windows.win_command: my_command
register: my_command
failed_when: my_command.rc | int not in [0,4]
changed_when: my_command.rc | int == 4
자세한 내용은 다음을 참조하세요.플레이북의 오류 처리
엄격하게 정보를 제공하고 아무것도 변경하지 않는 명령의 경우 changed_when: false
완벽하게 허용됩니다.