set_fact를 ansible 역할의 vars로 교체

set_fact를 ansible 역할의 vars로 교체

Ansible 플레이북이 있습니다. 사실 없이 역할을 바꿔야 합니다. role/default/main.yml에 사용되는 변수에 대해 이 코드를 어떻게 다시 작성할 수 있습니까?

감사해요

---

- name: test my group
  hosts: my-group


  tasks:
  - name: test1 fact set
    set_fact:
         var1: 2
         var2: 3
    when: hostname is test1 

  - name: test2 fact set
    set_fact:
         var1: 3
         var2: 3
    when: hostname is test2

  - debug: var="var1 + var2"


       

       

답변1

호스트별 변수를 설정하려면 host_vars플레이북이나 매니페스트에 인접한 디렉터리에 있는 호스트 이름을 딴 파일에서 설정할 수 있습니다. 예를 들어 다음 레이아웃이 제공됩니다.

.
├── host_vars
│   ├── test1.yaml
│   └── test2.yaml
└── roles
    └── myrole
        ├── defaults
        │   └── main.yaml
        └── tasks
            └── main.yaml

그러면 정의된 변수가 호스트 등 host_vars/test1.yaml으로 설정됩니다 .test1

그렇지 않은 경우 호스트별 변수를 설정하는 유일한 방법은 질문에 표시된 조건 set_fact과 같은 include_vars작업을 사용하는 것입니다.when


defaults/main.yaml역할 파일에서 이 작업을 꼭 수행해야 하는 경우 다음을 수행할 수 있습니다.

var1: '{% if inventory_hostname == "test1" %}2{% else %}3{% endif %}'

그러나 변수의 개수나 호스트의 개수가 많으면 읽기가 어렵습니다.

관련 정보