Cara menggunakan Pembolehubah dan Pembungkusan Ansible

Bagaimana ExpressVPN menggunakan Ansible

Bagaimana kita menggunakan Ansible secara meluas di ExpressVPN

Pasukan pembangunan kami bekerja secara mandiri, iaitu, sebuah pasukan memiliki produk mereka untuk kitaran hayat penuhnya. Penubuhan ini bermakna pengertian Ansible kita berasal dari koleksi pengetahuan dari banyak pasukan yang berlainan di dalam syarikat daripada kumpulan berpusat yang menguruskan Ansible.

Tenaga kerja yang terdesentralisasi memberikan pasukan kami banyak fleksibiliti dan mobiliti tetapi juga memberi tekanan kepada individu untuk mengetahui banyak tentang banyak alat.

Untuk memudahkan berkongsi pengetahuan dan penggunaan alat dengan betul, kami telah memutuskan untuk menyeragamkan cara kami menggunakan Ansible untuk pengurusan konfigurasi dan operasi pelayan.

Blog ini meliputi pelajaran yang telah kami pelajari beroperasi pada skala kami, pantulan cara kami bekerja, dan bagaimana kami menguruskan Ansible dalam konteks seperti itu.

Dokumentasi yang salah

Mari masuk ke dalamnya! Dokumentasi untuk Ansible meninggalkan beberapa perkara yang perlu diingini, terutama ketika datang ke dokumentasi akhir-ke-akhir (seperti, bagaimana anda dapat dari titik A ke titik Z?).

Sesetengah soalan yang sering kita hadapi ialah: “Bagaimanakah kerja keutamaan berubah?” Dan “Bagaimanakah kebiasaan Ansible sesuai?”

Kedua-dua masalah itu didokumentasikan dengan sangat baik secara bebas (di sini dan di sini), dan halaman Pembolehubah Ansible mempunyai bahagian yang sangat bagus tentang keutamaan secara jelas, tetapi persimpangan kedua hanya mendapat sebutan ringkas. Masalahnya ialah tidak terdapat pautan antara dokumentasi mengenai Pemboleh ubah dan peti besi, memberi gambaran bahawa tanggungjawab pengguna adalah untuk mengetahui bagaimana kedua-dua mereka bersilang antara satu dengan yang lain..

Jadi, hari ini kita akan cuba meliputi persimpangan antara Pembolehubah dan Vault dan amalan terbaik.

Apa yang anda boleh gunakan fail Vault Ansible untuk

Secara ringkas: Dokumentasi Vault menyatakan bahawa anda pada asasnya boleh menyulitkan apa-apa dalam folder Ansible anda ke dalam fail Vault, dan Ansible akan mencuba “cerdik” mendekrifkannya setiap kali main termasuk fail-fail ini. Huh. Sejuk!

Dokumentasi tentang Pembolehubah tidak menyebut apa-apa mengenai fail Vault sama sekali, yang aneh kerana Vault direka untuk fail Variable. Jadi bagaimana mereka sesuai bersama? Penting untuk ambil perhatian bahawa Fail vault sendiri tidak mempunyai makna khusus untuk pemprosesan Variabel atau keutamaan, jadi ada banyak kelenturan. Tetapi berpotensi ini tidak meninggalkan anda dengan maklumat yang mencukupi tentang cara menggunakannya dengan betul.

Bagaimana untuk tidak menggunakan AnsibleAnda melakukan salah.

Ambil contoh folder mudah Ansible ini:

.
├── group_vars
│ ├── semua
│ ├── pengeluaran
│ └── pementasan
├── ansible.cfg
├── inventori
└── playbook.yml

Pada pandangan pertama, persediaan ini kelihatan baik; ini akan menjadi struktur yang agak biasa untuk menghasilkan jika anda membaca dokumentasi. Seorang pemerhati berpotensi menganggap bahawa file pementasan dan produksi dalam group_vars adalah Vault, tetapi itu tidak semestinya benar, yang dengan sendirinya adalah masalah.

Sekarang, fail “semua” tidak boleh menjadi fail Vault sejak anda (mudah-mudahan) menyulitkan fail pementasan dan produksi Vault dengan kata laluan yang berbeza. Tetapi ia juga bermakna fail kumpulan anda untuk persekitaran perlu mengandungi gabungan rahsia dan bukan rahsia kerana anda terhad kepada satu fail per persekitaran.

Kerana ini-dan jika anda diekstrapolasi sedikit selepas membaca intro ke Vaults dalam dokumentasi Ansible-anda mungkin mencipta peti besi produksi / pementasan dengan menyalin kandungan “semua” pada mulanya dan kemudian mengubahnya.

Ini bermakna file “semua” anda mungkin kelihatan seperti ini:

pangkalan data:
nama pengguna: default_user
kata laluan: palsu

super_important_var_that_should_be_one: 1

Dan fail Vault pengeluaran anda mungkin kelihatan seperti ini:

pangkalan data:
nama pengguna: pengeluar
kata laluan: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(Jangan risau, ini bukan kata laluan pengeluaran sebenar kami! Kami menyemak semula.)

Di atas adalah berbahaya atas sebab-sebab yang mungkin tidak jelas. Sebagai contoh, anda mungkin terlepas mengubah lalai untuk pengeluaran, dan / atau fail “semua” anda mungkin dinamakan salah dan tidak disertakan sama sekali! (Ini adalah sebab utama gangguan yang kita alami minggu lepas).

Amalan terbaik: Cara menggunakan fail Vault Ansible dengan selamat

Seperti yang dinyatakan dalam halaman amalan terbaik, membuat fail ke dalam fail Vault mengaburkan kandungan fail, jadi ia datang dengan kekurangan yang besar: Anda tidak boleh mencari apa Pembolehubah berada dalam fail Vault tanpa menyatakan secara eksplisitnya. Sistem ini bermaksud bahawa sesiapa yang melihat konfigurasi Ansible anda tidak tahu apa yang ada dalam fail ini tanpa mengetahui kata laluan Vault (mengerikan untuk ulasan kod!). Justeru, kami mengesyorkan meletakkan sebagai Pembolehubah yang tidak dapat dilakukan secara berkapasiti di dalam fail Vault. (Dengan kata lain, hanya letakkan rahsia dalam fail Vault!)

Jadi, mari kita lihat struktur yang akan memudahkan anda untuk tidak menembak diri anda di kaki:

.
├── group_vars
│ ├── semua
│ │ └── vars.yml
│ ├── pengeluaran
│ │ ├── vars.yml
│ │ └── vault.yml
│ └── pementasan
│ └── vault.yml
├── ansible.cfg
├── inventori
└── playbook.yml

Dokumentasi amalan terbaik juga mengesyorkan menggunakan “lapisan indireksi,” yang bermaksud bahawa anda harus templat dalam semua Pembolehubah dalam fail Vault ke dalam Pembolehubah yang dirujuk di dalam buku main anda. Ia juga mengesyorkan bahawa anda awalan Pembolehubah vault anda dengan “vault_” yang bermaksud semua / vars.yml anda boleh kelihatan seperti:

pangkalan data:
nama pengguna: default_user
kata laluan: “{{vault_database_password}}”

super_important_var_that_should_be_one: 1

Pengeluaran / vars.yml anda kelihatan seperti ini:

pangkalan data:
nama pengguna: pengeluar

Dan fail pengeluaran / vault.yml anda hanya perlu mengandungi ini:

vault_database_password: supersecretpasswordnoonecansee

Struktur yang disemak semula ini mempunyai beberapa faedah. Pertama sekali, jika anda melakukan ulasan kod (sila lakukan!), Ini bermakna pengulas anda dapat melihat apa yang telah anda ubah, bersama dengan apa yang anda telah tambah dan dikeluarkan dalam (hampir semua) konfigurasi anda. Dengan struktur ini, pengulas tidak akan hanya melihat perubahan fail penuh pada Bilik Kebal yang perlu disahkritik secara manual, disimpan ke cakera, dan diffed dengan versi terdahulu.

Dan, lebih penting lagi, Ansible akan gagal walaupun memberikan petunjuk jika ia hilang vault_database_password Pembolehubah di dalam Bilik Kebal, yang akan menjimatkan anda dari sekurang-kurangnya masalah yang mungkin anda hadapi jika anda tidak menyimpan tab tutup pada fail Vault anda.

Sekiranya anda berpegang kepada corak ini, tidak kira sama ada kumpulan tuan rumah dalam persekitaran, persekitaran penuh yang anda tetapkan Pembolehubah untuk, atau folder “semua”, rakan-rakan anda tidak akan keliru tentang apa yang ada dan tidak berada di dalamnya peti besi ini.

Itu sahaja untuk masa sekarang, kami berharap ia telah digunakan untuk anda!