우리는 ansible을 사용하여 서버를 구축하기 위해 일부 파이프라인을 사용하고 있으며 작업 중 하나는 서버가 온라인인지 확인하는 것입니다(즉 프로덕션 서버가 예기치 않게 인벤토리 목록에 나타남을 의미). 포트 443을 확인하고 빌드 파이프라인을 중단합니다. 이는 프로덕션 또는 라이브 서버가 실수로 건드리지 않도록 하기 위한 것입니다. 아래 코드를 시도했습니다. 목적은 포트 443이 닫힐 때 플레이북을 "성공"하여 빌드 파이프라인의 다음 작업을 진행할 수 있도록 하는 것입니다.
- name: check server online or not
hosts: localhost
connection: local
tasks:
- name: check ESXI host connection to port 443
wait_for: host=ams-server-101 port=443 timeout=1
register: command_result
failed_when: "'Timeout' not in command_result"
- debug: var=command_result
그러나 이는 예상대로 작동하지 않았습니다. 따라서 우리는 다음과 같은 해결 방법을 사용했습니다(비활성화 방법).
shell: echo "QUIT" | nc -w 3 ams-server-101 443 > /dev/null 2>&1 && echo Pass || echo Fail
register: shell_result
failed_when: shell_result.stdout == "Pass"
어떤 아이디어가 있나요? (어쩌면 다른 모듈을 사용할 수도 있음)
답변1
이 모듈을 사용할 수 있습니다 fail
:
tasks:
- wait_for:
host: ams-server-101
port: 443
timeout: 1
register: https_port_check
ignore_errors: true
- fail:
msg: 'HTTPS port is open'
when: not https_port_check.failed
또는 Patrick이 제안한 것처럼 정말 훌륭하고 짧지만 사용자 정의 실패 메시지가 없습니다.
tasks:
- wait_for:
host: ams-server-101
port: 443
timeout: 1
register: https_port_check
failed_when: not https_port_check.failed
이렇게 중요한 점검을 위해서는 악의적인 실패 메시지로 사용자를 비난하는 것이 적절할 수도 있습니다.