Saya menyesuaikan users
pembuatan linux di dalam peran saya. Saya harus membiarkan pengguna menyesuaikan peran saya home_directory
, group_name
, name
, password
.
Saya bertanya-tanya apakah ada cara yang lebih fleksibel untuk mengatasi nilai default.
Saya tahu bahwa kode di bawah ini mungkin:
- 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
Tapi seperti yang saya sebutkan, ada banyak variabel opsional dan ini menciptakan banyak kemungkinan.
Apakah ada yang seperti kode di atas?
user:
name: "default_name", "{{my_variable}}"
Kode harus disetel name="default_name"
jika my_variable
tidak ditentukan.
Saya dapat mengatur semua variabel defaults/main.yml
dan membuat pengguna seperti itu:
- name: Create user
user:
name: "{{my_variable}}"
Tetapi variabel-variabel itu ada di dalam hash yang sangat besar dan ada beberapa hash di dalam hash itu yang tidak bisa dijadikan default.
ansible
ansible-2.x
Bernardo Vale
sumber
sumber
Jawaban:
Anda dapat menggunakan Jinja
default
:sumber
default('/home/' {{ anothervar }})
, apakah ada cara untuk menggabungkan nilai-nilai itu?default_value
dan itu akan menggunakan variabel yang disebut default_value{{ dict.key | default(5) }}
. Ini akan gagal jikadict
tidak ditentukan.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Tidak sepenuhnya terkait, tetapi Anda juga dapat memeriksa kedua variabel
undefined
DANempty
(misalnyamy_variable:
). (CATATAN: hanya bekerja dengan versi yang memungkinkan> 1.9, lihat: tautan )sumber
Jika ada yang mencari opsi yang menangani variabel bersarang, ada beberapa opsi seperti itu dalam masalah github ini .
Singkatnya, Anda perlu menggunakan filter "default" untuk setiap tingkat vars bertingkat. Untuk variabel "a.nested.var" akan terlihat seperti ini:
atau Anda dapat menyetel nilai default dari dicts kosong untuk setiap level vars, mungkin menggunakan filter "gabungkan". Atau gunakan filter "json_query". Tetapi opsi yang saya pilih tampaknya lebih sederhana bagi saya jika Anda hanya memiliki satu tingkat bersarang.
sumber
Jika Anda memiliki satu permainan yang ingin Anda putar di atas item, tentukan daftar itu di group_vars / all atau di tempat lain yang masuk akal:
Maka tugas Anda akan terlihat seperti ini:
Teruskan varlist sebagai array JSON:
Sebelum itu, Anda mungkin juga menginginkan tugas yang memeriksa bahwa setiap item di varlist juga ada di all_items :
sumber
Jika Anda menggunakan pencarian untuk menyetel baca default dari lingkungan, Anda juga telah menyetel parameter kedua dari default ke true:
Anda juga dapat menggabungkan beberapa definisi default:
sumber
Pertanyaannya sudah cukup lama, tapi bagaimana dengan:
Sepertinya tidak terlalu merepotkan bagiku ...
sumber
Jika Anda menetapkan nilai default untuk fakta boolean, pastikan tidak ada tanda kutip yang digunakan di dalam default ().
Untuk variabel lain digunakan metode yang sama yang diberikan dalam jawaban terverifikasi.
sumber