Ansible Tutorial for begyndere: Playbook, Commands & Eksempel

Hvad er Ansible?

Ansible er et open source-automatiserings- og orkestreringsvรฆrktรธj til levering af software, konfigurationsstyring og softwareimplementering. Ansible kan nemt kรธre og konfigurere Unix-lignende systemer samt Windows systemer til at levere infrastruktur som kode. Den indeholder sit eget deklarative programmeringssprog til systemkonfiguration og -styring.

Ansible er populรฆr pรฅ grund af sin enkelhed i installationen, brugervenlighed, hvad angรฅr forbindelsen til klienter, dens mangel pรฅ agent for Ansible-klienter og de mange fรฆrdigheder. Den fungerer ved at forbinde via SSH til klienterne, sรฅ det behรธver ikke en speciel agent pรฅ klientsiden, og ved at skubbe moduler til klienterne, bliver modulerne sรฅ eksekveret lokalt pรฅ klientsiden og outputtet skubbes tilbage til Ansible serveren.

Da det bruger SSH, kan det meget nemt oprette forbindelse til klienter ved hjรฆlp af SSH-nรธgler, hvilket forenkler hele processen. Klientoplysninger, sรฅsom vรฆrtsnavne eller IP-adresser og SSH-porte, gemmes i filer kaldet inventarfiler. Nรฅr du har oprettet en inventarfil og udfyldt den, kan ansible bruge den.

Hvorfor bruge Ansible?

Her er nogle vigtige fordele ved at bruge Ansible

  • En af de vรฆsentligste fordele ved Ansible er, at det er gratis at bruge af alle.
  • Det krรฆver ingen sรฆrlige systemadministratorfรฆrdigheder at installere og bruge Ansible, og den officielle dokumentation er meget omfattende.
  • Dens modularitet med hensyn til plugins, moduler, opgรธrelser og playbooks gรธr Ansible til den perfekte ledsager til at orkestrere store miljรธer.
  • Ansible er meget let og konsistent, og der er ingen begrรฆnsninger vedrรธrende operativsystemet eller underliggende hardware.
  • Det er ogsรฅ meget sikkert pรฅ grund af dets agentlรธse muligheder og pรฅ grund af brugen af โ€‹โ€‹OpenSSH sikkerhedsfunktioner.
  • En anden fordel, der tilskynder til brugen af โ€‹โ€‹Ansible, er dens glatte indlรฆringskurve bestemt af den omfattende dokumentation og let at lรฆre struktur og konfiguration.

Ansibles historie

Her er vigtige landemรฆrker fra ansibles historie:

  • I februar 2012 begyndte Ansible-projektet. Det blev fรธrst udviklet af Michael DeHaan, skaberen af โ€‹โ€‹Cobbler and Func, Fedora Unified Network Controller.
  • Oprindeligt kaldet AnsibleWorks Inc, virksomheden, der finansierede ansible-vรฆrktรธjet, blev erhvervet i 2015 af RedHat og senere, sammen med RedHat, flyttet ind under paraplyen af IBM.
  • I nutiden er Ansible inkluderet i distributioner som Fedora Linux, RHEL, Centos og Oracle Linux.

Vigtige termer brugt i Ansible

  • Ansible server

    Maskinen, hvor Ansible er installeret, og hvorfra alle opgaver og spillebรธger vil blive kรธrt

  • Moduler

    Grundlรฆggende er et modul en kommando eller et sรฆt af lignende Ansible-kommandoer beregnet til at blive udfรธrt pรฅ klientsiden

  • Opgaver

    En opgave er et afsnit, der bestรฅr af en enkelt procedure, der skal udfรธres

  • roller

    En mรฅde at organisere opgaver og relaterede filer pรฅ, som senere skal kaldes i en spillebog

  • Faktum

    Information hentet fra klientsystemet fra de globale variabler med indsamlingsfakta-operationen

  • Inventory

    Fil, der indeholder data om de mulige klientservere. Defineret i senere eksempler som vรฆrtsfil

  • Leg

    Udfรธrelse af en spillebog

  • handler

    Opgave som kun kaldes hvis der er en anmelder til stede

  • Underretning

    Sektion tilskrevet en opgave, der kalder en behandler, hvis output รฆndres

  • tag

    Navn sat til en opgave, som kan bruges senere til at udstede netop den specifikke opgave eller gruppe af opgaver.

Ansible installation i Linux

Nรฅr du har sammenlignet og vejet dine muligheder og besluttet at gรฅ efter Ansible, er nรฆste skridt at fรฅ det installeret pรฅ dit system. Vi vil gennemgรฅ installationstrinene i forskellige Linux distributioner, de mest populรฆre, i den nรฆste lille tutorial.

Installer Ansible pรฅ Centos/RedHat-systemer

Trin 1) Installer EPEL repo

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

Trin 2) Installer en passende pakke

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

Installer Ansible pรฅ Centos/RedHat-systemer

Installer ansible pรฅ Ubuntu/Debian-systemer

Trin 1) Udfรธr en opdatering af pakkerne

$ sudo apt update

Trin 2) Installer pakken software-egenskaber-fรฆlles

$ sudo apt install software-properties-common

Trin 3) Installer et muligt personligt pakkearkiv

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

Trin 4) Installer ansible

$ sudo apt update
$ sudo apt install ansible

Ansible ad-hoc kommandoer

En af de enkleste mรฅder, Ansible kan bruges pรฅ, er ved at bruge ad-hoc-kommandoer. Disse kan bruges, nรฅr du vil udstede nogle kommandoer pรฅ en server eller en flok servere. Ad-hoc kommandoer gemmes ikke til fremtidig brug, men reprรฆsenterer en hurtig mรฅde at interagere med de รธnskede servere pรฅ.

Til denne Ansible-tutorial vil der blive konfigureret en simpel to-servere vรฆrtsfil, der indeholder host1 og host2.

Du kan sikre dig, at vรฆrterne er tilgรฆngelige fra den relevante server ved at udstede en ping-kommando pรฅ alle vรฆrter.

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

Ansible ad-hoc kommandoer

Forklaring:

  1. Status for kommandoen, i dette tilfรฆlde SUCCES
  2. Vรฆrt, som kommandoen kรธrte pรฅ
  3. Kommandoen udstedt via parameteren -m, i dette tilfรฆlde ping
  4. Med parameteren -i kan du pege pรฅ hosts-filen.


Du kan kun udstede den samme kommando pรฅ en bestemt vรฆrt, hvis det er nรธdvendigt.

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

Ansible ad-hoc kommandoer

Forklaring:

  1. Limit parameter kan kun bruges til at udstede kommandoer pรฅ specifikke vรฆrter i vรฆrtens fil
  2. Navnet pรฅ vรฆrten som defineret i inventarfilen

Hvis du har brug for at kopiere en fil til flere destinationer hurtigt, kan du bruge kopimodulet i ansible, som bruger SCP. Sรฅ kommandoen og dens output ser ud som nedenfor:

[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 ad-hoc kommandoer

Forklaring:

  1. Kopimodul defineret
  2. Modulargumenter er i dette tilfรฆlde kildens absolutte sti og destinationens absolutte sti.
  3. Ansible kommandooutput, der afspejler succesen med kopikommandoen og andre detaljer som sha1 eller md5 kontrolsummer for filintegritetskontrol og metadata som ejer, stรธrrelse eller tilladelser. Det er nemt at have en pakke installeret pรฅ en masse servere. Ansible har flere moduler, der interagerer med brugte installatรธrer, sรฅsom yum, apt, dnf osv.

I det nรฆste eksempel vil du finde ud af, hvordan du installerer en pakke via yum-modulet pรฅ to Centos-vรฆrter.

[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 ad-hoc kommandoer

Forklaring:

  1. Yum-modulet bruges i dette eksempel
  2. Det definerer modulargumenterne, og i dette tilfรฆlde vil du vรฆlge navnet pรฅ pakken og dens tilstand. Hvis staten for eksempel er fravรฆrende, vil pakken blive gennemsรธgt, og hvis den findes, fjernes den
  3. Nรฅr den er farvet i gul, vil du se output fra den mulige kommando med รฆndret tilstand, hvilket betyder i dette tilfรฆlde, at pakken blev fundet og installeret.
  4. Status for yum install-kommandoen udstedt via ansible. I dette tilfรฆlde blev pakken ncdu.x86_64 0:1.14-1.el7 installeret.

Selvfรธlgelig kan alle yum-installationsmulighederne bruges via ansible, inklusive opdatering, installer, seneste version eller fjern.

I eksemplet nedenfor blev den samme kommando udstedt for at fjerne den tidligere installerede ncdu-pakke.

[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 ad-hoc kommandoer

Forklaring:

  1. Outputtet af yum-kommandoen viser, at pakken blev fjernet.

En anden nyttig og vรฆsentlig funktion, som ansible bruger til at interagere med klientens server, er at indsamle nogle fakta om systemet. Sรฅ det henter hardware-, software- og versionsinformation fra systemet og gemmer hver vรฆrdi i en variabel, som senere kan bruges.

Hvis du har brug for detaljerede oplysninger om de systemer, der skal รฆndres via ansible, kan den nรฆste kommando bruges. Opsรฆtningsmodulet samler fakta fra systemvariablerne.

Ansible ad-hoc kommandoer

Ansible Playbooks

Ansible Playbooks er mรฅden at sende kommandoer til fjernsystemer gennem scripts. Ansible playbooks bruges til at konfigurere komplekse systemmiljรธer for at รธge fleksibiliteten ved at udfรธre et script til et eller flere systemer. Ansible playbooks har en tendens til at vรฆre mere et konfigurationssprog end et programmeringssprog.

Ansible playbook-kommandoer bruger YAML-format, sรฅ der er ikke meget behov for syntaks, men indrykning skal respekteres. Som navnet siger, er en legebog en samling skuespil. Gennem en playbook kan du udpege bestemte roller til nogle vรฆrter og andre roller til andre vรฆrter. Ved at gรธre det kan du orkestrere flere servere i meget forskellige scenarier, alt sammen i รฉn spillebog.

For at have alle detaljerne prรฆcise, fรธr vi fortsรฆtter med eksempler pรฅ Ansible playbook, skal vi fรธrst definere en opgave. Disse er grรฆnsefladen til mulige moduler til roller og spillebรธger.

Lad os nu lรฆre Ansible playbook gennem et eksempel med en playbook med en play, der indeholder flere opgaver som nedenfor:

---

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

Ansible Playbooks

I ovenstรฅende Ansible playbook-eksempel er gruppe1 af vรฆrter i vรฆrtens fil mรฅlrettet mod lldpad-pakkeinstallation ved hjรฆlp af yum-modulet, og bagefter startes den service lldpad, der er oprettet efter installationen, ved at bruge det servicemodul, der mest bruges til at interagere med systemd-ensemble.

Forklaring:

  1. Gruppe af vรฆrter, som spillebogen vil kรธre pรฅ
  2. Yum-modulet bruges i denne opgave til lldpad-installation
  3. Servicemodulet bruges til at kontrollere, om tjenesten er oppe og kรธre efter installationen

Hver mulig spillebog fungerer med en inventarfil. Inventarfilen indeholder en liste over servere opdelt i grupper for bedre kontrol med detaljer som f.eks IP-adresse og SSH-port for hver vรฆrt.

Inventarfilen, du kan bruge til dette Ansible playbook-eksempel, ser ud som nedenfor. Der er to grupper, navngivet gruppe1 og gruppe2, der hver indeholder henholdsvis vรฆrt1 og vรฆrt2.

[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 Playbooks

Forklaring:

  1. Gruppe navn
  2. Vรฆrtsnavn med IP-adresse og ssh-port, i dette tilfรฆlde standard, 22.

Et andet nyttigt Ansible playbook-eksempel, der denne gang indeholder to afspilninger for to vรฆrter, er det nรฆste. For den fรธrste gruppe af vรฆrter, gruppe1, vil selinux vรฆre aktiveret. Hvis det er aktiveret, vises en meddelelse pรฅ vรฆrtens skรฆrm.

For den anden gruppe af vรฆrter vil httpd-pakken kun blive installeret, hvis ansible_os_familien er RedHat og ansible_system_vendor er HP.

Ansible_os_family og ansible_system_vendor er variabler samlet med indsamle_fakta mulighed og kan bruges som i dette betingede eksempel.

---

- 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 Playbooks

Forklaring:

  1. Eksempel pรฅ when-sรฆtningen, I dette tilfรฆlde, nรฅr OS-typen er Debian. Variablen ansible_os_family indsamles via funktionen gather_facts.
  2. Opgaveoutputtet er registreret til fremtidig brug med dets navn enable_selinux
  3. Endnu et eksempel pรฅ nรฅr-klausulen. I dette tilfรฆlde vil en meddelelse blive vist til vรฆrtsbrugeren, hvis SELinux faktisk var aktiveret fรธr.
  4. Endnu et eksempel pรฅ nรฅr-klausulen, der bestรฅr af to regler

Udover opgaver er der ogsรฅ nogle sรฆrlige opgaver kaldet handlere. Hรฅndtere skal have et unikt navn i hele spillebogen. Disse fungerer pรฅ samme mรฅde som en almindelig opgave, men en behandler kan underrettes via en anmelder.

Hvis en handler ikke fรฅr besked under kรธrslen af โ€‹โ€‹afspilningsbogen, kรธrer den ikke. Men hvis mere end รฉn opgave giver en handler besked, vil dette kun kรธre รฉn gang, efter at alle opgaverne er afsluttet.

I eksemplet vist nedenfor kan du se, hvordan en specifik opgave har en meddelelsessektion, som kalder pรฅ en anden opgave. Hvis outputtet af den fรธrste opgave รฆndres, kaldes en handleropgave. Det bedste eksempel er at fรฅ รฆndret en konfigurationsfil og bagefter genstarte den specifikke tjeneste.

---

- 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

I dette tilfรฆlde, hvis den fรธrste opgave, "sshd config file modify port" รฆndres, hvilket betyder, at hvis porten ikke er 28675 i fรธrste omgang, sรฅ vil den blive รฆndret, og opgaven vil underrette handleren med samme navn om at kรธre , og det vil genstarte sshd-tjenesten.

Ansible Playbooks

Forklaring:

  1. Eksempel pรฅ en anmelder
  2. Eksempel pรฅ en handler

Ansible roller

Nรฅr man har med omfattende spillebรธger at gรธre, er det nemmere at opdele opgaverne i roller. Dette hjรฆlper ogsรฅ med at genbruge rollerne i fremtiden. Roller er en samling af opgaver, som kan flyttes fra en playbook til en anden, kan kรธres uafhรฆngigt, men kun gennem en playbook-fil.

Roller er gemt i separate mapper og har en bestemt mappestruktur.

[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

Yaml-filen i standardbiblioteket indeholder en liste over standardvariabler, der skal bruges sammen med spillebogen. Handlerbiblioteket bruges til at gemme handlere. Meta-mappen formodes at have information om forfatteren og rolleafhรฆngigheder. I opgavebiblioteket er der den primรฆre yaml-fil for rollen.

Testbiblioteket indeholder en prรธve yaml playbook-fil og en prรธveopgรธrelsesfil og bruges mest til testformรฅl, fรธr den faktiske rolle oprettes.

Vars-mappen indeholder yaml-filen, hvori alle de variabler, der bruges af rollen, vil blive defineret. Biblioteksskabelonerne og katalogfilerne skal indeholde filer og skabeloner, som vil blive brugt af opgaverne i rollen.

For at oprette bibliotekstrรฆet til en rolle, skal du bruge fรธlgende kommando med den sidste parameter, rollenavnet:

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

Ansible fungerer ogsรฅ godt med skabeloner. Som et sprog til skabeloner bruger det Jinja2.

I det nรฆste eksempel vil du finde ud af, hvordan en grundlรฆggende jinja2-skabelon ser ud og bruge den i en rolle.

Ved kรธrselstiden, afhรฆngigt af, lad os sige, i hvilket datacenter din server er placeret, kan du vรฆlge mellem mere end รฉn navneserver, der hver svarer til et datacenter, ved hjรฆlp af variablen "resolver_ip_addresses."

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

options timeout:1
options attempts:5
options rotate

I dette eksempel er der defineret nogle variabler i playbook-mappen, inklusive en variabel ved navn resolver_ip_addresses med forskellige vรฆrdier afhรฆngigt af datacenteret.

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

Ansible roller

Forklaring:

  1. Navn pรฅ skabelonen, der skal bruges. Skabelon er placeret i skabeloner dir i rollestien
  2. Destinationsstien til filnavnet, der skal erstattes med skabelonen, pรฅ klientsiden.
  3. Tilladelser for destinationsfilen

Rolleopgaverne kan ogsรฅ have et tagfelt, som har et navn. Mere end รฉn opgave kan dele det samme tag. Nรฅr du kรธrer en ansible playbook, kan du ogsรฅ angive tagget, sรฅ disse opgaver vil blive udfรธrt.

Ansible Case Study

I dette afsnit vil vi analysere et casestudie af en essentiel ansible legebog, der har tre roller. Formรฅlet med dette er at give et praktisk eksempel pรฅ, hvad vi talte om fรธr. Nogle af de eksempler, der er brugt fรธr i denne Ansible playbook-vejledning, vil blive tilpasset og brugt i denne playbook.

Nedenfor er biblioteksstrukturen for spillebogen. Yaml-filen, der vil blive brugt, vil vรฆre p4.yml.

[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

Spillebogen har tre roller, en kaldet resolver, der sรฆtter en specifik navneserver pรฅ serverne ved at kopiere en fil fra serveren til /etc/resolv.conf destinationen. En anden kaldes httpd, og den installerer httpd-pakken med yum-modulet, og den tredje aktiverer SELinux og giver den loggede bruger besked om at genstarte systemet. Hver rolle blev oprettet ved hjรฆlp af ansible-galaxy kommando.

Resolver rolle, main.yml opgave:

Ansible Case Study

Httpd rolle, main.yml opgave:

Ansible Case Study

Selinux-rolle, main.yml-opgave:

Ansible Case Study

Nedenfor er p4.yml playbook defineret. Det vil kรธre pรฅ alle vรฆrter, hvis ikke andet er angivet i kommandolinjen, det vil kรธre som root-bruger pรฅ port 22 (SSH), det vil indsamle fakta, fรธr det kรธrer rollerne, og det vil kรธre alle tre roller nรฆvnt fรธr. Hver rolle kan kรธres uafhรฆngigt ved at angive tagget i ansible-playbook-kommandolinjen med parameteren โ€“t.

---

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

Kรธrsel af p4.yml playbook pรฅ to vรฆrter og fortolkning af outputtet. Den samme kommando kan kรธres med parameteren โ€“check for en tรธrkรธrsel. Hvis du vil bruge adgangskodegodkendelse, skal du bruge -k parameter.

Ansible Case Study

Forklaring:

  1. Ansible-playbook-kommando, der kรธrer p4.yml
  2. Playbook springer SELinux-rollen over, fordi den allerede er aktiveret.
  3. Ansible fandt ud af, at httpd-pakken allerede er installeret, sรฅ den returnerer ok.
  4. Resolver blev indstillet, og rolleresolver fik status รฆndret.

Ansible Commands Cheat Sheet

Installer EPEL repo pรฅ Centos/RHEL-systemer

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

Installer en passende pakke pรฅ Centos/RHEL-systemer

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

Udfรธr en opdatering af pakkerne pรฅ Debian/Ubuntu systemer

$ sudo apt update

Installer software-properties-common-pakken pรฅ Debian/Ubuntu systemer

$ sudo apt install software-properties-common

Installer et passende personligt pakkearkiv pรฅ Debian/Ubuntu systemer

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

Installer ansible pรฅ Debian/Ubuntu systemer

$ sudo apt update
$ sudo apt install ansible

Udsted en ping-kommando pรฅ alle servere, der er defineret i inventarfilen med navnet hosts

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

Udsted kun en ping-kommando pรฅ host2

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

Kopier filen "testfile" pรฅ alle vรฆrter i inventarfilen

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

Installer ncdu-pakken pรฅ alle vรฆrter

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

Fjern ncdu-pakken pรฅ alle vรฆrter

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

Byg katalogstrukturen for rollen med navnet rolle1.

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

Tรธrlรธb p4.yml spillebog

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

Kรธr p4.yml playbook med adgangskodegodkendelse for alle vรฆrter

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

Resumรฉ

I en verden med teknologi, der konstant รฆndrer sig i et hurtigt tempo og vokser utrolig hurtigt pรฅ samme tid, skal systemadministratorer og devops-ingeniรธrer tรฆnke pรฅ forskellige tilgange til, hvordan man automatiserer rutineopgaver og orkestrerer store puljer af servere.

Mens der er mange alternativ til Ansible (Kok, Puppet) derude, der gรธr det samme med nogle forskelle, formรฅede Ansible at hรฆve sig over dem alle med sin enkelhed, forbedrede sikkerhed og vigtigst af alt sin glatte indlรฆringskurve. Pรฅ grund af disse kvaliteter og hurtige indfรธrelse af Ansible, har vi lavet en tutorial fuld af eksempler, sรฅ du kan fรฅ en endnu mere problemfri fรธrste oplevelse med at arbejde med Ansible.

I denne Ansible grundlรฆggende tutorial beskrev vi ansible og talte lidt om dens historie. Vi nรฆvnte Ansibles stรฆrke sider og de fordele, som ansible kan give til automatisering og orkestrering af infrastrukturer af forskellig stรธrrelse. Vi definerede de vรฆsentlige ansible brugte termer og definerede strukturen af โ€‹โ€‹Ansible playbooks. Grundige eksempler ledsagede al information med detaljerede forklaringer.

Opsummer dette indlรฆg med: