몇 가지 가능한 트릭



이 블로그 게시물에서는 Ansible에 대한 몇 가지 (기본) 요령을 공유합니다 😃

물리는 것을 예방할 수 있습니다 😷

변수를 사용할 때 인용



변수를 사용하지 않을 때는 다음과 같이 인용하거나 인용하지 않을 수 있습니다.

- name: Copy
  copy:
    src: foobar
    dest: /tmp/foobar


또는 (따옴표 포함):

- name: Copy
  copy:
    src: "foobar"
    dest: "/tmp/foobar"


그러나 변수를 사용하는 즉시 따옴표를 사용해야 합니다!

- name: Copy
  copy:
    src: "{{ filename }}"
    dest: "/tmp/{{ filename }}"


모든 ansible 버전이 이에 대해 동일한 동작을 하는 것은 아닙니다! 최신 버전의 Ansible은 더 유연하지만 완전히 처리할 수는 없습니다(변수가 배치된 위치에 따라 다름).

자세한 내용은 YAML gotcha을 참조하세요.

명령줄에서 추가 변수를 전달할 때 추가 인용 부호


--extra-vars (또는 -e )를 사용하여 명령줄에서 변수를 전달할 때 공백을 보호하기 위해 추가 따옴표를 추가해야 합니다.

                            # here v          and here v
$ ansible-playbook playbook.yml -e 'protectme="foo bar"'
                            #     to protect this ^


쉬 잡았다



이것은 깨졌습니다:

---
- hosts: servers
  tasks:
  - name: Broken
    shell: '[[ -z "" ]] && true'


왜요? /bin/sh에 의해 실행되기 때문에 ... bash가 아닙니다!

다음과 같이 sh 호환 버전으로 변환할 수 있습니다.

---
- hosts: servers
  tasks:
  - name: Working
    shell: 'test -z "" && true'


또는 args에서 실행 파일을 지정합니다.

--------
- hosts: servers
  tasks:
  - name: Broken
    shell: '[[ -z "" ]] && true'
    args:
      executable: /bin/bash


변수의 우선 순위



일부는 분명하지만 전부는 아닙니다 😁

여기 내 알림이 있습니다.
  • CLI 추가 변수-e variable="foo"가 재정의됨...
  • 다음을 재정의하는 역할 변수( roles/common/vars/main.yml )...
  • playbook vars ( playbook.yml ) 다음보다 우선 순위가...
  • 역할 기본 변수( roles/common/default/main.yml )

  • 자세한 내용은 complete list of precedence에 대한 공식 문서를 확인하십시오.

    초기화 후 변수 편집



    모듈set fact로 이 작업을 수행할 수 있습니다!

    - name:
      set_fact:
        var1: "new value"
    


    결론



    그게 트릭의 전부입니다.

    행복한 프로비저닝! 😃

    좋은 웹페이지 즐겨찾기