Ansible - Hızlı Kılavuz
Ansible uygulama dağıtımını, hizmet içi düzenlemeyi, bulut provizyonunu ve diğer birçok BT aracını otomatikleştiren basit bir açık kaynaklı BT motorudur.
Ansible, herhangi bir aracı veya özel güvenlik altyapısı kullanmadığı için kurulumu kolaydır.
Ansible, otomasyon işlerini tanımlamak için başucu kitabını kullanır ve başucu kitabı çok basit bir dil kullanır. YAML(İnsan tarafından okunabilen bir veri serileştirme dilidir ve genellikle yapılandırma dosyaları için kullanılır, ancak verilerin depolandığı birçok uygulamada kullanılabilir) bu, insanların anlaması, okuması ve yazması için çok kolaydır. Bu nedenle avantajı, BT altyapısı destekçilerinin bile başucu kitabını okuyup anlayabilmesi ve gerekirse hata ayıklayabilmesidir (YAML - İnsan tarafından okunabilir biçimdedir).
Ansible, çok katmanlı dağıtım için tasarlanmıştır. Ansible aynı anda tek bir sistemi yönetmez, tüm sistemlerinizin birbiriyle ilişkili olduğunu açıklayarak BT altyapısını modeller. Ansible tamamen aracısızdır, yani Ansible, düğümlerinizi ssh aracılığıyla bağlayarak çalışır (varsayılan olarak). Ancak Kerberos gibi başka bir bağlantı yöntemi istiyorsanız, Ansible size bu seçeneği verir.
Düğümlerinize bağlandıktan sonra Ansible, "Ansible Modules" olarak adlandırılan küçük programları çalıştırır. Ansible, bu modülleri düğümlerinizde çalıştırır ve bittiğinde kaldırır. Ansible, envanterinizi basit metin dosyalarında yönetir (Bunlar, ana bilgisayar dosyasıdır). Ansible, ana bilgisayarların gruplanabildiği ve oyun kitaplarındaki belirli bir gruptaki eylemleri kontrol edebildiği ana bilgisayar dosyasını kullanır.
Örnek Hosts Dosyası
Bu, hosts dosyasının içeriğidir -
#File name: hosts
#Description: Inventory file for your application. Defines machine type abc
node to deploy specific artifacts
# Defines machine type def node to upload
metadata.
[abc-node]
#server1 ansible_host = <target machine for DU deployment> ansible_user = <Ansible
user> ansible_connection = ssh
server1 ansible_host = <your host name> ansible_user = <your unix user>
ansible_connection = ssh
[def-node]
#server2 ansible_host = <target machine for artifact upload>
ansible_user = <Ansible user> ansible_connection = ssh
server2 ansible_host = <host> ansible_user = <user> ansible_connection = ssh
Yapılandırma Yönetimi nedir
Ansible açısından konfigürasyon yönetimi, bir kuruluşun donanım ve yazılımını tanımlayan ayrıntılı bilgileri bir kayıt tutarak ve güncelleyerek ürün performansının konfigürasyonunu sürdürdüğü anlamına gelir.
Bu tür bilgiler tipik olarak, kurulu yazılım paketlerine uygulanan tam sürümleri ve güncellemeleri ve donanım aygıtlarının konumlarını ve ağ adreslerini içerir. Örneğin, yeni sürümünü yüklemek istiyorsanızWebLogic/WebSphere İşletmenizde bulunan tüm makinelerde sunucu olduğundan, her makineyi manuel olarak gidip güncellemeniz mümkün değildir.
Ansible oyun kitapları ve en basit şekilde yazılmış envanter ile WebLogic / WebSphere'i tüm makinelerinize tek seferde kurabilirsiniz. Tek yapmanız gereken, envanterde düğümlerinizin IP adreslerini listelemek ve WebLogic / WebSphere'i kurmak için bir başucu kitabı yazmaktır. Başucu kitabını kontrol makinenizden çalıştırın ve tüm düğümlerinize yüklenecektir.
Ansible Nasıl Çalışır?
Aşağıda verilen resim Ansible'ın çalışmasını göstermektedir.
Ansible works düğümlerinize bağlanarak ve "Ansible modülleri "onlara. Ansibledaha sonra bu modülleri çalıştırır (varsayılan olarak SSH üzerinden) ve bittiğinde kaldırır. Modül kitaplığınız herhangi bir makinede bulunabilir ve hiçbir sunucu, arka plan yordamı veya veritabanı gerekmez.
Yukarıdaki resimdeki yönetim düğümü, başucu kitabının tüm yürütülmesini kontrol eden kontrol düğümüdür (yönetim düğümü). Kurulumu çalıştırdığınız düğümdür. Envanter dosyası, Ansible modüllerinin çalıştırılması gereken ana bilgisayarların listesini sağlar ve yönetim düğümü bir SSH bağlantısı yapar ve ana makinedeki küçük modülleri çalıştırır ve ürünü / yazılımı yükler.
Beauty Ansible, modülleri çok etkin bir şekilde kurulduktan sonra kaldırır, ana makineye bağlanır, talimatları yürütür ve başarılı bir şekilde kurulursa, yürütülen ana makineye kopyalanan kodu kaldırır.
Bu bölümde Ansible'ın ortam kurulumu hakkında bilgi edineceğiz.
Kurulum süreci
Temel olarak, dağıtımdan bahsettiğimizde iki tür makine vardır -
Control machine - Diğer makineleri yönetebileceğimiz bir makine.
Remote machine - Kontrol makinesi ile elleçlenen / kontrol edilen makineler.
Bir kontrol makinesi tarafından idare edilen birden fazla uzak makine olabilir. Bu nedenle, uzak makineleri yönetmek için Ansible'ı kontrol makinesine kurmalıyız.
Kontrol Makinesi Gereksinimleri
Ansible, Python 2 (sürüm 2.6 veya 2.7) veya Python 3 (sürüm 3.5 ve üstü) yüklü herhangi bir makineden çalıştırılabilir.
Note - Windows kontrol makinesini desteklemez.
Ansible, varsayılan olarak ssh uzak makineyi yönetmek için.
Ansible herhangi bir veri tabanı eklemez. Başlatmak veya çalışmaya devam ettirmek için herhangi bir arka plan yordamı gerektirmez. Uzak makineleri yönetirken Ansibledoes notherhangi bir yazılımı yüklü veya üzerinde çalışır durumda bırakın. Bu nedenle, yeni bir sürüme geçerken nasıl yükseltileceği sorusu yoktur.
Ansible, yukarıda belirtilen gereksinimlere farklı şekillerde sahip olan kontrol makinesine kurulabilir. En son sürümü Apt, yum, pkg, pip, OpenCSW, pacman vb. Aracılığıyla yükleyebilirsiniz.
Ubuntu Makinesine Apt ile Kurulum
Ansible'ı kurmak için makinenizde PPA'yı yapılandırmanız gerekir. Bunun için aşağıdaki kod satırını çalıştırmanız gerekir -
$ sudo apt-get update $ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update
$ sudo apt-get install ansible
Yukarıdaki kod satırını çalıştırdıktan sonra, Ansible aracılığıyla uzak makineleri yönetmeye hazırsınız. Sadece Ansible versiyonunu çalıştırıp versiyonu kontrol edin ve Ansible'ın düzgün kurulup kurulmadığını kontrol edin.
Ansible, Ansible oyun kitaplarını ifade etmek için YAML sözdizimini kullanır. Bu bölüm YAML'ye genel bir bakış sağlar. Ansible, XML ve JSON gibi diğer veri formatlarıyla karşılaştırıldığında insanların anlaması, okuması ve yazması çok kolay olduğu için YAML kullanır.
Her YAML dosya isteğe bağlı olarak “---” ile başlar ve “...” ile biter.
YAML'yi Anlamak
Bu bölümde, YAML verilerinin temsil edildiği farklı yolları öğreneceğiz.
anahtar / değer çifti
YAML, verileri temsil etmek için basit anahtar / değer çifti kullanır. Sözlük, anahtar: değer çiftinde temsil edilir.
Note -: ile değer arasında boşluk olmalıdır.
Örnek: Öğrenci kaydı
--- #Optional YAML start syntax
james:
name: james john
rollNo: 34
div: B
sex: male
… #Optional YAML end syntax
Kısaltma
Sözlükleri temsil etmek için kısaltma da kullanabilirsiniz.
Misal
James: {name: james john, rollNo: 34, div: B, sex: male}
Temsil Listesi
Listeyi YAML'de de temsil edebiliriz. Listenin her elemanı (üyesi) yeni bir satıra “-“ (- ve boşluk) ile başlayan aynı girinti ile yazılmalıdır.
Misal
---
countries:
- America
- China
- Canada
- Iceland
…
Kısaltma
Listeleri temsil etmek için kısaltma da kullanabilirsiniz.
Misal
Countries: [‘America’, ‘China’, ‘Canada’, ‘Iceland’]
Sözlükler içinde liste
Listeyi sözlüklerin içinde kullanabiliriz, yani anahtarın değeri listedir.
Misal
---
james:
name: james john
rollNo: 34
div: B
sex: male
likes:
- maths
- physics
- english
…
Sözlük Listesi
Ayrıca sözlüklerin listesini de yapabiliriz.
Misal
---
- james:
name: james john
rollNo: 34
div: B
sex: male
likes:
- maths
- physics
- english
- robert:
name: robert richardson
rollNo: 53
div: B
sex: male
likes:
- biology
- chemistry
…
YAML, "|" kullanır birden çok satır gösterirken yeni satırları dahil etmek için ve birden çok satırı gösterirken yeni satırları gizlemek için ">". Bu nedenle büyük satırları okuyabilir ve düzenleyebiliriz. Her iki durumda da niyet göz ardı edilecektir.
Ayrıca temsil edebiliriz BooleanYAML'deki (Doğru / yanlış) değerler. neredeboolean değerler büyük / küçük harfe duyarlı olmayabilir.
Misal
---
- james:
name: james john
rollNo: 34
div: B
sex: male
likes:
- maths
- physics
- english
result:
maths: 87
chemistry: 45
biology: 56
physics: 70
english: 80
passed: TRUE
messageIncludeNewLines: |
Congratulation!!
You passed with 79%
messageExcludeNewLines: >
Congratulation!!
You passed with 79%
Ansible ile ilgili bazı genel kelimeler.
Service/Server - Hizmeti sağlayan makinede bir işlem.
Machine - Fiziksel bir sunucu, vm (sanal makine) veya bir konteyner.
Target machine - Ansible ile yapılandırmak üzere olduğumuz bir makine.
Task - Ansible tarafından yönetilen bir eylem (bunu çalıştırın, silin) vb.
Playbook - Ansible komutlarının yazıldığı ve yml'nin bir makinede yürütüldüğü yml dosyası.
Ad hoc komutlar, hızlı işlevleri gerçekleştirmek için ayrı ayrı çalıştırılabilen komutlardır. Bu komutların daha sonra gerçekleştirilmesine gerek yoktur.
Örneğin, tüm şirket sunucularınızı yeniden başlatmanız gerekir. Bunun için, Adhoc komutlarını '/usr/bin/ansible'.
Bu ad-hoc komutlar, yapılandırma yönetimi ve dağıtım için kullanılmaz, çünkü bu komutlar tek kullanımlıktır.
ansible-playbook, yapılandırma yönetimi ve dağıtım için kullanılır.
Paralellik ve Kabuk Komutları
Şirket sunucunuzu aynı anda 12 paralel çatalda yeniden başlatın. Bunun için bağlantı için SSHagent kurmamız gerekiyor.
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Bir gruptaki tüm şirket sunucularınız için yeniden başlatmayı 12 paralel çatalda 'abc' çalıştırmak için -
$ Ansible abc -a "/sbin/reboot" -f 12
Varsayılan olarak, Ansible yukarıdaki Ad-hoc komutlarını mevcut kullanıcı hesabından çalıştıracaktır. Bu davranışı değiştirmek istiyorsanız, Ad-hoc komutlarında kullanıcı adını aşağıdaki gibi iletmeniz gerekecektir -
$ Ansible abc -a "/sbin/reboot" -f 12 -u username
Dosya transferi
Yapmak için Ad-hoc komutlarını kullanabilirsiniz. SCP (Güvenli Kopyalama Protokolü) birden çok makinede paralel olarak çok sayıda dosya.
Dosyayı birçok sunucuya / makineye aktarma
$ Ansible abc -m copy -a "src = /etc/yum.conf dest = /tmp/yum.conf"
Yeni dizin oluşturma
$ Ansible abc -m file -a "dest = /path/user1/new mode = 777 owner = user1 group = user1 state = directory"
Tüm dizini ve dosyaları silme
$ Ansible abc -m file -a "dest = /path/user1/new state = absent"
Paketleri Yönetmek
Ad-hoc komutları yum ve apt için mevcuttur. Aşağıda yum kullanan bazı Ad-hoc komutları verilmiştir.
Aşağıdaki komut yum paketinin kurulu olup olmadığını kontrol eder, ancak güncellemez.
$ Ansible abc -m yum -a "name = demo-tomcat-1 state = present"
Aşağıdaki komut paketin kurulu olmadığını kontrol eder.
$ Ansible abc -m yum -a "name = demo-tomcat-1 state = absent"
Aşağıdaki komut, paketin en son sürümünün kurulu olup olmadığını kontrol eder.
$ Ansible abc -m yum -a "name = demo-tomcat-1 state = latest"
Gerçekleri Toplama
Gerçekler, başucu kitabında koşullu ifadeleri uygulamak için kullanılabilir. Aşağıdaki Ad-hoc komutuyla tüm gerçeklerinizin anlık bilgilerini bulabilirsiniz -
$ Ansible all -m setup
Bu bölümde Ansible'daki Başucu Kitapları hakkında bilgi edineceğiz.
Başucu kitapları Ansible kodunun yazıldığı dosyalardır. Başucu kitapları YAML formatında yazılmıştır. YAML, Yet Another Markup Language anlamına gelir.PlaybooksAnsible'ın temel özelliklerinden biridir ve Ansible'a ne çalıştıracağını söyleyin. Ansible için bir görev listesi içeren yapılacaklar listesi gibidirler.
Başucu kitapları, kullanıcının belirli bir makinede yürütmek istediği adımları içerir. Başucu kitapları sırayla çalıştırılır. Başucu kitapları, Ansible'ın tüm kullanım durumlarının yapı taşlarıdır.
Başucu Kitabı Yapısı
Her oyun kitabı, içindeki bir veya daha fazla oyunun bir toplamıdır. Oyun kitapları Plays kullanılarak yapılandırılmıştır. Bir oyun kitabının içinde birden fazla oyun olabilir.
Bir oyunun işlevi, belirli bir ana bilgisayara karşı tanımlanan bir dizi talimatın haritasını çıkarmaktır.
YAML katı bir yazılı dildir; bu nedenle, YAML dosyalarını yazarken ekstra özen gösterilmesi gerekir. Farklı YAML editörleri var ama biz notepad ++ gibi basit bir düzenleyici kullanmayı tercih edeceğiz. Notepad ++ 'ı açın ve aşağıdaki yaml'yi kopyalayıp yapıştırın ve dili YAML (Dil → YAML) olarak değiştirin.
Bir YAML, --- (3 tire) ile başlar
Bir Başucu Kitabı oluşturun
Örnek bir YAML dosyası yazarak başlayalım. Bir yaml dosyasında yazılan her bölümü inceleyeceğiz.
---
name: install and configure DB
hosts: testServer
become: yes
vars:
oracle_db_port_value : 1521
tasks:
-name: Install the Oracle DB
yum: <code to install the DB>
-name: Ensure the installed service is enabled and running
service:
name: <your service name>
Yukarıdakiler, bir başucu kitabının temel söz dizimini ele almaya çalıştığımız örnek bir Başucu Kitabıdır. Yukarıdaki içeriği bir dosyaya kaydedin.test.yml. Bir YAML sözdiziminin doğru girintiyi izlemesi ve sözdizimini yazarken biraz dikkatli olması gerekir.
Farklı YAML Etiketleri
Şimdi farklı YAML etiketlerini inceleyelim. Farklı etiketler aşağıda açıklanmıştır -
isim
Bu etiket Ansible başucu kitabının adını belirtir. Bu oyun kitabının ne yapacağı gibi. Oyun kitabına herhangi bir mantıksal isim verilebilir.
ana bilgisayarlar
Bu etiket, görevi çalıştırmak istediğimiz ana bilgisayarların veya ana bilgisayar grubunun listelerini belirtir. Ana bilgisayar alanı / etiketi zorunludur. Ansible'a listelenen görevleri hangi ana bilgisayarlarda çalıştıracağını söyler. Görevler aynı makinede veya uzaktaki bir makinede çalıştırılabilir. Görevler birden fazla makinede çalıştırılabilir ve bu nedenle ana bilgisayar etiketinin bir grup ana bilgisayar girişi de olabilir.
vars
Vars etiketi, başucu kitabınızda kullanabileceğiniz değişkenleri tanımlamanıza olanak tanır. Kullanım, herhangi bir programlama dilindeki değişkenlere benzer.
görevler
Tüm oyun kitapları, görevleri veya yürütülecek görevlerin bir listesini içermelidir. Görevler, birinin gerçekleştirilmesi gereken eylemlerin listesidir. Görevler alanı, görevin adını içerir. Bu, kullanıcı için yardım metni olarak çalışır. Zorunlu değildir, ancak başucu kitabında hata ayıklamada yararlıdır. Her görev dahili olarak modül adı verilen bir kod parçasına bağlanır. Yürütülmesi gereken bir modül ve yürütmek istediğiniz modül için gerekli olan argümanlar.
Roller, tamamen bağımsız veya birbirine bağlı değişken, görev, dosya, şablon ve modül koleksiyonları için bir çerçeve sağlar.
Ansible'da rol, bir başucu kitabını birden çok dosyaya bölmek için birincil mekanizmadır. Bu yazmayı basitleştirircomplex playbooksve yeniden kullanılmalarını kolaylaştırır. Başucu kitabının bozulması, başucu kitabını mantıksal olarak yeniden kullanılabilir bileşenlere ayırmanıza olanak tanır.
Her rol, temelde belirli bir işlevsellik veya istenen çıktıyla sınırlıdır ve bu sonucu sağlamak için gerekli tüm adımlar bu rolün içinde veya bağımlılıklar olarak listelenen diğer rollerde bulunur.
Roller oyun kitapları değildir. Roller, bağımsız olarak kullanılabilen ancak başucu kitaplarında kullanılması gereken küçük işlevlerdir. Bir rolü doğrudan yürütmenin bir yolu yoktur. Rollerin, rolün uygulanacağı ana bilgisayar için açık bir ayarı yoktur.
Üst düzey oyun kitapları, ana bilgisayarları envanter dosyanızdan bu ana bilgisayarlara uygulanması gereken rollere bağlayan köprüdür.
Yeni Bir Rol Oluşturmak
Rollerin dizin yapısı, yeni bir rol oluşturmak için çok önemlidir.
Rol Yapısı
Rollerin dosya sisteminde yapılandırılmış bir düzeni vardır. Varsayılan yapı değiştirilebilir ancak şimdilik varsayılanlara bağlı kalalım.
Her rol kendi içinde bir dizin ağacıdır. Rol adı, / roles dizini içindeki dizin adıdır.
$ ansible-galaxy -h
Kullanım
ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
Seçenekler
-h, --help - Bu yardım mesajını göster ve çık.
-v, --verbose - Ayrıntılı mod (daha fazlası için -vvv, bağlantıda hata ayıklamayı etkinleştirmek için -vvvv)
--version - Programın sürüm numarasını göster ve çık.
Rol Dizini Oluşturma
Yukarıdaki komut, rol dizinlerini oluşturmuştur.
$ ansible-galaxy init vivekrole
ERROR! The API server (https://galaxy.ansible.com/api/) is not responding, please try again later.
$ ansible-galaxy init --force --offline vivekrole - vivekrole was created successfully $ tree vivekrole/
vivekrole/
├── defaults
│ └── main.yml
├── files ├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md ├── tasks
│ └── main.yml
├── templates ├── tests │ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
Örnekte tüm dizinler kullanılmayacaktır ve örnekte bazılarının kullanımını göstereceğiz.
Başucu Kitabındaki Rolleri Kullanma
Bu, demo amacıyla yazdığımız başucu kitabının kodudur. Bu kod, vivek_orchestrate.yml başucu kitabına aittir. Ana bilgisayarları tanımladık:tomcat-node ve iki rolü aradı - install-tomcat ve start-tomcat.
Sorun ifadesi, Ansible aracılığıyla bir makineye yerleştirmemiz gereken bir savaşımızın olmasıdır.
---
- hosts: tomcat-node
roles:
- {role: install-tomcat}
- {role: start-tomcat}
Başucu kitabını çalıştırdığımız dizin yapımızın içeriği.
$ ls
ansible.cfg hosts roles vivek_orchestrate.retry vivek_orchestrate.yml
Her dizinin altında bir görev dizini vardır ve bir main.yml içerir. İnstall-tomcat'in main.yml içeriği -
---
#Install vivek artifacts
-
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
Tomcat startının main.yml dosyasının içeriği -
#Start Tomcat
-
block:
- name: Start Tomcat
command: <path of tomcat>/bin/startup.sh"
register: output
become: true
always:
- debug:
msg:
- "Start Tomcat task ended with message: {{output}}"
- "Tomcat started - {{output.changed}}"
Başucu kitabını rollere ayırmanın avantajı, Tomcat'i yükle özelliğini kullanmak isteyen herkesin Tomcat'i Yükle rolünü arayabilmesidir.
Bir Başucu Kitabını Rol Yapmak
Roller için değilse, ilgili rolün main.yml içeriği başucu kitabına kopyalanabilir ymldosya. Ancak modülerliğe sahip olmak için roller yaratıldı.
Yeniden kullanılabilir bir işlev olarak yeniden kullanılabilen herhangi bir mantıksal varlık, bu varlık role taşınabilir. Bunun örneği yukarıda gösterilmiştir
Oyun kitabını çalıştırmak için komutu çalıştırdım.
-vvv option for verbose output – verbose output
$ cd vivek-playbook/
Bu, başucu kitabını çalıştırma komutudur
$ sudo ansible-playbook -i hosts vivek_orchestrate.yml –vvv
-----------------------------------------------------------------
-----------------------------------------------------------------------
Çıktı
Üretilen çıktı ekranda görüldüğü gibidir -
Kullanma /users/demo/vivek-playbook/ansible.cfg yapılandırma dosyası olarak.
PLAYBOOK: vivek_orchestrate.yml *********************************************************
***********************************************************
1 plays in vivek_orchestrate.yml
PLAY [tomcat-node] **********************************************************************
******** *************************************************
TASK [Gathering Facts] *************************************************
****************************** *********************************************
Tuesday 21 November 2017 13:02:05 +0530 (0:00:00.056) 0:00:00.056 ******
Using module file /usr/lib/python2.7/sitepackages/ansible/modules/system/setup.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1511249525.88-259535494116870 `" &&
echo ansible-tmp-1511249525.88-259535494116870="`
echo /root/.ansible/tmp/ansibletmp-1511249525.88-259535494116870 `" ) && sleep 0'
<localhost> PUT /tmp/tmpPEPrkd TO
/root/.ansible/tmp/ansible-tmp-1511249525.88259535494116870/setup.py
<localhost> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/
/root/.ansible/tmp/ansible-tmp-1511249525.88259535494116870/setup.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/setup.py; rm -rf
"/root/.ansible/tmp/ansible-tmp1511249525.88-259535494116870/" > /dev/null 2>&1 && sleep 0'
ok: [server1]
META: ran handlers
TASK [install-tomcat : Install Tomcat artifacts] ***********************************
***************************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:5
Tuesday 21 November 2017 13:02:07 +0530 (0:00:01.515) 0:00:01.572 ******
Using module file /usr/lib/python2.7/sitepackages/ansible/modules/packaging/os/yum.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1511249527.34-40247177825302 `" && echo
ansibletmp-1511249527.34-40247177825302="` echo
/root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302 `" ) && sleep 0'
<localhost> PUT /tmp/tmpu83chg TO
/root/.ansible/tmp/ansible-tmp-1511249527.3440247177825302/yum.py
<localhost> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/
/root/.ansible/tmp/ansible-tmp-1511249527.3440247177825302/yum.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/yum.py; rm -rf
"/root/.ansible/tmp/ansible-tmp1511249527.34-40247177825302/" > /dev/null 2>
&1 && sleep 0'
changed: [server1] => {
"changed": true,
"invocation": {
"module_args": {
"conf_file": null,
"disable_gpg_check": false,
"disablerepo": null,
"enablerepo": null,
"exclude": null,
"install_repoquery": true,
"installroot": "/",
"list": null,
"name": ["demo-tomcat-1"],
"skip_broken": false,
"state": "present",
"update_cache": false,
"validate_certs": true
}
},
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: product-id,
search-disabled-repos,
subscriptionmanager\nThis system is not registered to Red Hat Subscription Management.
You can use subscription-manager to register.\nResolving Dependencies\n-->
Running transaction check\n--->
Package demo-tomcat-1.noarch 0:SNAPSHOT-1 will be installed\n--> Finished Dependency
Resolution\n\nDependencies Resolved\n
\n================================================================================\n
Package Arch Version Repository
Size\n==================================================================\nInstalling:\n
demo-tomcat-1 noarch SNAPSHOT-1 demo-repo1 7.1 M\n\nTransaction
Summary\n==================================================================\nInstall 1
Package\n\nTotal download size: 7.1 M\nInstalled size: 7.9 M\nDownloading
packages:\nRunning transaction
check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing :
demotomcat-1-SNAPSHOT-1.noarch 1/1 \n Verifying :
demo-tomcat-1-SNAPSHOT-1.noarch 1/1 \n\nInstalled:\n
demo-tomcat-1.noarch 0:SNAPSHOT-1 \n\nComplete!\n"
]
}
TASK [install-tomcat : debug] **********************************************************
***************************************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:11
Tuesday 21 November 2017 13:02:13 +0530 (0:00:06.757) 0:00:08.329 ******
ok: [server1] => {
"changed": false,
"msg": [
"Install Tomcat artifacts task ended with message: {
u'msg': u'', u'changed': True, u'results':
[u'Loaded plugins: product-id,
search-disabledrepos,
subscription-manager\\nThis system is not registered to Red Hat Subscription Management.
You can use subscription-manager to register.\\nResolving Dependencies\\n-->
Running transaction check\\n--->
Package demo-tomcat-1.noarch 0:SNAPSHOT-1 will be installed\\n-->
Finished Dependency Resolution\\n
\\nDependencies
Resolved\\n\\n==================================================================\\n
Package Arch Version Repository
Size\\n========================================================================
=====\\nInstalling:\\n demo-tomcat-1 noarch SNAPSHOT-1 demo-repo1 7.1 M\\n\\nTransaction
Summary\\n=========================================================\\nInstall 1
Package\\n\\nTotal download size: 7.1 M\\nInstalled size: 7.9 M\\nDownloading
packages:\\nRunning
transaction check\\nRunning transaction test\\nTransaction test succeeded\\nRunning
transaction\\n
Installing : demo-tomcat-1-SNAPSHOT-1.noarch 1/1 \\n Verifying :
demo-tomcat-1-SNAPSHOT-1.noarch
1/1 \\n\\nInstalled:\\n demo-tomcat-1.noarch 0:SNAPSHOT-1 \\n\\nComplete!\\n'], u'rc': 0
}",
"Installed Tomcat artifacts - True"
]
}
TASK [install-tomcat : Clean DEMO environment] ****************************************
************************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:19
Tuesday 21 November 2017 13:02:13 +0530 (0:00:00.057) 0:00:08.387 ******
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or
{% %}. Found: {{installationOutput.changed}}
Using module file /usr/lib/python2.7/sitepackages/ansible/modules/files/file.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1511249534.13-128345805983963 `" && echo
ansible-tmp-1511249534.13-128345805983963="` echo
/root/.ansible/tmp/ansibletmp-1511249534.13-128345805983963 `" ) && sleep 0'
<localhost> PUT /tmp/tmp0aXel7 TO
/root/.ansible/tmp/ansible-tmp-1511249534.13128345805983963/file.py
<localhost> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/
/root/.ansible/tmp/ansible-tmp-1511249534.13128345805983963/file.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/file.py; rm -rf
"/root/.ansible/tmp/ansible-tmp1511249534.13-128345805983963/" > /dev/null 2>&1
&& sleep 0'
changed: [server1] => {
"changed": true,
"diff": {
"after": {
"path": "/users/demo/DEMO",
"state": "absent"
},
"before": {
"path": "/users/demo/DEMO",
"state": "directory"
}
},
"invocation": {
"module_args": {
"attributes": null,
"backup": null,
"content": null,
"delimiter": null,
"diff_peek": null,
"directory_mode": null,
"follow": false,
"force": false,
"group": null,
"mode": null,
"original_basename": null,
"owner": null,
"path": "/users/demo/DEMO",
"recurse": false,
"regexp": null,
"remote_src": null,
"selevel": null,
"serole": null,
"setype": null,
"seuser": null,
"src": null,
"state": "absent",
"unsafe_writes": null,
"validate": null
}
},
"path": "/users/demo/DEMO",
"state": "absent"
}
TASK [install-tomcat : debug] ********************************************************
*************************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:29
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.257) 0:00:08.645 ******
ok: [server1] => {
"changed": false,
"msg": [
"Clean DEMO environment task ended with message:{u'diff': {u'after': {u'path':
u'/users/demo/DEMO', u'state': u'absent'},
u'before': {u'path': u'/users/demo/DEMO', u'state': u'directory'}}, u'state': u'absent',
u'changed': True, u'path': u'/users/demo/DEMO'}",
"check value :True"
]
}
TASK [install-tomcat : Copy Tomcat to user home] *************************************
********************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:37
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.055) 0:00:08.701 ******
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or
{% %}. Found: {{installationOutput.changed}}
Using module file /usr/lib/python2.7/sitepackages/ansible/modules/commands/command.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1511249534.43-41077200718443 `" && echo
ansibletmp-1511249534.43-41077200718443="` echo
/root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443 `" ) && sleep 0'
<localhost> PUT /tmp/tmp25deWs TO
/root/.ansible/tmp/ansible-tmp-1511249534.4341077200718443/command.py
<localhost> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443/
/root/.ansible/tmp/ansible-tmp-1511249534.4341077200718443/command.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-tmp1511249534.43-41077200718443/command.py; rm -rf
"/root/.ansible/tmp/ansibletmp-1511249534.43-41077200718443/" > /dev/null 2>&1
&& sleep 0'
changed: [server1] => {
"changed": true,
"cmd": [
"cp",
"-r",
"/opt/ansible/tomcat/demo",
"/users/demo/DEMO/"
],
"delta": "0:00:00.017923",
"end": "2017-11-21 13:02:14.547633",
"invocation": {
"module_args": {
"_raw_params": "cp -r /opt/ansible/tomcat/demo /users/demo/DEMO/",
"_uses_shell": false,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"warn": true
}
},
"rc": 0,
"start": "2017-11-21 13:02:14.529710",
"stderr": "",
"stderr_lines": [],
"stdout": "",
"stdout_lines": []
}
TASK [install-tomcat : debug] ********************************************************
**********************************************************
task path: /users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:47
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.260) 0:00:08.961 ******
ok: [server1] => {
"changed": false,
"msg": "Copy Tomcat to user home task ended with message {
'stderr_lines': [], u'changed': True, u'end': u'2017-11-21 13:02:14.547633', u'stdout':
u'', u'cmd': [u'cp', u'-r', u'/opt/ansible/tomcat/demo', u'/users/demo/DEMO/'], u'rc': 0,
u'start': u'2017-11-21 13:02:14.529710', u'stderr': u'', u'delta': u'0:00:00.017923',
'stdout_lines': []}"
}
TASK [start-tomcat : Start Tomcat] **************************************************
**********************************************************
task path: /users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:5
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.044) 0:00:09.006 ******
Using module file /usr/lib/python2.7/sitepackages/ansible/modules/commands/command.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1511249534.63-46501211251197 `" && echo
ansibletmp-1511249534.63-46501211251197="` echo
/root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197 `" ) && sleep 0'
<localhost> PUT /tmp/tmp9f06MQ TO
/root/.ansible/tmp/ansible-tmp-1511249534.6346501211251197/command.py
<localhost> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197/
/root/.ansible/tmp/ansible-tmp-1511249534.6346501211251197/command.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python
/root/.ansible/tmp/ansible-tmp1511249534.63-46501211251197/command.py; rm -rf
"/root/.ansible/tmp/ansibletmp-1511249534.63-46501211251197/" > /dev/null 2>&1
&& sleep 0'
changed: [server1] => {
"changed": true,
"cmd": [ "/users/demo/DEMO/bin/startup.sh" ],
"delta": "0:00:00.020024",
"end": "2017-11-21 13:02:14.741649",
"invocation": {
"module_args": {
"_raw_params": "/users/demo/DEMO/bin/startup.sh",
"_uses_shell": false,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"warn": true
}
},
"rc": 0,
"start": "2017-11-21 13:02:14.721625",
"stderr": "",
"stderr_lines": [],
"stdout": "Tomcat started.",
"stdout_lines": [ "Tomcat started." ]
}
TASK [start-tomcat : debug] *************************************************
**********************************************************************
task path: /users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:10
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.150) 0:00:09.156 ******
ok: [server1] => {
"changed": false,
"msg": [
"Start Tomcat task ended with message: {'
stderr_lines': [], u'changed': True, u'end': u'2017-11-21 13:02:14.741649', u'stdout':
u'Tomcat started.', u'cmd': [u'/users/demo/DEMO/bin/startup.sh'], u'rc': 0, u'start':
u'2017-11-21 13:02:14.721625', u'stderr': u'', u'delta': u'0:00:00.020024',
'stdout_lines': [u'Tomcat started.']}",
"Tomcat started - True"
]
}
META: ran handlers
META: ran handlers
PLAY RECAP *******************************************************************************
*********************************************************
server1 : ok = 9 changed = 4 unreachable = 0 failed = 0
Tuesday 21 November 2017 13:02:14 +0530 (0:00:00.042) 0:00:09.198 ******
===============================================================================
install-tomcat : Install Tomcat artifacts ------------------------------- 6.76s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:5 --------------
Gathering Facts --------------------------------------------------------- 1.52s
------------------------------------------------------------------------------
install-tomcat : Copy Tomcat to user home ------------------------------- 0.26s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:37 -------------
install-tomcat : Clean DEMO environment --------------------------------- 0.26s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:19 -------------
start-tomcat : Start Tomcat --------------------------------------------- 0.15s
/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:5 ----------------
install-tomcat : debug -------------------------------------------------- 0.06s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:11 -------------
install-tomcat : debug -------------------------------------------------- 0.06s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:29 -------------
install-tomcat : debug -------------------------------------------------- 0.04s
/users/demo/vivek-playbook/roles/install-tomcat/tasks/main.yml:47 -------------
start-tomcat : debug ---------------------------------------------------- 0.04s
/users/demo/vivek-playbook/roles/start-tomcat/tasks/main.yml:10 ---------------
Aşağıdaki URL'yi tıklayın ve aşağıda gösterildiği gibi bir sayfaya yönlendirileceksiniz - http://10.76.0.134:11677/HelloWorld/HelloWorld
Konuşlandırılan savaşın yalnızca "Merhaba Dünya" görüntüleyen bir sunucu uygulaması vardır. Ayrıntılı çıktı, ansible.cfg dosyasına eklenen giriş nedeniyle her bir görevin aldığı zamanı gösterir -
[defaults]
callback_whitelist = profile_tasks
Oyun kitaplarındaki değişkenler very similarherhangi bir programlama dilinde değişkenleri kullanmak. Bir değişkene bir değer atamanıza ve atamanıza ve bunu başucu kitabının herhangi bir yerinde kullanmanıza yardımcı olur. Değişkenlerin değerinin etrafına koşullar koyabilir ve buna göre bunları oyun kitabında kullanabilirsiniz.
Misal
- hosts : <your hosts>
vars:
tomcat_port : 8080
Yukarıdaki örnekte, bir değişken adı tanımladık tomcat_port ve 8080 değerini bu değişkene atadı ve bunu oyun kitabınızda gerektiği yerde kullanabilirsiniz.
Şimdi paylaşılan örnekten bir referans alarak. Aşağıdaki kod, rollerden birindendir (install-tomcat) -
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
Burada çıktı kullanılan değişkendir.
Yukarıdaki kodda kullanılan tüm anahtar kelimelerin üzerinden geçelim -
block - Belirli bir bloğu yürütmek için yanıltıcı sözdizimi.
name - Bloğun ilgili adı - bu, günlüğe kaydetmede kullanılır ve tüm blokların başarıyla yürütüldüğünde hata ayıklamaya yardımcı olur.
action- İşlem etiketinin yanındaki kod, yürütülecek görevdir. Eylem yine yaml'de kullanılan bir Ansible anahtar kelimesidir.
register - Eylemin çıktısı, kayıt anahtar sözcüğü kullanılarak kaydedilir ve Çıktı, eylem çıktısını tutan değişken adıdır.
always - Yine bir Ansible anahtar sözcüğü, aşağıda her zaman çalıştırılacağını belirtir.
msg - Mesajı görüntüler.
Değişken kullanımı - {{Çıktı}} ->
Bu, Değişken Çıktı'nın değerini okuyacaktır. Ayrıca msg sekmesinde kullanıldığı için çıktı değişkeninin değerini basacaktır.
Ek olarak, değişkenin alt özelliklerini de kullanabilirsiniz. {{Output.changed}} çıktısının değiştirilip değiştirilmediğinin kontrol edilmesi ve buna göre kullanılması durumunda olduğu gibi.
Başucu Kitaplarında Özel Durum İşleme
Ansible'da istisna işleme, herhangi bir programlama dilinde istisna işlemeye benzer. Başucu kitabındaki istisna işlemenin bir örneği aşağıda gösterilmiştir.
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
Aşağıda, istisna işleme için sözdizimi verilmiştir.
rescue ve always istisna işlemeye özgü anahtar kelimelerdir.
Blok, kodun yazıldığı yerdir (Unix makinesinde yürütülecek her şey).
Blok özelliğinin içine yazılan komut başarısız olursa, yürütme kurtarma bloğuna ulaşır ve yürütülür. Blok özelliği altındaki komutta bir hata olmaması durumunda kurtarma işlemi gerçekleştirilmeyecektir.
Always her durumda idam edilir.
Yani aynısını java ile karşılaştırırsak, o zaman try, catch ve nihayet blok'a benzer.
Buraya, Block benzer try block çalıştırılacak kodu nereye yazarsınız ve rescue benzer catch block ve always benzer finally.
Döngüler
Ansible'da Döngülerin kullanımını gösteren örnek aşağıdadır.
Görevler, tüm savaş dosyaları kümesini bir dizinden tomcat webapps klasörüne kopyalamaktır.
Aşağıdaki örnekte kullanılan komutların çoğu daha önce ele alınmıştır. Burada döngülerin kullanımına odaklanacağız.
Başlangıçta 'shell' komutunda ls * .war yaptık. Böylece, dizindeki tüm savaş dosyalarını listeleyecektir.
Bu komutun çıktısı, output adlı bir değişkende alınır.
Döngü yapmak için 'öğelerle birlikte' sözdizimi kullanılıyor.
with_items: "{{output.stdout_lines}}" -> output.stdout_lines bize satır satır çıktı verir ve sonra çıktıda Ansible'ın with_items komutu ile döngü oluştururuz.
Örnek çıktıyı, sadece bir kişinin with_items komutunda stdout_lines'ı nasıl kullandığımızı anlamasını sağlamak için eklemek.
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls *.war"
register: output
args:
chdir: /opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
Bloklar
Oyun kitabı toplamda bloklara bölünmüştür. Yürütülecek en küçük adım parçası blok halinde yazılmıştır. Spesifik talimatı bloklar halinde yazmak, işlevselliği ayırmaya ve gerekirse istisna işleme ile ele almaya yardımcı olur.
Blok örnekleri, yukarıdaki değişken kullanım, istisna işleme ve döngülerde ele alınmıştır.
Şartlılar
Koşul ifadeleri, kişinin bir koşula bağlı olarak belirli bir adımı çalıştırması gerektiğinde kullanılır.
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
Bu durumda, Eşittir, when koşulunda belirtildiği gibi test1 değişkeni eşit olduğu için yazdırılacaktır. when tüm programlama dillerinde olduğu gibi mantıksal VEYA ve mantıksal AND koşuluyla kullanılabilir.
Merhaba Vivek test1 değişkeninin değerini Merhaba Dünya demek için değiştirin ve çıktıyı görün.
Bu bölümde Ansible ile gelişmiş uygulamanın ne olduğunu öğreneceğiz.
Yürütmeyi Görevlere Göre Sınırlama
Bu, bir kişinin tüm oyun kitabını değil, yalnızca bir yürütmeyi yürütmesi gereken çok önemli bir yürütme stratejisidir. For example, sadece bir sunucuyu durdurmak (bir üretim sorunu olması durumunda) ve ardından yalnızca sunucuyu başlatmak istediğiniz bir yama uygulayarak göndermek istediğinizi varsayalım.
Burada orijinal oyun kitabında dur ve başla aynı oyun kitabındaki farklı rollerin bir parçasıydı, ancak bu, etiketlerin kullanımıyla ele alınabilir. Farklı rollere (sırayla görevleri olan) farklı etiketler sağlayabiliriz ve bu nedenle, yalnızca belirtilen rol / görev yürütüldüğünde yürütücü tarafından sağlanan etiketlere dayanarak. Dolayısıyla, verilen yukarıdaki örnek için, aşağıdaki gibi etiketler ekleyebiliriz -
- {role: start-tomcat, tags: ['install']}}
Aşağıdaki komut, etiketlerin kullanılmasına yardımcı olur -
ansible-playbook -i hosts <your yaml> --tags "install" -vvv
Yukarıdaki komutla yalnızca start-tomcat rolü çağrılacaktır. Sağlanan etiket büyük / küçük harfe duyarlıdır. Komuta tam eşleşmenin aktarıldığından emin olun.
Ana Bilgisayarlara Göre Yürütme Nasıl Sınırlandırılır
Belirli ana bilgisayarlarda belirli adımların yürütülmesini sağlamanın iki yolu vardır. Belirli bir rol için, belirli bir rolün çalıştırılması gereken belirli ana bilgisayarlara ilişkin ana bilgisayarlar tanımlanır.
Misal
- hosts: <A>
environment: "{{your env}}"
pre_tasks:
- debug: msg = "Started deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
- hosts: <B>
pre_tasks:
- debug: msg = "started....
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed the task..
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
Yukarıdaki örneğe göre, sağlanan ana bilgisayarlara bağlı olarak, ilgili roller yalnızca çağrılacaktır. Şimdi ana bilgisayarlarım A ve B, ana makinelerde (envanter dosyası) tanımlandı.
Alternatif Çözüm
Farklı bir çözüm, başucu kitabının ana bilgisayarlarını bir değişken kullanarak tanımlamak ve ardından belirli bir ana bilgisayar adresini kullanarak --extra-vars -
# file: user.yml (playbook)
---
- hosts: '{{ target }}'
user: ...
playbook contd….
Başucu Kitabını Çalıştırmak
ansible-playbook user.yml --extra-vars "target = "<your host variable>"
{{Hedef}} tanımlanmamışsa başucu kitabı hiçbir şey yapmaz. Gerekirse hosts dosyasından bir grup da geçirilebilir. Ekstra değişkenler sağlanmadığında bu zarar vermez.
Tek bir ana bilgisayarı hedefleyen başucu kitabı
$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts
Ansible oyun kitaplarında hata ayıklamak için en yaygın stratejiler aşağıda verilen modülleri kullanmaktır -
Hata Ayıklama ve Kayıt
Bu ikisi Ansible'da bulunan modüllerdir. Hata ayıklama amacıyla, iki modülü mantıklı bir şekilde kullanmamız gerekir. Örnekler aşağıda gösterilmiştir.
Ayrıntıları Kullan
Ansible komutu ile ayrıntı düzeyi sağlanabilir. Komutları ayrıntı düzeyi bir (-v) veya iki (-vv) ile çalıştırabilirsiniz.
Önemli noktalar
Bu bölümde, birkaç kavramı anlamak için birkaç örnek üzerinden geçeceğiz.
Bir değişkenle başlayan bir argümandan alıntı yapmıyorsanız. Örneğin,
vars:
age_path: {{vivek.name}}/demo/
{{vivek.name}}
Bu bir hata oluşturacaktır.
Çözüm
vars:
age_path: "{{vivek.name}}/demo/" – marked in yellow is the fix.
How to use register -> Copy this code into a yml file say test.yml and run it
---
#Tsting
- hosts: tomcat-node
tasks:
- shell: /usr/bin/uptime
register: myvar
- name: Just debugging usage
debug: var = myvar
Bu kodu Ansible-playbook -i hosts test.yml komutuyla çalıştırdığımda çıktıyı aşağıda gösterildiği gibi alıyorum.
Yaml'ı görürseniz, bir komutun çıktısını bir değişkene kaydettik - myvar ve sadece çıktıyı yazdırdı.
Sarı ile işaretlenmiş metin, daha fazla akış kontrolü için kullanılabilecek olan-myvar değişkeninin özelliğini anlatır. Bu şekilde, belirli bir değişkenin açığa çıkardığı özellikleri bulabiliriz. Aşağıdaki hata ayıklama komutu buna yardımcı olur.
$ ansible-playbook -i hosts test.yml
PLAY [tomcat-node] ***************************************************************
**************** ****************************************************************
*************** ******************************
TASK [Gathering Facts] *****************************************************************
************** *****************************************************************
************** **************************
Monday 05 February 2018 17:33:14 +0530 (0:00:00.051) 0:00:00.051 *******
ok: [server1]
TASK [command] ******************************************************************
************* ******************************************************************
************* **********************************
Monday 05 February 2018 17:33:16 +0530 (0:00:01.697) 0:00:01.748 *******
changed: [server1]
TASK [Just debugging usage] ******************************************************************
************* ******************************************************************
************* *********************
Monday 05 February 2018 17:33:16 +0530 (0:00:00.226) 0:00:01.974 *******
ok: [server1] => {
"myvar": {
"changed": true,
"cmd": "/usr/bin/uptime",
"delta": "0:00:00.011306",
"end": "2018-02-05 17:33:16.424647",
"rc": 0,
"start": "2018-02-05 17:33:16.413341",
"stderr": "",
"stderr_lines": [],
"stdout": " 17:33:16 up 7 days, 35 min, 1 user, load average: 0.18, 0.15, 0.14",
"stdout_lines": [
" 17:33:16 up 7 days, 35 min, 1 user, load average: 0.18, 0.15, 0.14"
]
}
}
PLAY RECAP ****************************************************************************
**********************************************************************************
**************************************
server1 : ok = 3 changed = 1 unreachable = 0 failed = 0
Yaygın Başucu Kitabı Sorunları
Bu bölümde, birkaç genel başucu kitabı sorununu öğreneceğiz. Sorunlar -
- Quoting
- Indentation
Başucu kitabı yaml biçiminde yazılmıştır ve yukarıdaki ikisi yaml / playbook'taki en yaygın sorunlardır.
Yaml sekme tabanlı girintiyi desteklemez ve boşluk tabanlı girintiyi destekler, bu nedenle aynı konuda dikkatli olunması gerekir.
Note - yaml yazmayı tamamladığınızda bu siteyi açın (https://editor.swagger.io/) ve yaml'ın düzgün bir şekilde derlendiğinden emin olmak için sol tarafa yaml'ınızı kopyalayıp yapıştırın. Bu sadece bir ipucu.
Swagger, uyarıdaki hataları olduğu kadar hatayı da nitelendirir.