Hai Saya mencoba mencari tahu cara mengatur variabel lingkungan dengan Ansible.
sesuatu yang perintah shell sederhana seperti ini:
EXPORT LC_ALL=C
mencoba sebagai perintah shell dan mendapat kesalahan mencoba menggunakan modul lingkungan dan tidak ada yang terjadi.
apa yang saya lewatkan
Jawaban:
Ada banyak cara untuk melakukan ini dan dari pertanyaan Anda tidak jelas apa yang Anda butuhkan.
1. Jika Anda membutuhkan variabel lingkungan untuk didefinisikan PER TUGAS SAJA, Anda melakukan ini:
Perhatikan bahwa
MY_ENV_VARIABLE
HANYA tersedia untuk tugas pertama,environment
tidak mengaturnya secara permanen di sistem Anda.Mudah-mudahan penggunaan
environment
juga akan dimungkinkan pada level bermain , tidak hanya level tugas seperti di atas. Saat ini ada permintaan tarik terbuka untuk fitur ini di Ansible's GitHub: https://github.com/ansible/ansible/pull/8651UPDATE: Sekarang digabungkan mulai 2 Jan 2015.
2. Jika Anda ingin variabel lingkungan permanen + lebar sistem / hanya untuk pengguna tertentu
Anda harus melihat bagaimana Anda melakukannya di distribusi / shell Linux Anda, ada banyak tempat untuk itu. Misalnya di Ubuntu Anda menentukannya di file seperti misalnya:
~/.profile
/etc/environment
/etc/profile.d
direktoriAnda akan menemukan dokumen Ubuntu tentangnya di sini: https://help.ubuntu.com/community/EnvironmentVariables
Setelah semua untuk mengatur variabel lingkungan di ex. Ubuntu Anda bisa menggunakan
lineinfile
modul dari Ansible dan menambahkan baris yang diinginkan ke file tertentu. Konsultasikan dokumen OS Anda untuk mengetahui di mana harus menambahkannya agar permanen.sumber
Saya tidak memiliki reputasi yang cukup untuk berkomentar dan karenanya saya menambahkan jawaban baru.
Jawaban Gasek benar sekali. Hanya satu hal: jika Anda memperbarui
.bash_profile
file atau/etc/profile
, perubahan itu akan terlihat hanya setelah Anda melakukan login baru. Jika Anda ingin menyetel variabel env dan kemudian menggunakannya dalam tugas berikutnya di pedoman yang sama, pertimbangkan untuk menambahkan variabel lingkungan tersebut di.bashrc
file.Saya kira alasan di balik ini adalah shell login dan non-login.
Ansible, saat menjalankan tugas berbeda, membaca parameter dari
.bashrc
file, bukan dari.bash_profile
atau/etc/profile
.Sebagai contoh, jika saya memperbarui variabel jalur saya untuk menyertakan biner khusus dalam
.bash_profile
file pengguna masing-masing dan kemudian melakukan sumber file. Tugas berikutnya tidak akan mengenali perintah saya. Namun jika Anda memperbarui.bashrc
file, perintah akan berfungsi.Ini akan berhasil , tetapi jika saya melakukannya menggunakan file profil, itu
mysql -e "show databases"
akan memberikan kesalahan.Yang ini tidak akan berfungsi , jika kita memiliki semua tugas ini di buku pedoman yang sama.
sumber
source file
melakukan. file
Berikut adalah tugas lokal cepat untuk secara permanen menyetel kunci / nilai
/etc/environment
(yang berlaku untuk seluruh sistem, semua pengguna):dan vars untuk itu:
dan, ya, jika Anda ssh keluar dan masuk kembali,
env
menampilkan variabel lingkungan baru.sumber
dest
diganti denganpath
, tapi menurut dokumen harus tetap berfungsi. Jika tidak, alihkan kepath
.Untuk mengatur variabel lingkungan secara terus-menerus, Anda dapat menggunakan salah satu peran yang ada di Ansible Galaxy. Saya sarankan kami adalah lingkungan yang interaktif .
Menggunakan ansible-galaxy:
Menggunakan Requirement.yml:
Kemudian di buku pedoman Anda:
sumber
Ini adalah pilihan terbaik. Seperti yang dikatakan Michal Gasek (jawaban pertama), sejak pull request digabungkan ( https://github.com/ansible/ansible/pull/8651 ), kami dapat mengatur variabel lingkungan permanen dengan mudah berdasarkan level permainan.
sumber