2017-01-02 9 views
2

ansible 2.1.2.0Ansible - 각본 수준에서 vars_prompt 작동하지 않는 경우 조건

은 내가 솔루션 Ansible vars_prompt 기능도 할 수 있는지 여러분 모두와 함께 확인하는 것을 시도하고있는 이곳 상황이 및 when 조건부.

Ansible라는이 기능이 있습니다 vars_prompt을 나는

PS를 when 조건 (우리가 일반적으로 작업이나 각본 수준의 행동에서 작업에 사용 when: ...)과 함께 클럽이 원하는 : 내 질문보다 다르다 이 게시물 : Ansible to Conditionally Prompt for a Variable? 즉 내 vars: 변수는 어떤 컴퓨터의 OS ENV 변수에 종속되지 않습니다. 제 경우에는 vars: 변수에 대한 간단한 하드 코드 값이 있습니다. 나는 또한 기본 플레이 북 레벨 (그리고 태스크 레벨이 아님)에서 when 조건을 실행 중이다.

는 난 할 노력하고있어 명령 줄에서, 사용자가 ansible-playbook install_tool.yml ... ...

작업 공간에서 --extra-vars "install_tool=true"와/ansible /install_tool.yml 호출 한 경우에만, 변수 값을 입력을위한 사용자에게 메시지를 표시하는 것입니다 내가 가진 :

- hosts: all 
    become: true 
    gather_facts: false 

    vars: 
    instance: test 
    #install_tool: false 
    company_api_url: DUMMY_INVALID_URL 

    vars_prompt: 
    - name: "company_api_url" 
     prompt: "Enter Company API URL: " 
     default: "https://{{ instance }}.company.com" 
     private: no 
     when: install_tool == "true" and company_api_url == "DUMMY_INVALID_URL" 
     # or 
     #when: ("{{ install_tool }}" == "true" and "{{ company_api_url }}" == "DUMMY_INVALID_URL") 

    pre_tasks: 
    - debug: msg="install_tool = {{ install_tool }} and instance = {{ instance }}" 
     when: install_tool == "true" 

내 질문 : 나는 무도회에 유효한 대체 default 값이 위의 조건 프롬프트 작업을 (얻을 수있는 방법
pt 변수) SKIPinstall_tool 변수에 따라 사용자에게 프롬프트가 표시됩니까?

나의 이해 : 최고 수준의 각본 파일 ( install_tool.yml )에서 , 내가 test 같은 값을 가진 변수 instance를 정의하고있다. vads_prompt 섹션의 default 값이 test을 선택하지 않고 해당 값을 입력란에 정의 된 값으로 대체 한 이유는 무엇입니까? - 또는 사용자가 의 변수에 instance 변수를 전달하는 경우 예 :--extra-vars "instance=qa"? [https://qa.company.com]으로 기본값을 원한다면 어떻게 할 수 있습니까?) 구문에 상관없이 오류가 표시되지 않습니다.

나는 다음과 같은 출력을 받고 있어요 (하지만 같은 치환 URL 값을 기다리고 있었다 : [https://test.company.com]) :

실행 :

install_toolfalse로 설정하거나 명령 줄에서 통과 할 때 여전히 심지어하라는 것
$ ansible-playbook -i "localhost," --connection=local install_tool.yml --extra-vars "install_tool=false instance=qa" 

또는

$ ansible-playbook -i inventory -l localhost install_tool.yml --extra-vars "install_tool=false" 
... 
.....some lines here 
... 
PLAYBOOK: install_tool.yml ******************************************* 
1 plays in install_tool.yml 
Enter Company API URL: [https://{{ instance }}.company.com]: 

012을 사용하는 것으로조건 내에서 vars_prompt 구역 아래// - name: company_api_url 변수에 대해 구문 문제 등으로 인해 오류가 발생하지 않았으므로 (즉, Anipal은 잘못되었다고 생각하지 않습니다.) WHY, Anabilities는 계속 입력하라는 메시지를 표시합니다. vars_prompts 변수 위에, 나는 --extra-vars "install_tool=false"- 또는을 통과하고있어 경우에도 경우 I 주석 라인 : install_tool: false 섹션 vars:에서?

PS :when: ... 상태가 성공적으로 install_tool 사실이다 pre_tasks 섹션 즉 위해 일하고, 그것은 그 두 변수의 값을 보여줍니다 install_tool false로 설정하면 다음이 - debug 단계를 실행하지 않고 그것을 생략 (예상).

감사합니다.

+0

하나의 질문에 답을하고 재현 가능한 예를 제시하십시오. – ceving

+0

@ceving 내 게시물이 바뀌 었습니다. 도움이됩니까? 나는 약간의 설명을 자세하게 제공 할 생각이었다. 위의 install_tool.yml은 마지막에 치환 된'default' 값을 보여 주며'install_tool'이 false로 설정되었을 때 건너 뛰는 프롬프트 부분입니까? –

+0

https://github.com/ansible/ansible/issues/19777 –

답변

2

프롬프트 vars here에 대해 지원되는 모든 속성을 검사 할 수 있습니다.

when 경고문은 지원되지 않습니다. 그리고 절대로 없었습니다.

프롬 트 된 vars의 템플리트 된 기본값은 not supported입니다.

vars 프롬프트를 방지하는 유일한 방법은 extra_vars를 통해 문제의 변수를 전달하는 것입니다. 예를 들어, -e company_api_url=my_custom_url을 전달하면 Ansible이 메시지를 무시합니다.

+0

콘스탄틴에 동의합니다. 조건부 프롬프트를 사용하는 것이 좋을 것입니다. 예를 들어 전달 된 값이 사용자가 원하는 것이 아닌 경우 (예 : Typos/Values는 시간 창에 따라 다릅니다), Ansible 자동화는 적어도 대화식 실행을 위해 사용자에게 충분한 지능을 나타냅니다 . 이 기능/기능을 추가 할 계획이 있습니까? 비대화 형 실행에 동의합니다. AnSO는 실행 중 사용자에게 프롬프트를 표시하지 않습니다. –

+0

저는 유능한 팀 개발자가 아니기 때문에 어떤 계획에 대해서도 말할 수 없습니다. 죄송합니다 :) 그러나 나는 가능한 최소한의 대화식 행동을지지합니다. 많은 플레이 북의 시작 부분에'assert' 태스크를 사용하여 플레이 북 실행 중에 필요한 모든 데이터가 있는지 확인하고 사용자가 입력 데이터를 수정하는 데 의미있는 오류 메시지를 제공합니다. –

+0

동의합니다. 그런 경우에는 빨리 실패해야합니다. –