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'ı ş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" }
Açıklama:
- Komutun durumu, bu durumda BAŞARI
- Komutun çalıştırıldığı ana bilgisayar
- -m parametresi aracılığıyla verilen komut, bu durumda ping
- -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" }
Açıklama:
- Limit parametresi yalnızca ana bilgisayarın dosyasındaki belirli ana bilgisayarlara komut vermek için kullanılabilir
- 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 }
Açıklama:
- Kopyalama modülü tanımlandı
- Bu durumda modül argümanları kaynak mutlak yolu ve hedef mutlak yoludur.
- 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" ] }
Açıklama:
- Bu örnekte Yum modülü kullanıldı
- 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
- 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.
- 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" ] }
Açıklama:
- 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 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
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:
- Başucu kitabının çalışacağı ana bilgisayar grubu
- Bu görevde lldpad kurulumu için Yum modülü kullanıldı
- 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
Açıklama:
- Grup ismi
- 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'
Açıklama:
- 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.
- Görev çıktısı, gelecekte kullanılmak üzere, active_selinux adıyla kaydedilir.
- 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.
- İ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.
Açıklama:
- Bir bildirim örneği
- 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
Açıklama:
- Kullanılacak şablonun adı. Şablon, rol yolundaki şablonlar dizininde bulunur
- İstemci tarafında şablonla değiştirilecek dosya adının hedef yolu.
- 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:
Httpd rolü, main.yml görevi:
Selinux rolü, main.yml görevi:
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.
Açıklama:
- p4.yml'yi çalıştıran Ansible-playbook komutu
- Playbook, zaten etkin olduğundan SELinux rolünü atlıyor.
- Ansible, httpd paketinin zaten kurulu olduğunu tespit etti ve bu nedenle tamam olarak geri döndü.
- Çö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.