私は自分の役割の中でlinux users
の作成をカスタマイズしています。自分の役割のユーザーにhome_directory
、group_name
、name
、password
をカスタマイズさせる必要があります。
デフォルト値に対処するためのより柔軟な方法があるかどうか私は思っていました。
私は以下のコードが可能であることを知っています:
- name: Create default
user:
name: "default_name"
when: my_variable is not defined
- name: Create custom
user:
name: "{{my_variable}}"
when: my_variable is defined
しかし、私が述べたように、たくさんのオプションの変数があり、これはたくさんの可能性を生み出します。
上記のコードのようなものはありますか?
user:
name: "default_name", "{{my_variable}}"
name="default_name"
が定義されていない場合、コードはmy_variable
を設定する必要があります。
すべての変数をdefaults/main.yml
に設定して、そのようにユーザーを作成することができます。
- name: Create user
user:
name: "{{my_variable}}"
しかし、これらの変数は本当に大きなハッシュの中にあり、そのハッシュの中にはデフォルトにはできないハッシュがいくつかあります。
Jinjaのdefault
を使うことができます。
- name: Create user
user:
name: "{{ my_variable | default('default_value') }}"
完全に関連しているわけではありませんが、undefined
とempty
(たとえば、my_variable:
)の両方の変数をチェックすることもできます。 (注:Ansibleバージョン> 1.9でのみ機能します。参照: link )
- name: Create user
user:
name: "{{ ((my_variable == None) | ternary('default_value', my_variable)) \
if my_variable is defined else 'default_value' }}"
あなたがアイテムをループしたいシングルプレイがあるなら、group_vars/allまたは他のどこかに意味があるようにそのリストを定義してください:
all_items:
- first
- second
- third
- fourth
それからあなたの仕事はこのように見えることができます:
- name: List items or default list
debug:
var: item
with_items: "{{ varlist | default(all_items) }}"
VarlistをJSON配列として渡します。
ansible-playbook <playbook_name> --extra-vars='{"varlist": [first,third]}'
その前に、varlistの各項目がall_itemsにもあることを確認するタスクも必要です。
- name: Ensure passed variables are in all_items
fail:
msg: "{{ item }} not in all_items list"
when: item not in all_items
with_items: "{{ varlist | default(all_items) }}"
ルックアップを使用して環境からのデフォルトの読み取りを設定する場合は、defaultの2番目のパラメータもtrueに設定します。
- set_facts:
ansible_ssh_user: "{{ lookup('env', 'SSH_USER') | default('foo', true) }}"
複数のデフォルト定義を連結することもできます。
- set_facts:
ansible_ssh_user: "{{ some_var.split('-')[1] | default(lookup('env','USER'), true) | default('foo') }}"