스크립트 모듈을 사용하여 ansible에서 실행 중인 bash 스크립트가 있습니다. 그러나 이 경우 $1 역할을 하려면 특정 위치 매개변수를 서버 이름으로 지정해야 합니다. 나는 ansible에서 이 작업을 수행할 수 있는 방법을 찾으려고 노력하고 있지만 지금까지는 성공하지 못했습니다. 이 작업을 수행하려면 내장 모듈을 사용하면 좋겠지만 이 기능을 활성화하려면 대상 시스템에 selinux를 설치해야 하며 프로덕션 서버에서는 작동하지 않습니다. :(
Ansible 없이 스크립트를 실행하는 방법은 다음과 같습니다.
bash selinux-disabler-ans.sh <servername>
위의 내용은 자체적으로 잘 작동합니다. 하지만 Ansible 플레이북에서 이를 어떻게 제공합니까? 이것이 제가 아래 섹션에서 사용하고 있는 것입니다:
- name: Remediate/Disable selinux, it will only harm configurations right now, and should be disabled.
script: /opt/selinux-disabler-ans.sh
호스트 영역 전체에서 실행되므로 변경할 수 있어야 하기 때문에 스크립트의 매개변수를 하드코딩할 수는 없습니다. 현재 실행 중인 호스트를 사용하거나 --limit를 통해 지정하여 런타임에 위치 인수를 얻을 수 있었으면 좋겠습니다. 지금은 나만의 임시 자동화를 사용하여 이 스크립트를 실행하고 있지만 이 작업을 수행할 수 있으면 정말 좋겠습니다. 누구든지 아이디어가 있나요?
답변1
먼저 앤서블을 도와드리도록 노력하겠습니다. 변수를 사용할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.
- name: Remediate/Disable selinux, it will only harm configurations right now, and should be disabled.
script: /opt/selinux-disabler-ans.sh "{{ ansible_hostname }}"
플레이북의 "설정" 단계 중에 호스트에서 수집된 호스트 이름을 사용합니다. 원격 시스템에서 ansible이 수집하는 변수 보기여기. 물론 자신만의 변수를 설정할 수도 있습니다. 앤서블을 선택하세요온라인 문서- 매우 좋은!
이제 몇 가지 의견을 말씀드리겠습니다. 귀하의 스크립트가 매개변수를 서버 이름으로 사용하는 이유를 모르겠습니다. 에 따르면 참고하시기 바랍니다.문서스크립트 모듈은 로컬 스크립트(ansible을 실행하는 호스트에 로컬)를 가져와 원격 호스트에 복사하고 그곳에서 실행합니다. 따라서 아마도 이 인수가 필요하지 않을 수도 있습니다 :)
Ansible로 시작하는 경우 처음부터 역할이 포함된 플레이북을 시도해 보세요. 이는 구하기가 어렵지 않으며 보다 복잡한 환경에서 코드를 관리하는 데 큰 도움이 될 수 있습니다.