실행 가능한 전역 변수


8

ansible을 사용하여 서버 클러스터를 만들고 싶습니다.

하나의 메인 플레이 북에는 하위 플레이 북이 포함되어 있습니다.

- include: playbook_commandserver.yml
- include: playbook_agent.yml

playbook_commandserver.yml에서 aws에 명령 서버를 만듭니다. 그런 다음 set_fact모듈을 사용 하여 명령 서버의 DNS 이름을 기억 하는 역할을 트리거합니다 .

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

commandserver사실은 아니지만 같은 작전에서, 같은 플레이에서 사용할 수 있습니다 .. 혼자하자 playbook_agent.yml, 그이 포함됩니다, 이후. 그리고 그것은 바로 거기에 있으며, 그 명령 서버 사실에 액세스해야합니다.

그렇다면 전체 ansible-run에 유효한 하나의 설정 / 저장 변수는 어떻게됩니까?

나는 이것을 발견했다 : https : //.com/questions/26732241/ansible-save-registered-variable-to-file 그러나 나에게 이것은 못생긴 해킹처럼 보입니다.

이 문제에 대한 더 나은 해결책이 없습니까? 전체 실행에 유효한 변수를 설정하는 방법이 없습니까?

답변:


12

예, 가능합니다. set_fact모듈 로 팩트를 설정하면 "hostvars"를 통해이 팩트에 액세스 할 수 있습니다. 따라서 변수 명령 서버를 다음과 같이 정의하면

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

그런 다음 같은 방식으로 포함 된 다른 플레이 북에서이 변수에 액세스 할 수 있습니다 (디버그 모듈은 예제 일 뿐임).

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.