2016-07-13 7 views
0

tasks/main.ymlファイルからdefaults/main.yml変数を動的に設定します。デフォルトのdefaults/main.ymlの値をtasks/main.ymlから動的に設定する方法

内容は、タスクの

username: 
password: 

内容をmain.yml-/main.yml -

- name: Get username and password 
    shell: python some_script.py 
    register: result 

さて、結果は私のユーザー名とパスワードが含まれています。デフォルト/ main.ymlの中でユーザ名とパスワードを更新する簡単な方法はありますか?現在、我々は

- name: Retrieve username 
    shell: echo {{ item | regex_replace('^.*:(.*)$', 'username:\\1') }} >> playbooks/defaults/main.yml 
    with_items: result.stdout_lines[1] 

のようにこれをやっている

output should be 
username: bob 
password: getmein 

ちょうど離れlineinfileを使用してから、それを行うための簡単な方法があるかどうかを知りたいと思いました。

変数がdefaults/main.ymlに設定されている場合は、{{username}}が直接使用できます。しかし、動的に逆方向に変数を設定するにはどうすればいいですか?

+1

なぜあなたは 'defaults/main.yml'に書き込む必要がありますか?プレイブック/ロールでファクトとして設定しないでください(必要に応じて出力を隠すために 'no_log'パラメータを使用してください)?不可能な優先順位ではデフォルト値が最も低くなります。パスワードをロールのデフォルトにハードコードするシナリオは想像できません。理想的には、パスワードや機密情報を、 'ansoft-vault'で暗号化されたグループ変数やホスト変数ファイルに置きます。 – thankyour

答えて

0

ユーザー入力を読み取るには、[Ansible Prompts](http://docs.ansible.com/ansible/playbooks_prompts.html)を使用する方がよいと思います。そうすることで、ユーザーの入力を読み取るためにスクリプトを呼び出す必要はありません。

--- 
- hosts: all 
    vars_prompt: 
    - name: username 
     prompt: "enter username" 
     private: no 
    - name: password 
     prompt: "enter password" 
     private: yes 

    tasks: 
    - name: print 
     debug: 
     msg: "username = {{ username }}, password = {{ password }}" 
関連する問題