Yeni Başlayanlar İçin Ansible Eğitimi: Başucu Kitabı, Komutlar ve Örnek

Ansible nedir?

yanıtlayıcı ' yazılım sağlama, yapılandırma yönetimi ve yazılım dağıtımına yönelik açık kaynaklı bir otomasyon ve düzenleme aracıdır. Ansible, Unix benzeri sistemlerin yanı sıra kolaylıkla çalıştırabilir ve yapılandırabilir Windows kod olarak altyapı sağlayan sistemler. Sistem yapılandırması ve yönetimi için kendi bildirimsel programlama dilini içerir.

Ansible, kurulumunun basitliği, istemcilerle bağlantı konusunda kullanım kolaylığı, Ansible istemcileri için aracı eksikliği ve çok sayıda beceriye sahip olması nedeniyle popülerdir. üzerinden bağlanarak çalışır. SSH böylece istemci tarafında özel bir aracıya ihtiyaç duymaz ve modülleri istemcilere göndererek modüller istemci tarafında yerel olarak yürütülür ve çıktı Ansible sunucusuna geri gönderilir.

SSH kullandığı için, SSH-Keys kullanarak istemcilere çok kolay bağlanabilir ve tüm süreci basitleştirir. Ana bilgisayar adları veya IP adresleri ve SSH portları gibi istemci ayrıntıları, envanter dosyaları adı verilen dosyalarda saklanır. Bir envanter dosyası oluşturup doldurduğunuzda, ansible bunu kullanabilir.

Neden Ansible'ı kullanmalısınız?

Ansible'ı kullanmanın bazı önemli artıları/yararları şunlardır

  • Ansible'ın en önemli avantajlarından biri de herkes tarafından ücretsiz olarak kullanılabilmesidir.
  • Ansible'ı kurmak ve kullanmak için herhangi bir özel sistem yöneticisi becerisine ihtiyaç yoktur ve resmi belgeler oldukça kapsamlıdır.
  • Eklentiler, modüller, envanterler ve oyun kitaplarıyla ilgili modülerliği, Ansible'ı geniş ortamları düzenlemek için mükemmel bir arkadaş haline getiriyor.
  • Ansible çok hafif ve tutarlıdır ve işletim sistemi veya temel donanıma ilişkin hiçbir kısıtlama yoktur.
  • Aracısız yetenekleri ve OpenSSH güvenlik özelliklerinin kullanılması nedeniyle de oldukça güvenlidir.
  • Ansible'ın benimsenmesini teşvik eden bir diğer avantaj, kapsamlı belgeler ve öğrenmesi kolay yapı ve konfigürasyonla belirlenen sorunsuz öğrenme eğrisidir.

Ansible'ın Tarihi

İşte Ansible'ın tarihindeki önemli yer işaretleri:

  • Şubat 2012'de Ansible projesi başladı. İlk olarak Cobbler ve Func, Fedora Birleşik Ağ Denetleyicisi'nin yaratıcısı Michael DeHaan tarafından geliştirildi.
  • Başlangıçta AnsibleWorks Inc olarak adlandırılan ve ansible aracını finanse eden şirket, 2015 yılında RedHat tarafından satın alındı ​​ve daha sonra RedHat ile birlikte AnsibleWorks Inc. çatısı altına girdi. IBM.
  • Şu anda Ansible, Fedora Linux, RHEL, Centos ve Oracle Linux.

Ansible'da kullanılan önemli terimler

  • Yanıtlayıcı sunucu

    Ansible'ın kurulu olduğu ve tüm görevlerin ve oyun kitaplarının çalıştırılacağı makine

  • modül

    Temel olarak bir modül, istemci tarafında yürütülmesi amaçlanan bir komut veya benzer Ansible komutları kümesidir.

  • Görev

    Görev, tamamlanması gereken tek bir prosedürden oluşan bir bölümdür

  • Rol

    Görevleri ve ilgili dosyaları daha sonra bir oyun kitabında çağrılacak şekilde düzenlemenin bir yolu

  • Gerçek

    Gerçekleri toplama işlemiyle istemci sisteminden küresel değişkenlerden getirilen bilgiler

  • Envanter

    Ansible istemci sunucuları hakkında veri içeren dosya. Sonraki örneklerde hosts dosyası olarak tanımlanmıştır

  • OYNA

    Bir oyun kitabının yürütülmesi

  • Handler

    Yalnızca bir bildirimin mevcut olması durumunda çağrılan görev

  • Bildirici

    Çıktı değiştirilirse işleyiciyi çağıran bir göreve atfedilen bölüm

  • Etiket

    Daha sonra yalnızca belirli bir görevi veya görev grubunu vermek için kullanılabilecek bir göreve ayarlanan ad.

Linux'ta Ansible Kurulumu

Seçeneklerinizi karşılaştırıp tarttıktan ve Ansible'ı tercih etmeye karar verdikten sonraki adım, onu sisteminize kurmaktır. Kurulum adımlarını farklı şekillerde geçeceğiz Linux Bir sonraki küçük eğitimde en popüler dağıtımları bulacaksınız.

Ansible'ı Centos/RedHat sistemlerine yükleyin

) 1 Adım EPEL deposunu yükleyin

[root@ansible-server ~]# sudo yum install epel-release

) 2 Adım Ansible paketini yükle

[root@ansible-server ~]# sudo  yum install -y ansible

Ansible'ı Centos/RedHat sistemlerine yükleyin

Ansible'ı şuraya yükle: Ubuntu/Debian sistemleri

) 1 Adım Paketlerde güncelleme gerçekleştirin

$ sudo apt update

) 2 Adım Yazılım özellikleri ortak paketini yükleyin

$ sudo apt install software-properties-common

) 3 Adım Ansible kişisel paket arşivini kurun

$ sudo apt-add-repository ppa:ansible/ansible

) 4 Adım Ansible'ı yükle

$ sudo apt update
$ sudo apt install ansible

Ansible geçici komutlar

Ansible'ı kullanmanın en basit yollarından biri geçici komutlar kullanmaktır. Bunlar, bir sunucuda veya bir grup sunucuda bazı komutlar vermek istediğinizde kullanılabilir. Geçici komutlar gelecekteki kullanımlar için saklanmaz ancak istenen sunucularla etkileşim kurmanın hızlı bir yolunu temsil eder.

Bu Ansible eğitimi için, host1 ve host2'yi içeren basit iki sunuculu bir host dosyası yapılandırılacaktır.

Tüm ana bilgisayarlara bir ping komutu vererek, ana bilgisayarların ansible sunucusundan erişilebilir olduğundan emin olabilirsiniz.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible geçici Komutlar

Açıklama:

  1. Komutun durumu, bu durumda BAŞARI
  2. Komutun çalıştırıldığı ana bilgisayar
  3. -m parametresi aracılığıyla verilen komut, bu durumda ping
  4. -i parametresi ile hosts dosyasına işaret edebilirsiniz.


Gerekirse aynı komutu yalnızca belirli bir ana bilgisayarda verebilirsiniz.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible geçici Komutlar

Açıklama:

  1. Limit parametresi yalnızca ana bilgisayarın dosyasındaki belirli ana bilgisayarlara komut vermek için kullanılabilir
  2. Envanter dosyasında tanımlandığı şekliyle ana bilgisayarın adı

Bir dosyayı hızlı bir şekilde birden fazla hedefe kopyalamanız gerekiyorsa, ansible'da SCP kullanan kopyalama modülünü kullanabilirsiniz. Böylece komut ve çıktısı aşağıdaki gibi görünür:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Ansible geçici Komutlar

Açıklama:

  1. Kopyalama modülü tanımlandı
  2. Bu durumda modül argümanları kaynak mutlak yolu ve hedef mutlak yoludur.
  3. Kopyalama komutunun başarısını ve dosya bütünlüğü denetimi için sha1 veya md5 toplam kontrolleri ve sahip, boyut veya izinler gibi meta veriler gibi diğer ayrıntıları yansıtan Ansible komut çıktısı. Bir paketin bir sürü sunucuya kurulması zahmetsizdir. Ansible, yum, apt, dnf vb. gibi kullanılan yükleyicilerle etkileşim kuran birkaç modüle sahiptir.

Bir sonraki örnekte, iki Centos ana bilgisayarına yum modülü aracılığıyla bir paketin nasıl kurulacağını öğreneceksiniz.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible geçici Komutlar

Açıklama:

  1. Bu örnekte Yum modülü kullanıldı
  2. Modül argümanlarını tanımlar ve bu durumda paketin adını ve durumunu siz seçeceksiniz. Örneğin durum yoksa paket aranır ve bulunursa kaldırılır
  3. Sarı renkle renklendiğinde ansible komutunun çıktısının durum değiştiğini göreceksiniz, bu durumda paketin bulunup kurulduğu anlamına gelir.
  4. Ansible aracılığıyla yayınlanan yum install komutunun durumu. Bu durumda ncdu.x86_64 0:1.14-1.el7 paketi kuruldu.

Elbette güncelleme, yükleme, en son sürüm veya kaldırma da dahil olmak üzere tüm yum yükleyici seçenekleri ansible aracılığıyla kullanılabilir.

Aşağıdaki örnekte, daha önce kurulmuş olan ncdu paketini kaldırmak için aynı komut verilmiştir.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible geçici Komutlar

Açıklama:

  1. Yum komutunun çıktısı paketin kaldırıldığını gösterir.

Ansible'ın istemcinin sunucusuyla etkileşim kurmak için kullandığı bir diğer yararlı ve temel özellik, sistem hakkında bazı gerçekleri toplamaktır. Bu nedenle, sistemden donanım, yazılım ve sürüm bilgilerini alır ve her değeri daha sonra kullanılabilecek bir değişkende depolar.

Ansible üzerinden değişiklik yapılacak sistemler hakkında detaylı bilgiye ihtiyaç duyulursa bir sonraki komut kullanılabilir. Kurulum modülü sistem değişkenlerinden gerçekleri toplar.

Ansible geçici Komutlar

Ansible Başucu Kitapları

Ansible Başucu Kitapları komutları komut dosyaları aracılığıyla uzak sistemlere göndermenin yoludur. Ansible oyun kitapları, bir veya daha fazla sisteme bir komut dosyası çalıştırarak esnekliği artırmak için karmaşık sistem ortamlarını yapılandırmak için kullanılır. Ansible oyun kitapları, bir programlama dilinden çok bir yapılandırma dili olma eğilimindedir.

Ansible playbook komutları YAML formatını kullanır, bu nedenle çok fazla sözdizimi gerekmez, ancak girintiye uyulmalıdır. Adından da anlaşılacağı gibi, bir oyun kitabı bir oyun koleksiyonudur. Bir oyun kitabı aracılığıyla, bazı ana bilgisayarlara belirli roller, diğer ana bilgisayarlara ise başka roller atayabilirsiniz. Bunu yaparak, çok çeşitli senaryolarda birden fazla sunucuyu tek bir taktik kitabında düzenleyebilirsiniz.

Ansible playbook örneklerine devam etmeden önce tüm ayrıntıları kesinleştirmek için öncelikle bir görev tanımlamalıyız. Bunlar roller ve playbook'lar için ansible modüllerine arayüzdür.

Şimdi Ansible oyun kitabını, aşağıdaki gibi birden fazla görevi içeren tek oyun içeren bir oyun kitabı örneği üzerinden öğrenelim:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Ansible Başucu Kitapları

Yukarıdaki Ansible playbook örneğinde, ana bilgisayarın dosyasındaki ana bilgisayar grubu1, yum modülü kullanılarak lldpad paketi kurulumu için hedeflenir ve ardından kurulumdan sonra oluşturulan hizmet lldpad, daha sonra çoğunlukla systemd topluluğu ile etkileşimde bulunmak için kullanılan hizmet modülü kullanılarak başlatılır.

Açıklama:

  1. Başucu kitabının çalışacağı ana bilgisayar grubu
  2. Bu görevde lldpad kurulumu için Yum modülü kullanıldı
  3. Servis modülü, kurulumdan sonra servisin çalışır durumda olup olmadığını kontrol etmek için kullanılır

Her ansible oyun kitabı bir envanter dosyasıyla çalışır. Envanter dosyası, ayrıntılar için daha iyi kontrol sağlamak amacıyla gruplara ayrılmış sunucuların bir listesini içerir. IP Adresi ve her ana bilgisayar için SSH bağlantı noktası.

Bu Ansible playbook örneği için kullanabileceğiniz envanter dosyası aşağıdakine benzer. Her biri sırasıyla ana bilgisayar1 ve ana bilgisayar2'yi içeren grup1 ve grup2 adlı iki grup vardır.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Ansible Başucu Kitapları

Açıklama:

  1. Grup ismi
  2. IP adresi ve ssh bağlantı noktasıyla birlikte ana bilgisayar adı, bu durumda varsayılan olan 22'dir.

Bu sefer iki ana bilgisayar için iki oyunu içeren bir başka kullanışlı Ansible oyun kitabı örneği bir sonraki örnektir. İlk ana bilgisayar grubu için grup1, selinux etkinleştirilecektir. Etkinleştirilirse, ana bilgisayarın ekranında bir mesaj görünecektir.

İkinci ana bilgisayar grubu için, httpd paketi yalnızca ansible_os_family'nin RedHat ve ansible_system_vendor'un HP olması durumunda kurulacaktır.

Ansible_os_family ve ansible_system_vendor, Collect_facts seçeneğiyle toplanan değişkenlerdir ve bu koşullu örnekteki gibi kullanılabilir.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Ansible Başucu Kitapları

Açıklama:

  1. When cümlesi örneği: Bu durumda işletim sistemi türü Debian olduğunda. ansible_os_family değişkeni, Collect_facts işlevi aracılığıyla toplanır.
  2. Görev çıktısı, gelecekte kullanılmak üzere, active_selinux adıyla kaydedilir.
  3. When cümlesinin başka bir örneği. Bu durumda, SELinux'un gerçekten daha önce etkinleştirilip etkinleştirilmediği ana bilgisayar kullanıcısı için bir mesaj görüntülenecektir.
  4. İki kuraldan oluşan When cümlesinin başka bir örneği

Görevlerin yanı sıra işleyici adı verilen bazı özel görevler de vardır. İşleyicilerin oyun kitabı boyunca benzersiz bir adı olmalıdır. Bunlar normal bir görevle aynı şekilde çalışır ancak işleyiciye bir bildirim aracılığıyla bildirimde bulunulabilir.

Playbook'un çalıştırılması sırasında bir işleyiciye bildirimde bulunulmazsa çalışmayacaktır. Ancak birden fazla görev bir işleyiciye bildirimde bulunursa bu, tüm görevler tamamlandıktan sonra yalnızca bir kez çalıştırılır.

Aşağıda gösterilen örnekte, belirli bir görevin, başka bir görevi çağıran bir bildirim bölümüne nasıl sahip olduğunu görebilirsiniz. İlk görevin çıktısı değiştirilirse bir işleyici görevi çağrılacaktır. En iyi örnek, bir yapılandırma dosyasının değiştirilmesi ve ardından söz konusu hizmetin yeniden başlatılmasıdır.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

Bu durumda, ilk görev olan “sshd config dosyası bağlantı noktasını değiştir” değiştirilirse, yani port ilk etapta 28675 değilse, o zaman değiştirilecek ve görev aynı addaki işleyiciye çalışması için bildirimde bulunacaktır. ve sshd hizmetini yeniden başlatacaktır.

Ansible Başucu Kitapları

Açıklama:

  1. Bir bildirim örneği
  2. Bir işleyici örneği

Yanıtlayıcı Roller

Kapsamlı taktik kitaplarıyla uğraşırken görevleri rollere bölmek daha kolaydır. Bu aynı zamanda gelecekte rollerin yeniden kullanılmasına da yardımcı olur. Roller, bir oyun kitabından diğerine taşınabilen, bağımsız olarak ancak yalnızca bir çalışma kitabı dosyası aracılığıyla çalıştırılabilen bir görevler koleksiyonudur.

Roller ayrı dizinlerde saklanır ve belirli bir dizin yapısına sahiptir.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

Varsayılanlar dizinindeki yaml dosyası, oynatma kitabıyla birlikte kullanılacak varsayılan değişkenlerin bir listesini içerir. İşleyiciler dizini işleyicileri depolamak için kullanılır. Meta dizinin yazar ve rol bağımlılıkları hakkında bilgi sahibi olması gerekir. Görevler dizininde rol için ana yaml dosyası bulunur.

Test dizini örnek bir yaml çalışma kitabı dosyası ve örnek bir envanter dosyası içerir ve çoğunlukla gerçek rolü oluşturmadan önce test amacıyla kullanılır.

Vars dizini, rol tarafından kullanılan tüm değişkenlerin tanımlanacağı yaml dosyasını içerir. Dizin şablonları ve dizin dosyaları, roldeki görevler tarafından kullanılacak dosyaları ve şablonları içermelidir.

Bir rol için dizin ağacını oluşturmak için son parametre olan rol adı ile aşağıdaki komutu kullanmalısınız:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible ayrıca şablonlarla da iyi çalışır. Şablonlama dili olarak Jinja2'yi kullanır.

Bir sonraki örnekte, temel bir jinja2 şablonunun nasıl göründüğünü öğrenecek ve onu bir rolde kullanacaksınız.

Çalışma zamanında, örneğin sunucunuzun hangi veri merkezinde bulunduğuna bağlı olarak, “resolver_ip_addresses” değişkenini kullanarak, her biri bir veri merkezine karşılık gelen birden fazla ad sunucusu arasından seçim yapabilirsiniz.

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

Bu örnekte, playbook dizininde, veri merkezine bağlı olarak farklı değerlere sahip çözücü_ip_adresleri adlı bir değişken de dahil olmak üzere bazı değişkenler tanımlanmıştır.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Yanıtlayıcı Roller

Açıklama:

  1. Kullanılacak şablonun adı. Şablon, rol yolundaki şablonlar dizininde bulunur
  2. İstemci tarafında şablonla değiştirilecek dosya adının hedef yolu.
  3. Hedef dosyanın izinleri

Roller görevleri ayrıca bir adın atfedildiği bir etiket alanına da sahip olabilir. Birden fazla görev aynı etiketi paylaşabilir. Ansible Playbook'u çalıştırırken etiketi de belirleyebilirsiniz, böylece bu görevler yürütülür.

Ansible Örnek Olay İncelemesi

Bu bölümde, üç rolü olan temel bir yanıtlayıcı taktik kitabının örnek olay incelemesini analiz edeceğiz. Bunun amacı daha önce konuştuklarımızın pratik bir örneğini vermektir. Bu Ansible başucu kitabı eğitiminde daha önce kullanılan örneklerden bazıları bu başucu kitabına uyarlanacak ve kullanılacaktır.

Aşağıda playbook'un dizin yapısı verilmiştir. Kullanılacak Yaml dosyası p4.yml olacaktır.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Playbook'un üç rolü vardır; bunlardan birine, sunucudaki bir dosyayı /etc/resolv.conf hedefine kopyalayarak sunucularda belirli bir ad sunucusunu ayarlayan çözümleyici adı verilir. Bir diğeri httpd olarak adlandırılır ve httpd paketini yum modülüyle birlikte yükler, üçüncüsü ise SELinux'u etkinleştirir ve oturum açmış kullanıcıya sistemi yeniden başlatması konusunda bildirimde bulunur. Her rol ansible-galaxy komutu kullanılarak oluşturuldu.

Çözümleyici rolü, main.yml görevi:

Ansible Örnek Olay İncelemesi

Httpd rolü, main.yml görevi:

Ansible Örnek Olay İncelemesi

Selinux rolü, main.yml görevi:

Ansible Örnek Olay İncelemesi

Aşağıda p4.yml playbook'u tanımlanmıştır. Komut satırında aksi belirtilmediği takdirde tüm ana bilgisayarlarda çalışacak, 22 numaralı portta (SSH) kök kullanıcı olarak çalışacak, rolleri çalıştırmadan önce gerçekleri toplayacak ve daha önce belirtilen üç rolü de çalıştıracaktır. Her rol, ansible-playbook komut satırında –t parametresiyle etiket belirtilerek bağımsız olarak çalıştırılabilir.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

p4.yml çalışma kitabını iki ana bilgisayarda çalıştırma ve çıktıyı yorumlama. Aynı komut, prova için –check parametresiyle çalıştırılabilir. Şifre kimlik doğrulamasını kullanmak istiyorsanız -k parametresini kullanın.

Ansible Örnek Olay İncelemesi

Açıklama:

  1. p4.yml'yi çalıştıran Ansible-playbook komutu
  2. Playbook, zaten etkin olduğundan SELinux rolünü atlıyor.
  3. Ansible, httpd paketinin zaten kurulu olduğunu tespit etti ve bu nedenle tamam olarak geri döndü.
  4. Çözümleyici ayarlandı ve rol çözümleyicinin durumu değiştirildi.

Ansible Komutları Hile Sayfası

EPEL deposunu Centos/RHEL sistemlerine yükleyin

[root@ansible-server ~]# sudo yum install epel-release

Ansible paketini Centos/RHEL sistemlerine kurun

[root@ansible-server ~]# sudo  yum install -y ansible

Debian/'daki paketlerde güncelleme yapınUbuntu sistemler

$ sudo apt update

Software-properties-common paketini Debian/'a yükleyin.Ubuntu sistemler

$ sudo apt install software-properties-common

Debian/ üzerine ansible kişisel paket arşivini kurunUbuntu sistemler

$ sudo apt-add-repository ppa:ansible/ansible

Ansible'ı Debian/'a yükleyinUbuntu sistemler

$ sudo apt update
$ sudo apt install ansible

Hosts adlı envanter dosyasında tanımlanan tüm sunuculara ping komutu verin

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Yalnızca ana bilgisayar2'de ping komutu verin

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Envanter dosyasındaki tüm ana bilgisayarlara “testfile” dosyasını kopyalayın

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Ncdu paketini tüm ana bilgisayarlara yükleyin

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Tüm ana bilgisayarlarda ncdu paketini kaldırın

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Rol1 adlı rol için dizin yapısını oluşturun.

[root@ansible-server test2]# ansible-galaxy init role1

Prova p4.yml başucu kitabı

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Tüm ana bilgisayarlar için p4.yml playbook'u parola kimlik doğrulamasıyla çalıştırın

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

ÖZET

Teknolojinin sürekli olarak hızla değiştiği ve aynı zamanda inanılmaz bir hızla büyüdüğü bir dünyada, sistem yöneticileri ve DevOps mühendisleri, rutin görevleri otomatikleştirme ve büyük sunucu gruplarını düzenleme konusunda farklı yaklaşımlar düşünmelidir.

Çok varken Ansible'a alternatif (Chef, Puppet) bazı farklılıklarla aynı şeyi yapan Ansible, sadeliği, geliştirilmiş güvenliği ve en önemlisi sorunsuz öğrenme eğrisi ile hepsinin üstüne çıkmayı başardı. Bu nitelikleri ve Ansible'ın hızla benimsenmesi nedeniyle, Ansible ile çalışırken daha kusursuz bir ilk deneyime sahip olabilmeniz için örneklerle dolu bir eğitim hazırladık.

Bu Ansible temelleri eğitiminde, ansible'ı tanımladık ve geçmişi hakkında biraz konuştuk. Ansible'ın güçlü noktalarından ve ansible'ın farklı büyüklükteki altyapıların otomasyonu ve orkestrasyonuna getirebileceği avantajlardan bahsettik. Ansible'ın kullandığı temel terimleri tanımladık ve Ansible oyun kitaplarının yapısını tanımladık. Kapsamlı örnekler, tüm bilgilere ayrıntılı açıklamalarla eşlik etti.