私は、ansibleプレイブックを介して実行され、stdoutを介して次の出力を返すPythonスクリプトを作成しました。
- { username: ansible, admin: yes}
- { username: test, admin: no }
次に、出力を変数「users」に保存し、「with_items」(または新しい「loop」条件付き)を使用して、各ユーザーに適切なアクセス許可を個別に割り当てるために変数を反復処理します。
- name: execute python script
command: "python3 /tmp/parse_string.py --user_permissions={{ user_permissions }}"
register: output
- name: register
set_fact:
users: "{{ output.stdout }}"
- name: output
debug: msg="{{ users }}"
- name: Add user to group -admin
user:
name={{ item.username }}
groups=admin
append=yes
state=present
when: "item.admin == yes"
with_items: '{{users}}
ただし、プレイブックを起動すると、変数「users」には属性「username」がないと表示されます。
TASK [create_users : output] ***************************************************
ok: [ansible] => {
"msg": "- { username: ansible, admin: yes }\n- { username: test, admin: no }\n- { username: test2, admin: no }"
}
TASK [create_users : Add user to group -admin ***************
fatal: [ansible]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'username'\n\nThe error appears to be in '***': line 29, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: \n ^ here\n"}
誰かがこの事件で私を助けることができますか?
BR
users
varを文字列に設定しています。この文字列はデータ構造のyaml表現であることが起こりますが、ansibleには現時点ではそれについての手がかりがありません。
要件を達成するには、その文字列をyamlとして解析し、結果を登録する必要があります。幸いなことに、その目的のためのfrom_yaml
フィルターがあります
set_fact
タスクを次のように変更するだけで、すべてが期待どおりに機能するはずです。
- name: register
set_fact:
users: "{{ output.stdout | from_yaml }}"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加