Başlangıç ​​Eğitimi – Ansible Playbook'lar, Değişkenler ve Envanter

Beginner S Tutorial Ansible Playbooks



Ansible çalışma kitapları, ana bilgisayarları Ansible ile yapılandırmak için çalıştırılan görevleri içeren dosyalardır. Ansible playbook'lar YAML formatında yazılır. YAML, tıpkı JSON gibi çok basit bir dosya biçimidir. Bu makalenin ilerleyen bölümlerinde Ansible YAML playbook'larının nasıl göründüğünü size göstereceğim.

Ansible Inventory dosyaları, Ansible ile yapılandırmak veya yönetmek istediğiniz ana bilgisayarların bir listesini tutar. Bu ana bilgisayarları gruplayabilir ve gruplara göre de yönetebilirsiniz. Ayrıca her ana bilgisayar veya bir grup ana bilgisayar için farklı değişkenler iletebilirsiniz.







Bu yazıda size Ansible playbook'ları, değişkenler, envanter dosyaları ve bazı yaygın Ansible modülleri ile nasıl çalışacağınızı pratik örneklerle göstereceğim. Öyleyse başlayalım!



Önkoşullar

Bu makaledeki örnekleri denemek isterseniz,



1) Bilgisayarınızda Ansible kurulu olmalıdır.
2) Ansible otomasyonu için en az bir Ubuntu/Debian ana bilgisayarına ve bir CentOS/RHEL 8 ana bilgisayarına sahip olmanız gerekir.





LinuxHint'te Ansible'ı Kurmaya ve Ansible otomasyonu için ana bilgisayarları yapılandırmaya adanmış birçok makale var. Daha fazla bilgi için gerekirse bu makalelere göz atabilirsiniz.

Proje Dizini Oluşturma

İlk önce bir proje dizini oluşturun ~/proje/ aşağıdaki komutla:

$mkdir -pv~/proje/oyun kitapları

Şuraya gidin: ~/proje/ dizin şu şekilde:

$CD~/proje

Temel Envanter Dosyası:

Ansible envanter dosyası oluşturun ev sahibi proje dizininde aşağıdaki komutla:

$nanoev sahibi

Ansible kullanarak yapılandırmak/otomatikleştirmek istediğiniz ana bilgisayarların IP adreslerini ev sahibi envanter dosyası.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Bu adımı tamamladıktan sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Envanter dosyasında IP adresleri yerine DNS adlarını kullanmak isterseniz, bunu da yapabilirsiniz.

Çalışan bir DNS sunucunuz yoksa, /etc/hostlar Yerel DNS çözümlemesi için bilgisayarınızda dosya.

Yerel DNS çözümlemesi için, /etc/hostlar metin düzenleyicili dosya ( nano , benim durumumda) aşağıdaki gibidir:

$sudo nano /vesaire/ev sahibi

IP adreslerini ve istediğiniz DNS adlarını aşağıdaki gibi yazın:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Bu adımı tamamladığınızda, düğmesine basın. + x bunu takiben VE ve .

Ansible envanter dosyasını açın ev sahibi aşağıdaki gibi:

$nanoev sahibi

Şimdi, Ansible kullanarak yapılandırmak/otomatikleştirmek istediğiniz ana bilgisayarların DNS adlarını ev sahibi envanter dosyası.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Bitirdiğinizde, ana bilgisayar envanter dosyasını düğmesine basarak kaydedin. + x bunu takiben VE ve .

Tüm Ana Bilgisayarlara Bağlantıyı Test Etme

Şimdi, envanter dosyasındaki tüm ana bilgisayarlara aşağıdaki gibi ping atmayı deneyebilirsiniz:

$cevaplayıcı-benhepsini barındırır-ucevaplayıcı-m ping atmak

Gördüğünüz gibi, envanter dosyasındaki tüm ana bilgisayarlara erişilebilir. Bu nedenle, bu makalenin bir sonraki bölümüne geçmeye hazırız.

İlk Ansible Playbook'unuz

Basit bir Ansible oyun kitabı oluşturalım ping_all_hosts.yaml içinde oyun kitapları/ dizin. Bu eylem, içindeki tüm ana bilgisayarlara ping atacaktır. ev sahibi envanter dosyası, daha önce olduğu gibi.

$nanooyun kitapları/ping_all_hosts.yaml

içine aşağıdaki satırları yazın ping_all_hosts.yaml Ansible playbook dosyası:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Tüm ana bilgisayarlara ping işlemi yapın
ping:

Buraya,

ev sahibi: hepsi – envanter dosyasından tüm ana bilgisayarları seçer ev sahibi .
kullanıcı ansible – Ansible’a envanter dosyasındaki ana bilgisayarlara SSH yapmasını söyler. cevaplayıcı kullanıcı.
görevler – Ansible'ın ana bilgisayarlarda yürüteceği tüm görevler burada listelenir. Görevlerin her birinin genellikle bir isim ve bir veya daha fazla modüle özel seçenek.

oyun kitabı ping_all_hosts.yaml envanter dosyasındaki tüm ana bilgisayarlara ping atan tek bir görevi vardır ev sahibi . Görevin adı Tüm ana bilgisayarlara ping at ve kullanır ping atmak modül.

NS ping atmak modülün başka bir seçeneğe ihtiyacı yoktur. Bu yüzden boş bıraktım (iki nokta üst üste işaretinden sonra hiçbir şey yok, : )

Bu adımı tamamladıktan sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

çalıştırabilirsiniz ping_all_hosts.yaml Ansible oyun kitabı aşağıdaki gibidir:

$cevaplayıcı oyun kitabı-benoyun kitaplarını barındırır/ping_all_hosts.yaml

Gördüğünüz gibi envanter dosyasındaki tüm hostlarda ping görevi başarılı.

Basit Ansible Yapılandırma Dosyası

Önceki örnekte, -ben Ansible'a hangi envanter dosyasının kullanılacağını söyleme seçeneği. Benim durumumda, bu ev sahibi envanter dosyası.

$cevaplayıcı oyun kitabı-benoyun kitaplarını barındırır/ping_all_hosts.yaml

Bir envanter dosyasını iletmek istemiyorsanız, -ben seçeneği, bir Ansible çalışma kitabını her çalıştırdığınızda, tek yapmanız gereken projeniz için varsayılan bir envanter dosyası ayarlamaktır.

Bunu yapmak için yeni bir Ansible yapılandırma dosyası oluşturun ansible.cfg proje kökünüzde aşağıdaki gibi:

$nanoansible.cfg

içine aşağıdaki satırları yazın ansible.cfg dosya:

[varsayılanlar]
envanter = ./ev sahibi

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Aynı Ansible çalışma kitabını aşağıdaki gibi çalıştırabilirsiniz:

$ansible-playbook playbooks/ping_all_hosts.yaml

Gördüğünüz gibi, oyun kitabı ev sahibi varsayılan olarak envanter dosyası. hala kullanabilirsiniz -ben Dilerseniz farklı bir envanter dosyası belirleme seçeneği. Ansible çok esnektir.

Envanter Dosyasında Ana Bilgisayarları Gruplandırma

Şimdiye kadar size envanter dosyasındaki tüm ana bilgisayarlarda bir dizi görevin (playbook) nasıl çalıştırılacağını gösterdim. Ancak, bazı ana bilgisayarlarda bir dizi görev ve diğer ana bilgisayarlarda başka bir dizi görev çalıştırmak isterseniz ne olur? Envanter dosyasındaki ana bilgisayarları gruplayabilir ve ana bilgisayar gruplarında farklı görevler çalıştırabilirsiniz.

Bu bölümde size envanter dosyasındaki hostları nasıl gruplayacağınızı ve host gruplarıyla nasıl çalışacağınızı göstereceğim.

İlk önce envanter dosyasını açın ev sahibi aşağıdaki gibi:

$nanoev sahibi

içine aşağıdaki satırları yazın ev sahibi envanter dosyası:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Burada iki ana bilgisayar grubu oluşturdum: debian10 ve centos8 .

İçinde debian10 grup, iki ana bilgisayarım var: vm1.nodekite.com ve vm2.nodekite.com

İçinde centos8 grup, iki ana bilgisayarım var: vm3.nodekite.com ve vm4.nodekite.com

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Şimdi yeni bir oyun kitabı oluşturacağız ping_debian10_hosts.yaml , bu daha önce olduğu gibi ana bilgisayarlara ping yapacak, ancak yalnızca debian10 ev sahibi grup.

Bir oyun kitabı oluşturun ping_debian10_hosts.yaml içinde oyun kitapları/ dizin şu şekilde:

$nanooyun kitapları/ping_debian10_hosts.yaml

içine aşağıdaki satırları yazın ping_debian10_hosts.yaml Ansible oyun kitabı:

- ana bilgisayarlar: debian10
kullanıcı ansible
görevler:
- isim: Tüm Debian'lara Ping Atın10ev sahibi
ping:

Onun yerine ev sahibi: hepsi , Ekledim ana bilgisayar: debian10 Burada. debian10 konak gruptur. Bu başucu kitabı yalnızca şu sunucudaki ana bilgisayarlarda çalışır: debian10 ev sahibi grup.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalışma kitabını aşağıdaki gibi çalıştırın:

$ansible-playbook playbooks/ping_debian10_hosts.yaml

Gördüğünüz gibi, yalnızca ana bilgisayarlar debian10 ana bilgisayar grubuna ping işlemi yapılır.

Aynı yöntemi kullanarak başka bir çalışma kitabı oluşturun ping_centos8_hosts.yaml aşağıdaki gibi:

$nanooyun kitapları/ping_centos8_hosts.yaml

içine aşağıdaki satırları yazın ping_centos8_hosts.yaml Ansible oyun kitabı:

- ana bilgisayarlar: centos8
kullanıcı ansible
görevler:
- isim: Tüm CentOS'lara ping atın8ev sahibi
ping:

aynen bende ekledim ev sahibi: centos8 Burada. centos8 konak gruptur. Bu başucu kitabı yalnızca şu sunucudaki ana bilgisayarlarda çalışır: centos8 ev sahibi grup.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalışma kitabını aşağıdaki gibi çalıştırın:

$ansible-playbook playbooks/ping_centos8_hosts.yaml

Gördüğünüz gibi, yalnızca ana bilgisayarlar centos8 ana bilgisayar grubuna ping işlemi yapılır.

Yanıtlanabilir Değişken Türleri

Ansible'da farklı değişken türleri vardır. Başlıca değişken türleri şunlardır: Ansible Facts değişkenleri ve Kullanıcı tanımlı değişkenler .

Ansible Facts değişkenleri: Ansible'ın üzerinde çalıştığı ana bilgisayara bağlı olarak Ansible, Ansible olgu değişkenleri üretir. Ansible fact değişkenleri, IP adresleri, ana bilgisayar adı, etki alanı adı, tarih, saat, kabuk ortamı değişkenleri ve daha fazlası gibi ana bilgisayar hakkında bilgiler içerir.

Kullanıcı tanımlı değişkenler: Bunlar, kullanıcı tarafından tanımlanan özel değişkenlerdir. Kullanıcı tanımlı değişkenleri komut satırından veya envanter dosyasını kullanarak iletebilirsiniz.

Temelde kullanıcı tanımlı değişkenler iki tiptir: Grup değişkenleri ve ana bilgisayar değişkenleri .

Yanıtlanabilir Değişken Öncelik

Ansible'ın değişken önceliği : Komut Satırı Değişkenleri > Ana Bilgisayar Değişkenleri > Grup Değişkenleri

Aynı değişkeni ana bilgisayar değişkeni ve grup değişkeni olarak ayarlarsanız, ana bilgisayar değişkeni uygulanacaktır.

Benzer şekilde, bir çalışma kitabını çalıştırırken komut satırından ayarladığınız değişkenler, hem ana bilgisayar hem de grup değişkenlerinin yerini alacaktır.

Ansible Olgu Değişkenleriyle Çalışmak

Bu bölümde size Ansible fact değişkenleriyle nasıl çalışacağınızı göstereceğim. Öyleyse başlayalım!

Ana bilgisayarların tüm Ansible Facts değişkenini listeleyebilirsiniz. ev sahibi envanter dosyası aşağıdaki gibidir:

$hepsi cevaplanabilir-ucevaplayıcı-mkurmak

Gördüğünüz gibi, tüm Ansible Facts değişkenleri JSON formatında listelenmiştir. Bu çok uzun bir liste.

Liste oldukça uzun olduğu için aşağıdaki gibi bir çağrı cihazı programı ile açabilirsiniz. az aşağıdaki gibi:

$hepsi cevaplanabilir-ucevaplayıcı-mkurmak| az

Artık çıktıyı gerektiği gibi yukarı, aşağı, sola ve sağa kaydırabilirsiniz.

Ayrıca çağrı cihazından değişken adlarını da arayabilirsiniz. Bunu yapmak için, / klavyenizdeki tuşa basın. Ardından, arama dizesini yazın ( ana bilgisayar adı benim durumumda) ve basın .

Gördüğünüz gibi, arama dizesiyle eşleşen Ansible fact değişkeni ansible_hostname . basabilirsin n sonraki maça gitmek ve P Çağrı cihazından önceki eşleşmeye gitmek için. Ansible projeniz için ihtiyaç duyduğunuz Ansible fact değişkenini bu şekilde bulabilirsiniz.

Şimdi Ansible fact değişkenlerine nasıl erişeceğimizi görelim.

Yeni bir oyun kitabı oluşturun print_variable1.yaml aşağıdaki gibi:

$nanooyun kitapları/print_variable1.yaml

içine aşağıdaki satırları yazın print_variable1.yaml dosya:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Yazdırana bilgisayar adıtüm ana bilgisayarların
hata ayıklama:
mesaj:'{{ ansible_hostname }}'

Burada bir görev ekledim Tüm ana bilgisayarların ana bilgisayar adını yazdır . Bu görev, Ansible'ı kullanır. hata ayıklama çalışma kitabı çalıştığında bir mesaj yazdırmak için modül.

mesaj için gerekli olan tek parametredir. hata ayıklama modül. NS mesaj parametresi, konsolda yazdırılacak mesaj olan tırnak içindeki bir dizeyi kabul eder.

Buraya, {{ değişken ismi }} Bir değişkene erişmek için format kullanılır. Bu durumda, {{ ansible_hostname }} yazdırmak için kullanılır ansible_hostname envanter dosyasındaki ana bilgisayarların her birinin değişkeni.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Ansible fact değişkenine şu şekilde de erişebilirsiniz: ansible_facts[değişken_adı] . Böylece ansible_hostname değişken olacak ansible_facts[ana bilgisayar adı] .

yeniden yazabiliriz print_variable1.yaml oyun kitabı da böyle. Aynı çıktıyı alacağız.

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Yazdırana bilgisayar adıtüm ana bilgisayarların
hata ayıklama:
mesaj:'{{ ansible_facts['variable_name'] }}'

Başucu kitabını çalıştırın print_variable1.yaml aşağıdaki gibi:

$ansible-playbook playbooks/print_variable1.yaml

Gördüğünüz gibi, envanter dosyasındaki ana bilgisayarların her birinin ana bilgisayar adı konsolda yazdırılıyor.

Şimdi ana bilgisayar adıyla birlikte her ana bilgisayarın varsayılan IPv4 adresini yazdıralım. Gördüğünüz gibi, ana bilgisayarın varsayılan IPv4 adresine şu adres kullanılarak erişilebilir: adres mülkü ansible_default_ipv4 nesne.

Yeni bir oyun kitabı oluşturun print_variable2.yaml aşağıdaki gibi:

$nanooyun kitapları/print_variable2.yaml

içine aşağıdaki satırları yazın print_variable2.yaml dosya:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Yazdırana bilgisayar adıtüm ana bilgisayarların
hata ayıklama:
mesaj:'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

Bu oyun kitabı öncekiyle aynı. Tek fark yeni değişkendir {{ ansible_default_ipv4.address }} içinde mesaj seçeneği hata ayıklama modül.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalıştır print_variable2.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/print_variable2.yaml

Gördüğünüz gibi, varsayılan IPv4 adresi ve ana bilgisayarların ana bilgisayar adı konsolda yazdırılır.

Ansible Facts değişkenleriyle bu şekilde çalışıyorsunuz.

Komut Satırından Kullanıcı Tanımlı Değişkenleri Ayarlama:

Bu bölümde, Ansible playbook'larını çalıştırırken komut satırından kullanıcı tanımlı değişkenlerin nasıl ayarlanacağını göstereceğim.

İlk önce, yeni bir oyun kitabı oluşturun print_variable3.yaml aşağıdaki gibi:

$nanooyun kitapları/print_variable3.yaml

içine aşağıdaki satırları yazın print_variable3.yaml dosya:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Yazdıremretmeksatır değişkeni
hata ayıklama:
mesaj:'Hoş geldiniz {{ kullanıcı adı }}'

Burada, kullandım hata ayıklama mesajı yazdırmak için modül Hoş geldiniz {{ kullanıcı adı }} . Kullanıcı adı playbook'u çalıştırdığımızda değiştirilecek bir değişkendir.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Başucu kitabını çalıştırın print_variable3.yaml aşağıdaki gibi:

$cevaplayıcı oyun kitabı-Ve 'kullanıcı adı=Bob'oyun kitapları/print_variable3.yaml

NOT: Buraya, -Ve seçeneği geçmek için kullanılır Kullanıcı adı değeri olan değişken Bob oyun kitabına print_variable3.yaml komut satırından.

Gördüğünüz gibi, mesaj Hoşgeldin Bob konsola yazdırılır.

Şimdi komut satırından birden çok değişkenin nasıl geçirileceğini keşfedelim.

Yeni bir oyun kitabı oluşturun print_variable4.yaml aşağıdaki gibi:

$nanooyun kitapları/print_variable4.yaml

içine aşağıdaki satırları yazın print_variable4.yaml dosya:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Kullanıcı tanımlı değişkenleri yazdır
hata ayıklama:
mesaj:'kullanıcı adı={{ kullanıcı adı }} http_port={{ http_port }}'

Oyun kitabı şu anda size çok tanıdık geliyor olmalı. Tek yaptığı 2 değişkeni yazdırmak Kullanıcı adı ve http_port konsolda.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

şimdi geçebilirsin Kullanıcı adı ve http_port iki farklı kullanarak oyun kitabına değişken -Ve seçeneği şu şekilde:

$ ansible-playbook-Ve 'kullanıcı adı=Bob' -Ve 'http_port=8080'
oyun kitapları/print_variable4.yaml

Veya değişkenleri aşağıdaki gibi bir boşlukla ayırabilirsiniz:

$ ansible-playbook-Ve 'kullanıcı adı=Bob http_port=8080'
oyun kitapları/print_variable4.yaml

Gördüğünüz gibi, Kullanıcı adı ve http_port değişkenler konsolda yazdırılır.

Kullanıcı Tanımlı Grup Değişkenleriyle Çalışma

Diyelim ki, bir grup ana bilgisayara bazı değişkenler eklemek istiyorsunuz. Bu eylemi Ansible'da yapmak çok kolaydır.

İlk önce, aç ev sahibi envanter dosyası aşağıdaki gibidir:

$nanoev sahibi

Aşağıdaki satırları yazınız ev sahibi envanter dosyası:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:vars]
kullanıcı adı = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: değişkenler]
kullanıcı adı = Bob
http_port =7878

Gördüğünüz gibi yeni bir bölüm oluşturdum. [debian10:vars] için debian10 ana bilgisayar grubu ve değişkenleri ekledi ( Kullanıcı adı ve http_port ) için debian10 oradaki ev sahibi grup.

Aynı şekilde yeni bir bölüm oluşturdum. [centos8: değişkenler] için centos8 ana bilgisayar grubu ve değişkenleri ekledi ( Kullanıcı adı ve http_port ) için centos8 oradaki ev sahibi grup.

Bitirdikten sonra, kaydedin ev sahibi düğmesine basarak envanter dosyası + x bunu takiben VE ve .

Çalıştır print_variable4.yaml oyun kitapları şu şekilde:

$ansible-playbook playbooks/print_variable4.yaml

Gördüğünüz gibi, ana bilgisayar gruplarına bağlı olarak ana bilgisayarların her birine doğru değişkenler iletilir.

Kullanıcı Tanımlı Ana Bilgisayar Değişkenleriyle Çalışma

Bu bölümde, envanter dosyasındaki belirli ana bilgisayarlar için değişkenlerin nasıl ayarlanacağını göstereceğim.

İlk olarak, açın ev sahibi envanter dosyası aşağıdaki gibidir:

$nanoev sahibi

Belirli bir ana bilgisayara değişkenler eklemek için (örneğin, vm1.nodekite.com ), ana bilgisayar IP/DNS adından sonra bir boşluk/sekme ekleyin ve aşağıdaki ekran görüntüsünde gösterildiği gibi değişkenlerinizi yazın.

Birden çok değişken de ekleyebilirsiniz. Her değişkeni bir boşlukla ayırmanız yeterlidir.

Bitirdikten sonra, envanter dosyasını düğmesine basarak kaydedin. + x bunu takiben VE ve .

Çalıştır print_variable4.yaml oyun kitapları şu şekilde:

$ansible-playbook playbooks/print_variable4.yaml

Gördüğünüz gibi, değişkenler yalnızca vm1.nodekite.com ev sahibi. Diğer ana bilgisayarların kendilerine uygulanan grup değişkenleri vardır.

Aralıklarla Hızlı Bir Şekilde Envanter Dosyaları Oluşturma

Ana bilgisayar IP adresleriniz veya DNS adlarınız tutarlıysa (yani belirli bir biçime sahipse) Ansible envanter dosyalarını hızlı bir şekilde oluşturmak için aralıkları kullanabilirsiniz.

Daha önceki örneklerde, ana bilgisayarları kullandım vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com ve vm4.nodekite.com . 4 satır yazmak yerine sadece yazabilirdim vm[1:4].nodekite.com envanter dosyasında.

Aralıklarla deneme yapmak için ev sahibi envanter dosyası aşağıdaki gibidir:

$nanoev sahibi

Envanter dosyalarından tüm ana bilgisayarları ve değişkenleri kaldırın.

şimdi değiştirebiliriz vm1.nodekite.com ve vm2.nodekite.com ile birlikte vm[1:2].nodekite.com için debian10 ana grup aşağıdaki gibi.

Aynı şekilde, değiştirebiliriz vm3.nodekite.com ve vm4.nodekite.com ile birlikte vm[3:4].nodekite.com için centos8 ev sahibi grup.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalıştır ping_all_hosts.yaml aşağıdaki gibi:

$ansible-playbook playbooks/ping_all_hosts.yaml

Gördüğünüz gibi, oyun kitabını çalıştırdığımda ana bilgisayar aralıkları genişletildi.

Değişkenleri Farklı Dosyalarda Saklamak

Grup değişkenlerini ve ana bilgisayar değişkenlerini aynı envanter dosyasında saklamak çok kolaydır. Ancak, daha fazla esneklik arıyor olabilirsiniz. Özellikle, aralıkları kullanırsanız artık ana bilgisayar değişkenlerini ayarlayamayacağınız için envanter dosyanızda aralıkları kullanmak istediğinizde. Grup değişkenlerini ve ana bilgisayar değişkenlerini farklı dosyalarda saklayabilirsiniz. Bu bölümde size nasıl yapıldığını göstereceğim.

Varsayılan olarak, Ansible aşağıdaki gruptaki grup değişkenlerini arar. group_vars / dizin ve ana bilgisayar değişkenleri host_vars / dizin.

Yani, oluştur group_vars / ve host_vars / dizin şu şekilde:

$mkdir -pv {ev sahibi, grup}_kimin

için grup değişkenlerini ayarlamak için debian10 ana bilgisayar grubu, bir dosya oluştur debian10 (grup adıyla aynı) group_vars / dizin şu şekilde:

$nanogroup_vars/debian10

Değişkenlerinizi aşağıdaki gibi yazın:

kullanıcı Lily
http_port: 4343

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x ardından Y ve .

Aynı şekilde, grup değişkenlerini ayarlamak için centos8 ana bilgisayar grubu, bir dosya oluştur centos8 (grup adıyla aynı) group_vars / dizin şu şekilde:

$nanogroup_vars/centos8

Değişkenlerinizi aşağıdaki gibi yazın:

kullanıcı Bob
http_port: 7878

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x ardından Y ve .

Çalıştır print_variable4.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/print_variable4.yaml

Gördüğünüz gibi, grup değişkenleri her ana bilgisayar grubu için doğru şekilde ayarlanmıştır.

Ana bilgisayar için ana bilgisayar değişkenlerini ayarlamak için vm1.nodekite.com , bir dosya oluştur vm1.nodekite.com (ana bilgisayar adı veya IP adresi ile aynı) host_vars / dizin şu şekilde:

$nanovm1.nodekite.com

Host değişkenlerinizi aşağıdaki gibi yazın:

kullanıcı Alex
http_port: 7788

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x ardından Y ve .

Çalıştır print_variable4.yaml oyun kitabı şu şekilde:

$ ansible-playbook playbooks/print_variable4.yaml
[

Gördüğünüz gibi, ana bilgisayar değişkenleri ana bilgisayar için doğru bir şekilde ayarlanmıştır. vm1.nodekite.com .

Ansible'da Döngülerle Çalışmak

Bu bölümde size Ansible'da döngülerin nasıl kullanılacağını göstereceğim.

İlk önce, yeni bir oyun kitabı oluşturun loop1.yaml içinde oyun kitapları/ dizin şu şekilde:

$nanooyun kitapları/loop1.yaml

içine aşağıdaki satırları yazın loop1.yaml oyun kitabı:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- isim: Kullanıcı listesini yazdır
hata ayıklama:
mesaj:'Kullanıcı: {{ item }}'
with_items:
- Alex
- Bob
- zambak

Burada, döngü kullanan kullanıcıların listesini yazdıran 1 görevim var.

Görevin yineleme değerlerini ayarlamak için with_items modül. Ardından, değerleri tek tek eklersiniz.

with_items:
- Alex
- Bob
- zambak

Kullanarak geçerli yinelemenin değerine erişirsiniz. kalem değişken.

hata ayıklama:
mesaj:'Kullanıcı: {{ item }}'

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalıştır loop1.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/loop1.yaml

Gördüğünüz gibi, her ana bilgisayardaki her öğe için aynı görev yürütüldü. Yani döngü çalışıyor.

Ansible'da Koşullarla Çalışmak

Görevleri belirli koşullara göre çalıştırmak istiyorsanız bu bölüm tam size göre.

Görevleri koşula göre çalıştırmak için, ne zaman Ansible modülü. Bu modülün bir örneğini görelim. İlk önce, yeni bir oyun kitabı oluşturun durum1.yaml aşağıdaki gibi:

$nanooyun kitapları/durum1.yaml

içine aşağıdaki satırları yazın durum1.yaml oyun kitabı:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- ad: Bu görevi yalnızca Debian'da çalıştırın
hata ayıklama:
mesaj:'bu görev Debian'da çalışıyor'
ne zaman: ansible_facts['dağıtım']=='Debian'

Buraya,

ansible_facts['dağıtım'] == 'Debian' olup olmadığını kontrol etmek için kullanılır. dağıtım NS Debian . Görev, yalnızca dağıtım Debian ise çalışır.

NS ansible_facts['dağıtım'] Ansible Facts değişkenine erişmek için kullanılır ansible_distribution . Ayrıca aşağıdakileri kullanarak dağıtım sürümünü de kontrol edebilirsiniz: ansible_distribution_major_version değişken.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalıştır durum1.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/durum1.yaml

Gördüğünüz gibi, görev yalnızca Debian ana bilgisayarlarında çalıştı. Görev, CentOS ana bilgisayarlarında çalışmadı.

Ayrıca aynı anda birden çok koşulu kontrol edebilir ve görevi yalnızca tüm koşullar doğruysa çalıştırabilirsiniz. Bir örnek görelim.

Yeni bir oyun kitabı oluşturun durum2.yaml aşağıdaki gibi:

$nanooyun kitapları/durum2.yaml

içine aşağıdaki satırları yazın durum2.yaml dosya:

- ana bilgisayarlar: tümü
kullanıcı ansible
görevler:
- ad: Bu görevi yalnızca Debian'da çalıştırın10
hata ayıklama:
mesaj:'bu görev Debian 10'da çalışıyor'
ne zaman: ansible_facts['dağıtım']=='Debian'
ve ansible_facts['dağıtım_major_sürüm']=='10'

Burada görev yalnızca dağıtım Debian ise ( ansible_facts['dağıtım'] == 'Debian' ) ve sürüm 10 ( ansible_facts['distribution_major_version'] == '10' ). Her iki koşul da doğruysa, görev çalışacaktır. Aksi takdirde, görev çalışmayacaktır.

ben kullandım ve Burada her iki koşulun da doğru olup olmadığını kontrol etmek için anahtar kelime. Koşullardan herhangi birinin doğru olup olmadığını kontrol etmek istiyorsanız, veya bunun yerine anahtar kelime.

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Başucu kitabını çalıştırın durum2.yaml aşağıdaki gibi:

$ansible-playbook playbooks/durum2.yaml

Gördüğünüz gibi, görev yalnızca Debian 10 ana bilgisayarlarında çalıştı.

Oyun kitabını değiştirelim durum2.yaml görevi yalnızca Debian 8 ana bilgisayarlarında çalıştırmak için aşağıdaki gibi.

Gördüğünüz gibi, envanter dosyasında herhangi bir Debian 8 ana bilgisayarım olmadığı için tüm ana bilgisayarlar atlandı.

Ansible apt Module ile çalışma

NS uygun Ansible modülü, Ubuntu/Debian ana bilgisayarlarına belirli bir yazılım paketi kurmak için kullanılır. Şimdi bu modülü nasıl kullanacağımızı görelim.

İlk önce, yeni bir oyun kitabı oluşturun apt1.yaml içinde oyun kitapları/ dizin şu şekilde:

$nanooyun kitapları/apt1.yaml

içine aşağıdaki satırları yazın apt1.yaml oyun kitabı:

- ana bilgisayarlar: debian10
kullanıcı ansible
olur: Doğru
görevler:
- isim: apache2'yi kurun
uygun:
isim: apache2
durum: en son

NS uygun modül sadece gerektirir isim kurmak/yükseltmek/kaldırmak istediğiniz paketin ve durum paketin.

Burada, yüklemeye çalışıyorum apache2 paket ( isim: apache2 ) Debian 10 ana bilgisayarlarımda. Bir paketi kurmaya ve yeni bir sürüm mevcutsa onu yükseltmeye çalıştığım için, durum olmalı En son .

durum ayrıca aşağıdaki seçenekleri de kabul eder:

- mevcut olmayan – Paket önceden kurulmuşsa kaldırılacaktır.
- En son – Bir güncelleme varsa paket yükseltilecektir. Paket kurulu değilse kurulacaktır.
- sunmak – Henüz kurulmamışsa paket kurulacaktır. Ancak bir güncelleme mevcutsa paket yükseltilmeyecektir.

eklediğime dikkat olur: Doğru oyun kitabında. Bu cevaplayıcı dosya sistemi yapısını değiştirmek için kullanıcı sudo ayrıcalıkları (yani paketleri kur/yükselt/kaldır). Olmadan olur: Doğru , NS uygun modülü kuramaz apache2 paket.

Bitirdiğinizde, tuşuna basarak çalışma kitabını kaydedin. + x bunu takiben VE ve .

Çalıştır apt1.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/apt1.yaml

Gördüğünüz gibi, oyun kitabı Debian 10 ana bilgisayarlarında başarıyla çalıştı.

Gördüğünüz gibi, apache2 paket Debian 10 ana bilgisayarlarıma yüklendi.

Ansible dnf/yum Modülü ile Çalışmak

NS dnf ve yum Ansible modülü, CentOS/RHEL ana bilgisayarlarına belirli bir yazılım paketi kurmak için kullanılır. Bu modülü, yaptığınız gibi kullanabilirsiniz. uygun Bu makalenin önceki bölümündeki modül.

İkisi de dnf ve yum modüller aynı parametreleri kabul eder. kullanabilirsiniz dnf CentOS/RHEL 8 ana bilgisayarlarındaki modül ve yum CentOS/RHEL 7 veya daha eski sürümlerde.

Şimdi bu modülün bir örneğine bakalım.

İlk önce, yeni bir oyun kitabı oluşturun dnf1.yaml içinde oyun kitapları/ dizin şu şekilde:

$nanooyun kitapları/dnf1.yaml

içine aşağıdaki satırları yazın dnf1.yaml oyun kitabı:

- ana bilgisayarlar: centos8
kullanıcı ansible
olur: Doğru
görevler:
- isim: httpd paketini kurun
bilgi:
isim: httpd
durum: en son

NS dnf ve yum modül sadece gerektirir isim kurmak/yükseltmek/kaldırmak istediğiniz paketin ve durum paketin.

Burada, yüklemeye çalışıyorum httpd paket ( isim: httpd ) CentOS 8 ana bilgisayarlarımda. Bir paketi yüklemeye çalıştığım için ve yeni bir sürüm mevcutsa onu yükseltmek de istediğim için, durum olmalı En son .

durum aşağıdaki seçenekleri kabul eder:

- mevcut olmayan – Paket önceden kurulmuşsa kaldırılacaktır.
- En son – Bir güncelleme mevcutsa paket yükseltilecektir. Paket kurulu değilse kurulacaktır.
- sunmak – Henüz kurulmamışsa paket kurulacaktır. Ancak bir güncelleme mevcutsa paket yükseltilmeyecektir.

eklediğime dikkat olur: Doğru oyun kitabında. Bu cevaplayıcı dosya sistemi yapısını değiştirmek için kullanıcı sudo ayrıcalıkları (yani paketleri kur/yükselt/kaldır). Olmadan olur: Doğru , NS uygun modülü kuramaz httpd paket.

Bitirdiğinizde, tuşuna basarak çalışma kitabını kaydedin. + x bunu takiben VE ve .

Çalıştır dnf1.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/dnf1.yaml

Gördüğünüz gibi, oyun kitabı CentOS 8 ana bilgisayarında başarıyla çalıştı.

Ansible servis Modülü ile çalışma

NS hizmet Ansible modülü, ana bilgisayarlarınızda hizmetleri başlatmak, durdurmak, yeniden başlatmak, etkinleştirmek (başlangıca hizmet eklemek) ve devre dışı bırakmak (başlangıçtan hizmeti kaldırmak) için kullanılır.

Daha önceki bölümlerde, Ansible kullanarak Apache HTTP sunucu paketinin nasıl kurulacağını göstermiştim. uygun , dnf ve yum modüller. Şimdi Apache HTTP sunucu hizmetinin çalıştığından ve sistem başlangıcına eklendiğinden emin olalım.

Debian 10 ana bilgisayarlarımla çalışacağım. Ancak dilerseniz CentOS 8 hostları ile de çalışabilirsiniz. Basitçe oyun kitabını buna göre ayarlayın.

İlk olarak, yeni bir Ansible çalışma kitabı oluşturun apt2.yaml aşağıdaki gibi:

$nanooyun kitapları/apt2.yaml

içine aşağıdaki satırları yazın apt2.yaml oyun kitabı:

- ana bilgisayarlar: debian10
kullanıcı ansible
olur: Doğru
görevler:
- isim: apache2'yi kurun
uygun:
isim: apache2
durum: en son
- ad: apache2 hizmetini başlatın
hizmet:
isim: apache2
durum: başladı
etkin: Doğru

Burada yeni bir görev ekledim, apache2 hizmetini başlatın .

isim: apache2 - üzerinde çalıştığım hizmet apache2 .

durum: başladı – hizmet çalışıyor olmalıdır.

etkin: Doğru – hizmet, sistem başlangıcına eklenmelidir.

NS durum parametre diğer değerleri kabul eder.

- yeniden yüklendi – Hizmet, yapılandırma dosyalarını yeniden yüklemelidir.
- yeniden başlatıldı – Hizmetin yeniden başlatılması gerekir.
- başladı – Hizmet çalışıyor olmalıdır. Hizmet çalışmıyorsa, hizmeti başlatın.
- durdu – Servis durdurulmalıdır. Hizmet çalışıyorsa, hizmeti durdurun.

Başucu kitabını çalıştırın apt2.yaml aşağıdaki gibi:

$ansible-playbook playbooks/apt2.yaml

Gördüğünüz gibi, oyun kitabı başarıyla çalıştı.

Gördüğünüz gibi, apache2 hizmet Debian 10 ana bilgisayarlarımda çalışıyor.

Ansible kopya modülü ile çalışma

Ansible kopyalamak modül esas olarak bilgisayarınızdan uzak ana bilgisayarlara dosya kopyalamak için kullanılır.

Önceki bölümde, Apache 2 web sunucusunu Debian 10 ana bilgisayarlarıma kurdum. Şimdi bir kopyalayalım index.html Dosyayı Debian 10 ana bilgisayarlarının web köküne atın.

İlk önce yeni bir dizin oluşturun Dosyalar/ aşağıdaki gibi:

$mkdir -vDosyalar

Yeni bir dosya oluştur index.html içinde Dosyalar/ dizin şu şekilde:

$nanoDosyalar/index.html

içine aşağıdaki satırları yazın index.html dosya:


< html >
< kafa >
< Başlık >Ansible tarafından web sunucusu</ Başlık >
</ kafa >
< vücut >
< h1 >LinuxHint'e hoş geldiniz</ h1 >
< P >Bu web sunucusu Ansible ile konuşlandırıldı.</ P >
</ vücut >
</ html >

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Yeni bir Ansible çalışma kitabı oluşturun apt3.yaml aşağıdaki gibi:

$nanooyun kitapları/apt3.yaml

içine aşağıdaki satırları yazın apt3.yaml dosya:

- ana bilgisayarlar: debian10
kullanıcı ansible
olur: Doğru
görevler:
- isim: apache2'yi kurun
uygun:
isim: apache2
durum: en son
- isim: index.html dosyasını sunucuya kopyalayın
kopyala:
kaynak: ../Dosyalar/index.html
hedef:/nerede/www/html/index.html
mod: 0644
sahibi: www-data
grup: www-veri
- ad: apache2 hizmetini başlatın
hizmet:
isim: apache2
durum: başladı
etkin: Doğru

Burada, görev index.html dosyasını sunucuya kopyalayın kopyalar index.html itibaren Dosyalar/ dizine / var / www / html / Debian 10 ana bilgisayarlarının dizini.

kaynak: ../files/index.html – Kaynak dosya yolu.
hedef: /var/www/html/index.html – Hedef dosya yolu.
mod: 0644 – Dosya kullanıcısı (6 – okuma ve yazma), grup (4 – okuma) ve diğerleri (4 – okuma) için izinler.
sahibi: www-data – Dosyanın sahibini şu şekilde ayarlayın: www-veri .
grup: www-veri – Dosyanın grubunu şu şekilde ayarlayın: www-veri .

Bitirdikten sonra, tuşuna basarak dosyayı kaydedin. + x bunu takiben VE ve .

Çalıştır apt3.yaml oyun kitabı şu şekilde:

$ansible-playbook playbooks/apt3.yaml

Gördüğünüz gibi, görev index.html dosyasını sunucuya kopyalayın başarılı.

Gördüğünüz gibi, index.html dosya Debian 10 ana bilgisayarlarına kopyalandı.

Gördüğünüz gibi, Debian 10 web sunucusu, index.html Debian 10 ana bilgisayarlarına yeni kopyaladığım sayfa.

Yani, bunlar Ansible'ın temelleri. Ansible'ın resmi belgelerini okuyarak Ansible hakkında daha fazla bilgi edinebilirsiniz. Bu makaleyi okuduğunuz için teşekkür ederiz.