커맨드 라인에서 가변 플레이 북에 변수를 전달하려면 어떻게해야합니까?


답변:


308

문서 읽기이 샘플을 제공 하는 명령 줄에 변수 전달 섹션 이 있습니다.

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

다른 예제는 JSON 문자열 (≥ 1.2) 또는 파일 (≥ 1.3) 에서로드하는 방법을 보여줍니다.


33
또한로 정의 된 --extra-vars변수는 플레이 북 내에 정의 된 변수보다 우선합니다.
체크섬

5
참고 사항 (문서에서) : key=value구문 을 사용하여 전달 된 값 은 문자열해석됩니다 . 문자열이 아니어야하는 항목 (부울, 정수, 부동 소수점, 목록 등)을 전달해야하는 경우 JSON 형식을 사용하십시오. 예를 들면 다음과 같습니다.--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

159

다른 답변에는 명령 줄 변수를 전달하는 방법이 나와 있지만 액세스하는 방법은 나와 있지 않습니다.

--extra-vars "version=1.23.45 other_variable=foo"

yml 파일에서 다음과 같은 방법으로 범위가 지정된 변수에이를 할당합니다.

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

명령 행 인수를 사용하는 대안은 세션 내에 이미 정의 된 환경 변수를 사용하는 것입니다. 다음과 같이 사용 가능한 yml 파일 내에서이를 참조 할 수 있습니다.

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}

29
당신이 무슨 말을하는지 모르겠습니까? 내 대답 은 명령 줄 플래그 --extra-vars yaml 구성 내에서 대답을 참조 하는 방법을 참조하여 이전에 수락 된 대답을 확장 합니다. 그런 다음 다른 방법을 제공합니다.
GreensterRox

1
여기서 질문은 특히 변수 를 명령 줄을 통해 전달하는 것 입니다. 그것이 바로 질문 / 답변 및 관련 링크이기 때문에 더 나은 이유입니다. 질문에 대한 주석으로 할 수 있고 관련 링크가 있습니다.
Édouard Lopez

43
확장 된 답변이 도움이되었습니다. 매개 변수 전달 방법을 아는 것의 일부로 전달 된 변수를 참조하는 방법을 확실히 알고 있습니다. 그렇지 않으면 전달하지 않고 변수를 전달한다고 선언합니다. 객체를 전달하려면주는 사람과받는 사람이 필요합니다. 변수를 전달하려면 매개 변수 선언과 매개 변수 사용법이 필요합니다.
초에 conteh

lookup('env', SOMETHING)12 요소와 일치합니다.
zx1986

1
변수 이름을 변경해야 합니다. 자체 version: {{ version }}정의와 같이 잘못 version되었습니다.
Minh Nghĩa

41
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"

25
-e플래그의 짧은 형태이다--extra-vars
에두아르 로페즈

4
변수 파일을 전달할 수 있습니까?
OpsEco

13
@AniruddhaJawanjal 그렇습니다--extra-vars "@some_file.json"
AlanSE

1
@OpsEco @AlanSE 파일에서 변수를 전달하는 경우 파일에 --extra-vars없는 변수를 전달하려면 두 번째 플래그가 필요 합니다. 예를 들어--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
bonh

내가 찾던 것이 @bonh 감사합니다


31

어떤 이유로 든 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다. Ansbile 2.2.0의 플레이 북에 몇 가지 추가 변수를 전달해야하므로 이것이 작동하는 방식입니다 (각 변수 앞에 -e 옵션을 참고하십시오).

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2

4
-e는 짧은 형식입니다--extra-vars
Édouard Lopez

당신이 자신에 추가 바르를 지정할 수 있음을 입증하기위한 @LXCdev KohaLappi 한 -e플래그
ctlockey

단일 플래그를 사용하여 여러 변수를 정의 할 수도 있습니다.-e "firstvar=false second_var=value2"
Nils Breunese

같은 문제입니다. 단일 플래그를 가진 여러 변수는 작동하지 않습니다. 왜 궁금해?
Bret

14
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

yml 파일에서 다음과 같이 사용할 수 있습니다

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

또한, --extra-vars하고 -e있는 같은, 당신은 그들 중 하나를 사용할 수 있습니다.


4
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

여기서 변수는 'pathoftsfiles'및 'folder'라는 이름으로 사용됩니다. 이제이 변수에 대한 값은 아래 명령으로 제공 할 수 있습니다

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

참고 : 쉘 명령에서 변수에 값을 전달할 때는 역 쉼표를 사용하지 마십시오


2
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"

2

쉘 환경 변수를 사용하려는 경우에도 도움이되었습니다.

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"


1

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

아래 플레이 북에서 위의 명령을 사용할 수 있습니다.

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.