2016-05-27 20 views
5

Używanie Ansible Mam problem z zarejestrowaniem zmiennej w żądany sposób. Korzystając z poniższej implementacji, zawsze będę musiał wywoływać .stdout na zmiennej - czy jest jakiś sposób, żeby zrobić to lepiej?Zarejestruj właściwość zmiennej podlegającej zmianie

Mój poradnik: Uwaga na niechciane użycie .stdout - Po prostu chcę mieć możliwość użycia zmiennej bezpośrednio, bez wywoływania propery ...?

--- 
- name: prepare for new deployment 
    hosts: all 
    user: ser85 

    tasks: 

    - name: init deploy dir 
    shell: echo ansible-deploy-$(date +%Y%m%d-%H%M%S-%N) 
    # http://docs.ansible.com/ansible/playbooks_variables.html 
    register: deploy_dir 

    - debug: var=deploy_dir 

    - debug: var=deploy_dir.stdout 

    - name: init scripts dir 
    shell: echo {{ deploy_dir.stdout }}/scripts 
    register: scripts_dir 

    - debug: var=scripts_dir.stdout 

Wyjście kiedy wykonać Playbook:

TASK [init deploy dir] ********************************************************* 
changed: [123.123.123.123] 

TASK [debug] ******************************************************************* 
ok: [123.123.123.123] => { 
    "deploy_dir": { 
     "changed": true, 
     "cmd": "echo ansible-deploy-$(date +%Y%m%d-%H%M%S-%N)", 
     "delta": "0:00:00.002898", 
     "end": "2016-05-27 10:53:38.122217", 
     "rc": 0, 
     "start": "2016-05-27 10:53:38.119319", 
     "stderr": "", 
     "stdout": "ansible-deploy-20160527-105338-121888719", 
     "stdout_lines": [ 
      "ansible-deploy-20160527-105338-121888719" 
     ], 
     "warnings": [] 
    } 
} 

TASK [debug] ******************************************************************* 
ok: [123.123.123.123] => { 
    "deploy_dir.stdout": "ansible-deploy-20160527-105338-121888719" 
} 

TASK [init scripts dir] ******************************************************** 
changed: [123.123.123.123] 

TASK [debug] ******************************************************************* 
ok: [123.123.123.123] => { 
    "scripts_dir.stdout": "ansible-deploy-20160527-105338-121888719/scripts" 
} 

Każda pomoc lub spostrzeżenia docenione - dziękuję :)

Odpowiedz

5

Gdybym zrozumiał to dobrze chcesz przypisać deploy_dir.stdout do zmiennej, która możesz użyć bez klucza stdout. Można to zrobić za pomocą modułu set_fact:

tasks: 
    - name: init deploy dir 
    shell: echo ansible-deploy-$(date +%Y%m%d-%H%M%S-%N) 
    # http://docs.ansible.com/ansible/playbooks_variables.html 
    register: deploy_dir 

    - set_fact: my_deploy_dir="{{ deploy_dir.stdout }}" 

    - debug: var=my_deploy_dir 
+0

Dziękujemy, działa! W rzeczywistości ponownie użyłem nazwy zmiennej {{deploy.dir}}, w której użyłeś {{mój_deploy_dir}} bez żadnych problemów. Zastanawiam się, czy Ansible używa tej samej lokalizacji do przechowywania zdefiniowanych przez użytkownika faktów i zmiennych ... Bez względu na to działa - dziękuję :) –