Saya memulai dengan ansible dan akan menggunakannya, antara lain, untuk menginstal paket pada beberapa distro Linux.
Saya melihat dalam dokumen bahwa perintah yum
dan apt
dipisahkan - apa cara termudah untuk menyatukan mereka dan menggunakan sesuatu seperti ini:
- name: install the latest version of Apache
unified_install: name=httpd state=latest
dari pada
- name: install the latest version of Apache on CentOS
yum: name=httpd state=latest
when: ansible_os_family == "RedHat"
- name: install the latest version of Apache on Debian
apt: pkg=httpd state=latest
when: ansible_os_family == "Debian"
Saya mengerti bahwa kedua manajer paket berbeda, tetapi mereka masih memiliki satu set penggunaan dasar umum. Orkestator lain ( misalnya garam ) memiliki perintah instal tunggal.
Jawaban:
Pembaruan: Pada Ansible 2.0, sekarang ada modul generik & abstrak
package
Contoh Penggunaan:
Sekarang ketika nama paket sama di berbagai keluarga OS, itu sesederhana:
Ketika nama paket berbeda di seluruh keluarga OS, Anda dapat mengatasinya dengan distribusi atau file vars khusus keluarga OS:
Kemudian, untuk setiap OS yang harus Anda tangani secara berbeda ... buat file vars:
EDIT:
Karena Michael DeHaan (pencipta Ansible) telah memilih untuk tidak mencabut modul manajer paket seperti yang dilakukan Chef ,Jika Anda masih menggunakan versi Ansible yang lebih lama (Ansible <2.0) , sayangnya Anda harus menangani hal ini di semua buku pedoman dan peran Anda. IMHO ini mendorong banyak pekerjaan berulang yang tidak perlu ke playbook & penulis peran ... tapi begitulah adanya. Perhatikan bahwa saya tidak mengatakan kita harus mencoba untuk mengabstraksikan manajer paket pergi sambil tetap mencoba untuk mendukung semua opsi dan perintah khusus mereka, tetapi hanya memiliki cara mudah untuk menginstal paket yang agnostik paket manajer. Saya juga tidak mengatakan bahwa kita semua harus menggunakan Smart Package Managerikut-ikutan, tetapi semacam lapisan abstraksi instalasi paket di alat manajemen konfigurasi Anda sangat berguna untuk menyederhanakan buku pedoman / buku resep lintas platform. Proyek Smart terlihat menarik, tetapi cukup ambisius untuk menyatukan manajemen paket di seluruh distro dan platform tanpa banyak adopsi ... itu akan menarik untuk melihat apakah itu berhasil. Masalah sebenarnya adalah hanya bahwa nama paket kadang-kadang cenderung berbeda di seluruh distro, jadi kita masih harus melakukan pernyataan kasus atau
when:
pernyataan untuk menangani perbedaan.Cara saya menghadapinya adalah dengan mengikuti
tasks
struktur direktori ini di buku pedoman atau peran:Dan kemudian memilikinya di
main.yml
:Ini dalam
foo.yml
(untuk paket 'foo'):Kemudian untuk manajer paket yang berbeda:
Tepat:
Yum:
Homebrew:
Perhatikan bahwa ini sangat berulang dan bukan KERING , dan meskipun beberapa hal mungkin berbeda pada platform yang berbeda dan harus ditangani, secara umum saya pikir ini verbose dan berat jika dibandingkan dengan Chef:
Dan ya, ada argumen bahwa beberapa nama paket berbeda di seluruh distro. Dan meskipun saat ini ada kekurangan data yang mudah diakses , saya berani menebak bahwa sebagian besar nama paket populer adalah umum di seluruh distro dan dapat diinstal melalui modul manajer paket abstrak. Kasus-kasus khusus perlu ditangani, dan sudah membutuhkan kerja ekstra membuat segalanya kurang KERING. Jika ragu, periksa pkgs.org .
sumber
Anda dapat mengabstraksi manajer paket melalui fakta
Yang Anda butuhkan adalah beberapa logika yang menetapkan
ansible_pkg_mgr
untukapt
atauyum
dllAnsible juga berusaha melakukan apa yang Anda inginkan dalam modul mendatang .
sumber
ansible_pkg_mgr
sendiri untuk setiap paket yang diketahuinya. Tidak perlu bagi Anda untuk melakukan apa pun. Saya menggunakan konstruksi khusus ini di mana-mana.Dari Ansible 2.0 ada
Package
-modul baru .http://docs.ansible.com/ansible/package_module.html
Anda kemudian dapat menggunakannya seperti proposal Anda:
Anda masih harus mempertimbangkan perbedaan nama.
sumber
Lihat dokumentasi Ansible tentang Impor Bersyarat .
Satu tugas untuk memastikan apache berjalan bahkan jika nama layanan berbeda di setiap OS.
sumber
Anda tidak ingin melakukan itu karena nama paket tertentu berbeda di antara distro. Misalnya pada distro yang berhubungan dengan RHEL, paket server web populer dinamai
httpd
, sedangkan pada distro yang berhubungan dengan Debian namanyaapache2
. Demikian pula dengan daftar besar sistem lain dan perpustakaan pendukung.Mungkin ada satu set parameter dasar umum, tetapi kemudian ada juga beberapa parameter lebih lanjut yang berbeda antara manajer paket. Dan Anda tidak ingin berada dalam situasi yang ambigu di mana untuk beberapa perintah Anda menggunakan satu sintaks dan untuk perintah lain Anda menggunakan sintaks lain.
sumber
salt
mengelola untuk menyatukan kedua manajer paket. Bagaimanapun, saya akan menggunakan konfigurasi ganda, kalau begitu.