In: Genel


Bu gönderide, bir Ansible başucu kitabının nasıl oluşturulacağını öğreneceksiniz. Alıştırma olarak, iki hedef makineye bir Apache Web sunucusu kuracak ve karşılama sayfasını değiştireceksiniz.

1. Giriş

Önceki iki Ansible gönderisinde öğrendiniz Ansible test ortamı nasıl kurulur ve Ansible envanteri nasıl oluşturulur?. Bu gönderi, bu serinin devamı niteliğindedir, ancak ilk iki gönderiyi okumak gerekli değildir. Bu gönderide, bir Ansible başucu kitabının nasıl oluşturulacağını öğreneceksiniz. Bir oyun kitabı, görevleri yerine getiren bir veya daha fazla oyundan oluşur. Görevler, Ansible modüllerini çağırır. Bunu henüz anlamadıysanız merak etmeyin, öğreneceğiniz şey bu. Ayrıca okumanız tavsiye edilir oyun kitaplarına giriş Ansible belgelerinde.

Önceki blogları okumadıysanız veya hatırlatırsanız, ortam bir Denetleyici ve iki Hedef makineden oluşur. Denetleyici ve Hedef makineler bir VirtualBox VM’de çalışır. Ansible betiklerinin geliştirilmesi, ana makinede IntelliJ ile yapılır. Dosyalar, ana makineden Denetleyiciye bir komut dosyası aracılığıyla eşitlenir. Bu blogda, makineler aşağıdaki IP adreslerine sahiptir:

  • Denetleyici: 192.168.2.11
  • hedef 1: 192.168.2.12
  • Hedef 2: 192.168.2.13

Bu blogda kullanılan dosyalar şu adresteki ilgili git deposunda mevcuttur: GitHub.

2. Önkoşullar

Bu blog için aşağıdaki ön koşullar geçerlidir:

  • Bir Ansible test ortamına ihtiyacınız var, bkz. önceki blog test ortamı nasıl kurulur;
  • Ansible Envanteri ve Ansible Kasası hakkında temel bilgilere sahip olmanız gerekir, bkz. önceki blog bu bilgiye sahip değilseniz;
  • Kendi ortamınızı kullanıyorsanız, Controller ve Target makineleri için Ubuntu 22.04 LTS ve Ansible 2.13.3 sürümünün kullanıldığını bilmelisiniz;
  • Temel Linux bilgisi.

3. İlk Başucu Kitabınız

İlk çalışma kitabı olarak, Target1 ve Target2 makinelerine ping atacak bir çalışma kitabı oluşturacaksınız. Başucu kitabı git deposunda şu şekilde bulunabilir: playbook-ping-targets-success.yml ve aşağıdaki gibi görünür:

- name: Ping target1
  hosts: target1
 
  tasks:
    - name: Ping test
      ansible.builtin.ping:
 
- name: Ping target2
  hosts: target2
 
  tasks:
    - name: Ping test
      ansible.builtin.ping:

Bu başucu kitabının nasıl göründüğüne bakalım. Bir oyun kitabı oyunlardan oluşur. Bu başucu kitabında, adıyla iki oyun bulunabilir. Ping target1 ve Ping target2. Her başucu kitabı için, nerede çalıştırılması gerektiğini hosts envanter dosyasındaki bir adı ifade eden parametre.

Bir oyun görevlerden oluşur. Her iki oyunda da yalnızca bir görev adıyla tanımlanır. Ping test.

Bir görev bir Ansible modülünü çağırır. Kullanılabilecek modüllerin bir listesi bulunabilir. burada. Hangi modüllerin var olduğunu, nasıl bulunacağını, nasıl kullanılacağını vb. öğrenmek önemlidir. ping modülü bu örnek için ihtiyacınız olan şey, bu yüzden zaman ayırın ve ona bir göz atın.

Unutulmaması gereken son şey, FQCN’nin (Tam Nitelikli Koleksiyon Adı) kullanıldığıdır. Bu en iyi uygulama olarak kabul edilir.

Başucu kitabını Denetleyici makinesinden çalıştırın. Git deposundaki dosyaları olduğu gibi kullanırsanız kasa parolasını girmeniz gerekir. itisniceweather.

$ ansible-playbook playbook-ping-targets-success.yml -i inventory/inventory.ini --ask-vault-pass
Vault password: 
 
PLAY [Ping target1] ***********************************************************************************************
 
TASK [Gathering Facts] ********************************************************************************************
ok: [target1]
 
TASK [Ping test] **************************************************************************************************
ok: [target1]
 
PLAY [Ping target2] ***********************************************************************************************
 
TASK [Gathering Facts] ********************************************************************************************
ok: [target2]
 
TASK [Ping test] **************************************************************************************************
ok: [target2]
 
PLAY RECAP ********************************************************************************************************
target1                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
target2                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Günlük, tam olarak hangi oyunların ve hangi görevlerin yürütüldüğünü ve bunların başarılı bir şekilde yürütülüp yürütülmediğini gösterir.

Ping modülü ayrıca komutu çökertme seçeneği de sunar. Target1 oynatmasında, parametre data komutun çökmesine izin vermek için eklenir. Başucu kitabı git deposunda şu şekilde bulunabilir: playbook-ping-targets-failure.yml.

- name: Ping target1
  hosts: target1
 
  tasks:
    - name: Ping test
      ansible.builtin.ping:
        data: crash
...

Bu başucu kitabının yürütülmesi, Target1 oyununun çökmesine neden olacak ve oyun kitabı hemen sona erecek.

rn Dosya “/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py”, satır 79, main içindernİstisna: boomrn” , “msg”: “MODULE FAILUREnTam hata için stdout/stderr’ye bakın”, “rc”: 1} RECAP OYNAT *********************** ************************************************ ***************************** hedef1 : tamam=1 değişti=0 ulaşılamaz=0 başarısız=1 atlandı=0 kurtarıldı= 0 yoksayıldı=0 ” data-lang=”text/x-sh”>

$ ansible-playbook playbook-ping-targets-failure.yml -i inventory/inventory.ini --ask-vault-pass
Vault password: 
 
PLAY [Ping target1] ***********************************************************************************************
 
TASK [Gathering Facts] ********************************************************************************************
ok: [target1]
 
TASK [Ping test] **************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: Exception: boom
fatal: [target1]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 192.168.2.12 closed.rn", "module_stdout": "Traceback (most recent call last):rn  File "/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py", line 107, in <module>rn    _ansiballz_main()rn  File "/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py", line 99, in _ansiballz_mainrn    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)rn  File "/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py", line 47, in invoke_modulern    runpy.run_module(mod_name="ansible.modules.ping", init_globals=dict(_module_fqn='ansible.modules.ping', _modlib_path=modlib_path),rn  File "/usr/lib/python3.10/runpy.py", line 209, in run_modulern    return _run_module_code(code, init_globals, run_name, mod_spec)rn  File "/usr/lib/python3.10/runpy.py", line 96, in _run_module_codern    _run_code(code, mod_globals, init_globals,rn  File "/usr/lib/python3.10/runpy.py", line 86, in _run_codern    exec(code, run_globals)rn  File "/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py", line 89, in <module>rn  File "/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py", line 79, in mainrnException: boomrn", "msg": "MODULE FAILUREnSee stdout/stderr for the exact error", "rc": 1}
 
PLAY RECAP ********************************************************************************************************
target1                    : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

4. Apache Web Sunucusunu Kurun

Bu ikinci alıştırmada, Apache Web sunucusunu bir hedef makineye kuracak ve karşılama sayfasını değiştireceksiniz. Son başucu kitabı, git deposunda şu şekilde bulunabilir: playbook-httpd-target1.yml. Bu bölümde bu son sürümü nasıl oluşturacağınızı öğreneceksiniz.

4.1 Paketi Kur

Paketleri kurmak için aşağıdakileri kullanabilirsiniz: Apt modülü. Birçok parametre içerir, yalnızca birkaçını kullanacaksınız:

  • isim: kurulacak paketin adı;
  • update_cache: koşar apt-get update kurulumdan önce;
  • durum: istenen paket durumunu gösterir, present burada gayet iyi

Bu başucu kitabındaki diğer öğeler şimdiye kadar oldukça tanıdık olmalıdır.

- name: Install Apache webserver
  hosts: target1
 
  tasks:
    - name: Install apache httpd  (state=present is optional)
      ansible.builtin.apt:
        name: apache2
        update_cache: yes
        state: present

Oyun kitabını çalıştırın.

$ ansible-playbook playbook-httpd-target1.yml -i inventory/inventory.ini --ask-vault-pass
Vault password: 
 
PLAY [Install Apache webserver] *****************************************************************************************
 
TASK [Gathering Facts] **************************************************************************************************
ok: [target1]
 
TASK [Install apache httpd  (state=present is optional)] ****************************************************************

Bu başucu kitabı bitmiyor. Kilitleniyor ve CTRL+C ile durdurabilirsiniz.

Peki burada neler oluyor? Muhtemelen bildiğiniz gibi, paketleri kurmak için sudo ayrıcalıklarına ihtiyacınız var. Öyle ya da böyle, Ansible’ın ayrıcalık yükseltmeye gerek olup olmadığını bilmesi gerekiyor ve sizin de Ansible’a sudo şifresini vermeniz gerekecek. Ayrıntılı bir açıklama şu adreste okunabilir: Ansible belgeleri. Kısa versiyon, eklemeniz gereken become değeri olan parametre yes. Ancak hepsi bu kadar değil, ayrıca komut satırı parametresini de eklemeniz gerekiyor. --ask-become-pass Ansible başucu kitabını çalıştırırken. Bu şekilde, Ansible sizden sudo şifresini isteyecektir.

Eklenen başucu kitabı become parametre şu şekilde görünür:

- name: Install Apache webserver
  hosts: target1
  become: yes
 
  tasks:
    - name: Install apache httpd  (state=present is optional)
      ansible.builtin.apt:
        name: apache2
        update_cache: yes
        state: present

Bu başucu kitabının çalıştırılması başarılı oldu. Gördüğünüz gibi, şifre ve kasa şifresinin girilmesi gerekiyor.

$ ansible-playbook playbook-httpd-target1.yml -i inventory/inventory.ini --ask-vault-pass --ask-become-pass
BECOME password: 
Vault password: 
 
PLAY [Install Apache webserver] ****************************************************************************************
 
TASK [Gathering Facts] *************************************************************************************************
ok: [target1]
 
TASK [Install apache httpd  (state=present is optional)] ***************************************************************
changed: [target1]
 
PLAY RECAP *************************************************************************************************************
target1                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

Çıktı günlüğünde, Hedef1’in 11. satırda değiştirildiğini de fark edersiniz. Bunu unutmayın, bu daha sonra çalışma kitabı yeniden çalıştırıldığında önemli olacaktır.

Tarayıcınız aracılığıyla (veya curl komutu aracılığıyla) Target1 makinesinin IP adresine gidin: http://192.16.2.12. Bu blogda kullanılana benzer bir test ortamınız varsa, bunu ana makinenizden yürütebilirsiniz. Gördüğünüz gibi, Apache Web sunucusu varsayılan karşılama sayfası gösteriliyor.

4.2 Karşılama Sayfasını Değiştir

Başucu kitabında karşılama sayfasının içeriğini de değiştirebilirsiniz. kullanabilirsiniz kopya modülü bunun için. Aşağıdaki görevi çalışma kitabına ekleyin.

- name: Create index page
  ansible.builtin.copy:
    content: 'Hello world from target 1'
    dest: /var/www/html/index.html

Oyun kitabını yürütün.

$ ansible-playbook playbook-httpd-target1.yml -i inventory/inventory.ini --ask-vault-pass --ask-become-pass
BECOME password: 
Vault password: 
 
PLAY [Install Apache webserver] ****************************************************************************************************************************
 
TASK [Gathering Facts] *************************************************************************************************************************************
ok: [target1]
 
TASK [Install apache httpd  (state=present is optional)] ***************************************************************************************************
ok: [target1]
 
TASK [Create index page] ***********************************************************************************************************************************
changed: [target1]
 
PLAY RECAP *************************************************************************************************************************************************
target1                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

İlk olarak, günlüğe kaydetmeye daha yakından bakın. Görev Install apache httpd şimdi sadece geri dönüyor ok ve yok changed. Bu, Ansible’ın Apache Web sunucusunu tekrar kurmadığı anlamına gelir. Ansible görevleri önemsizdir. Bu, onları tekrar tekrar uygulayabileceğiniz anlamına gelir, sonuç aynı olacaktır. Ayrıca karşılama sayfasının artık değiştirildiğini unutmayın. Bunu tarayıcı veya curl aracılığıyla doğrulayın.

$ curl http://192.168.2.12
Hello world from target 1

4.3 Target2’yi Kurun

Son bir alıştırma olarak, Apache Webserver’ı Target2’ye yüklemek için ikinci bir oyun ekleyebilir ve karşılama sayfasını buna göre değiştirerek sizi Target2’den karşılamasını sağlayabilirsiniz. Başucu kitabı git deposunda şu şekilde bulunabilir: playbook-httpd-target1-and-target2.yml.

- name: Install Apache webserver for target 1
  hosts: target1
  become: yes
 
  tasks:
    - name: Install apache httpd  (state=present is optional)
      ansible.builtin.apt:
        name: apache2
        update_cache: yes
        state: present
 
    - name: Create index page for target 1
      ansible.builtin.copy:
        content: 'Hello world from target 1'
        dest: /var/www/html/index.html
 
- name: Install Apache webserver for target2
  hosts: target2
  become: yes
 
  tasks:
    - name: Install apache httpd  (state=present is optional)
      ansible.builtin.apt:
        name: apache2
        update_cache: yes
        state: present
 
    - name: Create index page for target 2
      ansible.builtin.copy:
        content: 'Hello world from target 2'
        dest: /var/www/html/index.html

Başucu kitabını yürütün, artık günlüğe kaydetmeyi kendiniz keşfedecek kadar kendinize güveniyorsunuz.

$ ansible-playbook playbook-httpd-target1-and-target2.yml -i inventory/inventory.ini --ask-vault-pass --ask-become-pass
BECOME password: 
Vault password: 
 
PLAY [Install Apache webserver for target 1] *****************************************************************************************************************************
 
TASK [Gathering Facts] ***************************************************************************************************************************************************
ok: [target1]
 
TASK [Install apache httpd  (state=present is optional)] *****************************************************************************************************************
ok: [target1]
 
TASK [Create index page for target 1] ************************************************************************************************************************************
ok: [target1]
 
PLAY [Install Apache webserver for target2] ******************************************************************************************************************************
 
TASK [Gathering Facts] ***************************************************************************************************************************************************
ok: [target2]
 
TASK [Install apache httpd  (state=present is optional)] *****************************************************************************************************************
changed: [target2]
 
TASK [Create index page for target 2] ************************************************************************************************************************************
changed: [target2]
 
PLAY RECAP ***************************************************************************************************************************************************************
target1                    : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
target2                    : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

Karşılama sayfalarının doğru şekilde değiştirilip değiştirilmediğini kontrol edin.

$ curl http://192.168.2.12
Hello world from target 1
$ curl http://192.168.2.13
Hello world from target 2

Beklendiği gibi!

5. Sonuç

Bu gönderide, Ansible’ı öğrenme yolculuğunuza devam ettiniz. Ansible çalışma kitaplarıyla ilgili temel bilgileri öğrendiniz ve Apache Web sunucusunu iki hedef makineye kuran bir çalışma kitabı yazıp yürüttünüz. Artık kendi başucu kitaplarınızı yazabilir ve öğrenmeye devam edebilirsiniz.

Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]