2016-04-17 16 views
2

私は、既存のユーザーのパスワードをAnsibleで変更しようとしていますが、ユーザーが既に存在する場合に限ります。私は新しいユーザーを作りたくありません。良い方法はありますか?既存のユーザーのパスワードを変更するにはどうすればよいですか?

vars: 
myusers: 
    - { name: 'user1', update_pass: 'passwd' } 
    - { name: 'user2', update_pass: 'passwd' } 
    - { name: 'user3', update_pass: 'passwd' } 

tasks: 
- name: check exist 
    shell: /usr/sbin/usermod {{ item.name }} 
    with_items: myusers 
    register: result 
    failed_when: result.rc not in [6,2] 
    changed_when: result.rc != 6 

- name: change passwd 
    user: name={{ item.name }} password={{ item.update_pass }} update_password=always 
    when: result|changed 
    with_items: myusers 
+0

あなたが開始されたアプローチを使用することができます。 "change passwd"タスクの結果変数を繰り返し処理するだけで、shellコマンドの実行ごとにitemの値が入ります。また、プレイリストが終了しないように、「check exists」タスクに「ignore_results」を追加する必要があります。 – Petro026

+0

@ Petro026コメントありがとうございます。今、私は、ローカルシェルコマンドを使用して、 "--extra-vars:@ userX.yml'と" for - loop - extra-vars "オプションを使用します。タスクの "ignore_results"、私は挿入行を理解していない.....申し訳ありません、それは初心者ですが、それはオンライン文書に表示されますか? – techu

答えて

0
vars_prompt: 
- name: user_name 
prompt: Enter the user name for password reset 
private: no 
- name: pass 
prompt: Enter the password 
tasks: 
- name: Change {{ user_name }} password 
user: name={{ user_name }} password={{ pass|password_hash('sha512') }} update_password=always 
+1

ここでより良い書式を設定すると、これを読みやすくすることができます。 – Grimmy

+0

ようこそスタックオーバーフロー!このコードスニペットは問題を解決するかもしれませんが、[説明を含めて](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – Carpetsmoker

関連する問題