2017-06-12 16 views
0

ユーザーのsudoパスワードが複数のサーバーで同じでない環境があります。動的ルックアップが可能です

  • host1.sudopwd
  • host2.sudopwd:これは、セキュリティ機能:-D私は、ファイル内(の時点で脇ボールト/セキュリティ)sudoのパスワードを保存したい

    として見ることができます私ansible脚本で

  • ...
  • hostn.sudopwd

、私はそのようなものを使用しています:

--- 
- hosts: all 
tasks: 
- include: '{{ inventory_hostname }}' 
    vars: 
    ansible_become: true 
    ansible_become_user: root 
    ansible_become_pass: "{{ lookup('file','{{ inventory_hostname }}.sudopwd') }}" 

ホストごとに1つのファイルがあるとうまく動作します。 これをもっと「ダイナミック」にするにはどうすればよいですか?

私はsearchsudopwdというスクリプトを持っているとします。これは単純なbashスクリプトです(実際にはどの言語でも可能です)。

#!/usr/bin/env bash 
if [[ "$1" == "host1" ]]; then 
    echo "pwd1" 
elif [[ "$1" == "host2" ]]; then 
    echo "pwd2" 
else 
    echo "default pwd" 
fi 

どうすればいいですか?プレイブックで何を変更して機能させる必要がありますか?

私は何かのように試してみました:

--- 
- hosts: all 
tasks: 
- include: '{{ inventory_hostname }}' 
    vars: 
    ansible_become: true 
    ansible_become_user: root 
    ansible_become_pass: "{{ item }}" 
    with_lines: searchsudopwd '{{ inventory_hostname }}' 

しかし、それは動作しません...

私の考えがうまくいかない場合は、「デフォルト」パスワードのように持ってする方法があります特定のホストのパスワードのみを取得しますか?

ご協力いただきありがとうございます。

答えて

1

私は、必要に応じて個別のhost_varsファイルにパスワードを入れて、group_vars/allにデフォルトを入れるほうがよいと思います。それをすべて無差別に保管してください。 (。しかし、その後、あなたがAnsible Vaultの共有パスワードを持っている)

私は、私はあなたのスクリプトを変更し、「ML01」と呼ばれるホストを持っている:

$ cat /home/jscheible/searchsudopwd 
#!/usr/bin/env bash 
if [[ "$1" == "ml01" ]]; then 
    echo "pwd1" 
elif [[ "$1" == "host2" ]]; then 
    echo "pwd2" 
else 
    echo "default pwd" 
fi 

パスワードを持つローカルプログラムは、ちょうどそれを呼び出すことを呼び出すにはdelegate_to: localhostと劇中で:ここ

$ cat show_pwd 
--- 
- hosts: all 
    connection: ssh 
    gather_facts: false 
    tasks: 
    - name: Do passwd lookup 
    command: /home/jscheible/searchsudopwd {{ inventory_hostname }} 
    delegate_to: localhost 
    register: result 

    - name: Show results 
    debug: 
     var: result.stdout 
    delegate_to: localhost 

私のテストの結果は以下のとおりです。

$ ansible-playbook show_pwd 

PLAY [all] ********************************************************************* 

TASK [Do passwd lookup] ******************************************************** 
changed: [al01 -> localhost] 
changed: [ml01 -> localhost] 

TASK [Show results] ************************************************************ 
ok: [al01 -> localhost] => { 
    "result.stdout": "default pwd" 
} 
ok: [ml01 -> localhost] => { 
    "result.stdout": "pwd1" 
} 

PLAY RECAP ********************************************************************* 
+0

は、私が「host_vars」について知りませんでした:-)ありがとうございます!私はそれをテストし、私が期待していたように動作します! あなたの答えの他の部分はチェックしませんでしたが、host_vars/group_varsの解決策に比べて "複雑すぎる"ようです –

+0

十分な評判を得たら、私はあなたの答えを+1します! –

1

便利ですlookup pluginsです。あなたが実際にちょうどpipeのルックアップを使用してfileのルックアップを置き換えることができ

ansible_become_pass: "{{ lookup('pipe','/path_on_ansible_machine/searchsudopwd '+inventory_hostname) }}" 
関連する問題