2016-12-28 3 views
2

Я хотел бы выбрать конкретную переменную, основанную на пользовательском входе в загрузочную книгу Ansible. В частности, я хотел бы попросить ввести данные пользователя в месте расположения сервера, а затем выполнить определенное действие на основе ввода.Ansible - использование пользовательского ввода для выбора переменной

Это текущий анзибль сборник пьес:

- hosts: all 
     remote_user: root 
     gather_facts: True 
     vars: 
     loc1: "10.13.1.140" 
     loc2: "10.13.1.141" 
     loc3: "10.13.1.142" 

    vars_prompt: 
     - name: location 
     prompt: "Location of server? Input options: loc1/loc2/loc3" 
     private: no 

    tasks: 
     - name: Test connectivity to user selected location 
     wait_for: host={{ vars.location }} port=9999 delay=0 timeout=10 state=started 

выход при выполнении пьес:

[[email protected] cfengine]# ansible-playbook testpoo.yaml -i /tmp/test 
SSH password: 
Location of server? Input options: loc1/loc2/loc3: loc2 

PLAY  *************************************************************************** 

TASK [setup] ******************************************************************* 
ok: [hostname.domain.com] 

TASK [Test connectivity to user selected location] ***************************** 
fatal: [hostname.domain.com]: FAILED! => {"changed": false, "elapsed": 10, "failed": true, "msg": "Timeout when waiting for loc2:9999"} 

PLAY RECAP ********************************************************************* 
hostname.domain.com : ok=1 changed=0 unreachable=0 failed=1 

Я хотел бы знать, как и лучший способ связать для чтения в пользовательском вводе местоположение с фактическим значением (IP-адресом) местоположения, которое определено в верхней части раздела переменных. Возможно, что-нибудь или что-то еще?

ответ

2

Ваша задача: loc2, поэтому сообщение Timeout when waiting for loc2:9999.

Вместо этого использовать host={{ vars[location] }}.

Сравните вывод из следующих задач:

tasks: 
    - name: Show the value user entered 
    debug: var=vars.location 

    - name: Use the entered value as an index 
    debug: var=vars[location] 

Результат (сокращенно):

TASK [Show the value user entered] ********************************************* 
ok: [localhost] => { 
    "vars.location": "loc2" 
} 

TASK [Use the entered value as an index] *************************************** 
ok: [localhost] => { 
    "vars[location]": "10.13.1.141" 
} 
+0

Он работал как шарм. Спасибо за помощь!!! – nickyt4free

Смежные вопросы