Misalkan saya memiliki host yang, antara lain, server web, di mana peran Ansible yang terkait menginstal nginx
, melakukan beberapa konfigurasi penting di /etc/nginx
, dan membuka port 80 dan 443 di firewall.
Pada titik tertentu saya ingin host tertentu tidak menjadi server web lagi, karena untuk beberapa alasan saya memindahkan layanan itu ke tempat lain. Hanya menghapus server dari [webservers]
dalam inventaris akan meninggalkan sampah di server. Idealnya, saya ingin menghapus instalasi nginx
, menghapus /etc/nginx
direktori (dan beberapa direktori lainnya), dan menutup port 80 dan 443 di firewall.
Dalam Wayang aku bisa melakukan ini. Host yang merupakan server web akan memiliki sesuatu seperti ini dalam konfigurasinya:
class { 'nginx':
ensure => present,
}
dan yang harus saya lakukan adalah mengganti "sekarang" dengan "tidak ada". Jika nginx
kelas ditulis dengan baik, itu akan membatalkan perubahan yang telah dibuatnya. (Biasanya seorang administrator akan mengganti "sekarang" dengan "tidak ada", dan kemudian, ketika dia yakin bahwa semua host yang terpengaruh telah membatalkan konfigurasi, ia akan menghapus item dari manifes.)
Terlebih lagi, saya berpikir bahwa modul firewall Wayang secara otomatis menghapus aturan firewall yang tidak dapat ditemukan dalam manifes lagi; jadi saya pikir, untuk firewall, Anda bahkan tidak perlu melakukan hal "absen" di atas, firewall akan tetap menutup secara otomatis.
Bagaimana saya bisa mencapai hal-hal ini dengan Ansible?
ensure => present
keensure => absent
yang juga akan ... Bagaimana melakukan hal yang sama dengan ansible" dll Idealnya dengan contoh apa pun yang sudah Anda coba.Jawaban:
Dengan Ansible, Anda tidak akan benar-benar melakukan ini secara berbeda dari bagaimana Anda akan melakukannya dengan Wayang.
Dalam contoh Anda di mana Anda akan mengatur
Anda bergantung pada penulis modul boneka yang telah menulis kode yang diperlukan untuk menangani menghapus semuanya. Tidak setiap modul boneka memiliki ini.
Demikian pula, dengan Ansible, Anda mungkin memiliki peran yang memiliki kedua langkah yang diperlukan untuk menginstalnya serta menghapusnya. Perbedaannya hanya pada bagaimana memohon keduanya.
Satu pendekatan bisa menjadi satu di mana peran dalam pertanyaan memperlihatkan variabel untuk beralih perilaku. Sebagai contoh, peran nginx mungkin mengambil variabel
nginx_state
yang mengambil nilaiinstalled
danabsent
.Dalam peran itu
tasks/main.yml
, penulis peran mungkin memiliki sesuatu di sepanjang garis ....dengan masing-masing logika instal / hapus yang dipisah antara dua file yang termasuk dalam kondisi tersebut.
Peran yang dimungkinkan juga dapat disarangkan. Sebagai cara lain untuk melakukan hal yang sama, seorang penulis peran mungkin misalnya memberikan peran
nginx
dengan peran lain di dalamnya, yang disebutuninstalled
. Anda kemudian dapat melakukan:Mungkin, jika dibandingkan dengan Wayang, bisa dibilang memiliki lebih sedikit aturan dan pedoman tentang bagaimana hal-hal harus dilakukan sehingga praktik sedikit lebih bervariasi di alam liar, tetapi konsep yang sama berlaku.
sumber
- { role: nginx, state: absent }
) tapi menurut saya sangat bertele-tele. Satu-satunya kelemahan untuk peran bersarang yang saya lihat adalah bahwa saya perlu menautkan vars default dari induknya.roles: -nginx/uninstalled
bekerja? Saya telah mencari di semua tempat, tetapi tidak dapat menemukan dokumentasi tentang peran bersarang dengan cara yang memungkinkan saya untuk melakukan itu.Karena Anda memiliki konfigurasi / penyediaan di Ansible, Anda dapat menghapus seluruh server, menginstal ulang / menyediakan yang baru dan memiliki status bersih yang bagus untuk mengerjakannya.
Jika Anda benar-benar ingin "mengkonfigurasi ulang" untuk tujuan lain maka Anda harus membuat buku pedoman baru yang melakukan tugas pembersihan yang diperlukan.
Sejauh yang saya ketahui, semua modul pengemasan Anonim mendukung
state=absent
untuk memastikan bahwa paket yang diberikan tidak diinstal pada server Anda. Selain itu,apt
modul memilikipurge=yes
parameter yang akan membersihkan file konfigurasi kustom yang tersisa.Anda juga dapat membuat tugas untuk mengonfirmasi bahwa port 80 adalah firewall. Namun, karena Anda tidak akan memiliki proses apa pun yang berjalan pada port itu, firewall tidak akan membuat perbedaan apa pun untuk keamanan server Anda.
sumber
state=absent
ditambahkan. Ada peluang bagus yang akan menghapus atau membatalkan sebagian besar perubahan konfigurasi yang Anda buat. Bergantung pada seberapa besar perannya, ini mungkin PITA nyata untuk diuji.