Ansible veiledning for nybegynnere: Playbook, kommandoer og eksempel

Hva er Ansible?

Ansible er et รฅpen kildekode-automatiserings- og orkestreringsverktรธy for programvarelevering, konfigurasjonsadministrasjon og programvaredistribusjon. Ansible kan enkelt kjรธre og konfigurere Unix-lignende systemer i tillegg Windows systemer for รฅ tilby infrastruktur som kode. Den inneholder sitt eget deklarative programmeringssprรฅk for systemkonfigurasjon og -administrasjon.

Ansible er populรฆrt for sin enkelhet i installasjonen, brukervennligheten nรฅr det gjelder tilkobling til klienter, mangelen pรฅ agent for Ansible-klienter og mangfoldet av ferdigheter. Den fungerer ved รฅ koble til via SSH til klientene, sรฅ den trenger ikke en spesiell agent pรฅ klientsiden, og ved รฅ skyve moduler til klientene, blir modulene deretter utfรธrt lokalt pรฅ klientsiden og utdataene skyves tilbake til Ansible-serveren.

Siden den bruker SSH, kan den veldig enkelt koble til klienter ved hjelp av SSH-nรธkler, noe som forenkler hele prosessen. Klientdetaljer, som vertsnavn eller IP-adresser og SSH-porter, lagres i filer som kalles inventarfiler. Nรฅr du har opprettet en inventarfil og fylt den ut, kan ansible bruke den.

Hvorfor bruke Ansible?

Her er noen viktige fordeler med รฅ bruke Ansible

  • En av de viktigste fordelene med Ansible er at den er gratis รฅ bruke av alle.
  • Den trenger ingen spesielle systemadministratorferdigheter for รฅ installere og bruke Ansible, og den offisielle dokumentasjonen er svรฆrt omfattende.
  • Modulariteten angรฅende plugins, moduler, inventar og spillebรธker gjรธr Ansible til den perfekte fรธlgesvennen for รฅ orkestrere store miljรธer.
  • Ansible er veldig lett og konsekvent, og ingen begrensninger angรฅende operativsystemet eller underliggende maskinvare er tilstede.
  • Den er ogsรฅ veldig sikker pรฅ grunn av dens agentlรธse evner og pรฅ grunn av bruken av OpenSSH sikkerhetsfunksjoner.
  • En annen fordel som oppmuntrer til bruk av Ansible, er dens jevne lรฆringskurve bestemt av den omfattende dokumentasjonen og strukturen og konfigurasjonen som er lett รฅ lรฆre.

Ansibles historie

Her er viktige landemerker fra ansibles historie:

  • I februar 2012 startet Ansible-prosjektet. Den ble fรธrst utviklet av Michael DeHaan, skaperen av Cobbler and Func, Fedora Unified Network Controller.
  • Opprinnelig kalt AnsibleWorks Inc, selskapet som finansierte ansible-verktรธyet ble kjรธpt opp i 2015 av RedHat og senere, sammen med RedHat, flyttet under paraplyen til IBM.
  • I nรฅtiden kommer Ansible inkludert i distribusjoner som Fedora Linux, RHEL, Centos og Oracle Linux.

Viktige termer brukt i Ansible

  • Ansible server

    Maskinen der Ansible er installert og som alle oppgaver og spillebรธker skal kjรธres fra

  • Moduler

    I utgangspunktet er en modul en kommando eller et sett med lignende Ansible-kommandoer ment รฅ bli utfรธrt pรฅ klientsiden

  • Oppgave

    En oppgave er en del som bestรฅr av รฉn enkelt prosedyre som skal fullfรธres

  • Rolle

    En mรฅte รฅ organisere oppgaver og relaterte filer for senere รฅ bli kalt inn i en spillebok

  • Faktum

    Informasjon hentet fra klientsystemet fra de globale variablene med samle-fakta-operasjonen

  • Varelager

    Fil som inneholder data om mulige klientservere. Definert i senere eksempler som vertsfil

  • Spille

    Utfรธrelse av en lekebok

  • Handler

    Oppgave som kalles kun hvis en varsler er tilstede

  • Varsler

    Seksjon tilskrevet en oppgave som kaller en behandler hvis utdata endres

  • tag

    Navn satt til en oppgave som kan brukes senere til รฅ utstede nettopp den spesifikke oppgaven eller gruppen av oppgaver.

Ansible installasjon i Linux

Nรฅr du har sammenlignet og veid alternativene dine og bestemt deg for รฅ gรฅ for Ansible, er neste trinn รฅ fรฅ det installert pรฅ systemet ditt. Vi vil gรฅ gjennom trinnene for installasjon i forskjellige Linux distribusjoner, de mest populรฆre, i den neste lille opplรฆringen.

Installer Ansible pรฅ Centos/RedHat-systemer

Trinn 1) Installer EPEL repo

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

Trinn 2) Installer mulig pakke

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

Installer Ansible pรฅ Centos/RedHat-systemer

Installer mulig pรฅ Ubuntu/Debian-systemer

Trinn 1) Utfรธr en oppdatering av pakkene

$ sudo apt update

Trinn 2) Installer software-properties-common-pakken

$ sudo apt install software-properties-common

Trinn 3) Installer et mulig personlig pakkearkiv

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

Trinn 4) Installer mulig

$ sudo apt update
$ sudo apt install ansible

Mulige ad hoc-kommandoer

En av de enkleste mรฅtene Ansible kan brukes pรฅ er รฅ bruke ad-hoc-kommandoer. Disse kan brukes nรฅr du vil utstede noen kommandoer pรฅ en server eller en haug med servere. Ad-hoc-kommandoer lagres ikke for fremtidig bruk, men representerer en rask mรฅte รฅ samhandle med de รธnskede serverne pรฅ.

For denne Ansible-opplรฆringen vil en enkel vertsfil med to servere konfigureres, som inneholder vert1 og vert2.

Du kan sรธrge for at vertene er tilgjengelige fra den aktuelle serveren ved รฅ gi en ping-kommando pรฅ alle verter.

[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 tilfellet SUKSESS
  2. Vert som kommandoen kjรธrte pรฅ
  3. Kommandoen utstedt via parameteren -m, i dette tilfellet ping
  4. Med parameteren -i kan du peke pรฅ vertsfilen.


Du kan gi den samme kommandoen bare pรฅ en spesifikk vert om nรธdvendig.

[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 brukes til รฅ gi kommandoer bare pรฅ spesifikke verter i vertens fil
  2. Navnet pรฅ verten som definert i inventarfilen

Hvis du trenger รฅ kopiere en fil til flere destinasjoner raskt, kan du bruke kopimodulen i ansible som bruker SCP. Sรฅ kommandoen og dens utgang ser ut 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 definert
  2. Modulargumenter, i dette tilfellet, er absolutt kildebane og absolutt mรฅlbane.
  3. Ansible kommandoutgang som gjenspeiler suksessen til kopieringskommandoen og andre detaljer som sha1- eller md5-sjekksummene for filintegritetssjekk og metadata som eier, stรธrrelse eller tillatelser. Det er enkelt รฅ ha en pakke installert pรฅ en haug med servere. Ansible har flere moduler som samhandler med brukte installatรธrer, som yum, apt, dnf, etc.

I neste eksempel vil du finne ut hvordan du installerer en pakke via yum-modulen pรฅ to Centos-verter.

[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-modulen brukes i dette eksemplet
  2. Den definerer modulargumentene, og i dette tilfellet vil du velge navnet pรฅ pakken og dens tilstand. Hvis staten er fravรฆrende, for eksempel, vil pakken bli gjennomsรธkt og fjernet hvis den blir funnet
  3. Nรฅr den er farget i gult, vil du se utdataene til den aktuelle kommandoen med tilstanden endret, noe som i dette tilfellet betyr at pakken ble funnet og installert.
  4. Status for yum install-kommandoen utstedt via ansible. I dette tilfellet ble pakken ncdu.x86_64 0:1.14-1.el7 installert.

Selvfรธlgelig kan alle yum-installasjonsalternativene brukes via ansible, inkludert oppdatering, installering, siste versjon eller fjern.

I eksemplet nedenfor ble den samme kommandoen gitt for รฅ fjerne den tidligere installerte ncdu-pakken.

[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. Utdataene fra yum-kommandoen viser at pakken ble fjernet.

En annen nyttig og viktig funksjon som ansible bruker for รฅ samhandle med klientens server, er รฅ samle noen fakta om systemet. Sรฅ den henter maskinvare-, programvare- og versjonsinformasjon fra systemet og lagrer hver verdi i en variabel som kan brukes senere.

Hvis du trenger detaljert informasjon om systemene som skal modifiseres via ansible, kan neste kommando brukes. Oppsettmodulen samler fakta fra systemvariablene.

Ansible ad-hoc kommandoer

Ansible Playbooks

Ansible Playbooks er mรฅten รฅ sende kommandoer til eksterne systemer gjennom skript. Ansible playbooks brukes til รฅ konfigurere komplekse systemmiljรธer for รฅ รธke fleksibiliteten ved รฅ kjรธre et skript til ett eller flere systemer. Ansible playbooks har en tendens til รฅ vรฆre mer et konfigurasjonssprรฅk enn et programmeringssprรฅk.

Ansible playbook-kommandoer bruker YAML-format, sรฅ det er ikke mye syntaks som trengs, men innrykk mรฅ respekteres. Som navnet sier, er en lekebok en samling skuespill. Gjennom en lekebok kan du utpeke spesifikke roller til noen verter og andre roller til andre verter. Ved รฅ gjรธre det kan du orkestrere flere servere i svรฆrt forskjellige scenarier, alt i รฉn spillebok.

For รฅ ha alle detaljene nรธyaktige fรธr vi fortsetter med eksempler pรฅ Ansible playbook, mรฅ vi fรธrst definere en oppgave. Dette er grensesnittet til mulige moduler for roller og spillebรธker.

La oss nรฅ lรฆre Ansible playbook gjennom et eksempel med en playbook med en play, som inneholder flere oppgaver 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 eksemplet over Ansible playbook er gruppen1 av verter i vertsfilen mรฅlrettet for lldpad-pakkeinstallasjon ved hjelp av yum-modulen, og etterpรฅ startes tjenesten lldpad opprettet etter installasjonen ved รฅ bruke tjenestemodulen som hovedsakelig brukes til รฅ samhandle med systemd-ensemble.

Forklaring:

  1. Gruppe med verter som spilleboken skal kjรธres pรฅ
  2. Yum-modulen brukes i denne oppgaven for lldpad-installasjon
  3. Servicemodulen brukes til รฅ sjekke om tjenesten er oppe og kjรธrer etter installasjon

Hver ansible spillebok fungerer med en inventarfil. Inventarfilen inneholder en liste over servere delt inn i grupper for bedre kontroll for detaljer som IP-adresse og SSH-port for hver vert.

Inventarfilen du kan bruke for dette Ansible playbook-eksemplet ser ut som nedenfor. Det er to grupper, kalt gruppe1 og gruppe2, som hver inneholder henholdsvis vert1 og vert2.

[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. Gruppenavn
  2. Vertsnavn, med IP-adresse og ssh-port, i dette tilfellet standarden, 22.

Et annet nyttig Ansible playbook-eksempel som inneholder denne gangen to avspillinger for to verter, er det neste. For den fรธrste gruppen med verter, gruppe1, vil selinux vรฆre aktivert. Hvis det er aktivert, vil en melding vises pรฅ skjermen til verten.

For den andre gruppen av verter, vil httpd-pakken kun installeres hvis ansible_os_family er RedHat og ansible_system_vendor er HP.

Ansible_os_family og ansible_system_vendor er variabler samlet med alternativet gather_facts og kan brukes som i dette betingede eksemplet.

---

- 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รฅ nรฅr-klausulen, I dette tilfellet, nรฅr OS-typen er Debian. Ansible_os_family-variabelen samles inn via gather_facts-funksjonaliteten.
  2. Oppgaveutgangen er registrert for fremtidig bruk, med navnet enable_selinux
  3. Et annet eksempel pรฅ nรฅr-klausulen. I dette tilfellet vil en melding vises for vertsbrukeren hvis SELinux faktisk var aktivert fรธr.
  4. Et annet eksempel pรฅ nรฅr-klausulen som bestรฅr av to regler

I tillegg til oppgaver, er det ogsรฅ noen spesielle oppgaver som kalles behandlere. Hรฅndtere mรฅ ha et unikt navn gjennom hele spilleboken. Disse fungerer pรฅ samme mรฅte som en vanlig oppgave, men en behandler kan varsles via en varsler.

Hvis en behandler ikke blir varslet under kjรธringen av spilleboken, vil den ikke kjรธre. Men hvis mer enn รฉn oppgave varsler en behandler, vil dette kun kjรธres รฉn gang etter at alle oppgavene er fullfรธrt.

I eksemplet nedenfor kan du se hvordan en spesifikk oppgave har en varslingsdel som kaller pรฅ en annen oppgave. Hvis utdata fra den fรธrste oppgaven endres, vil en behandleroppgave bli kalt. Det beste eksemplet er รฅ fรฅ endret en konfigurasjonsfil og deretter starte den spesifikke tjenesten pรฅ nytt.

---

- 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 tilfellet, hvis den fรธrste oppgaven, "sshd config file modify port" endres, noe som betyr at hvis porten ikke er 28675 i utgangspunktet, vil den bli endret og oppgaven vil varsle behandleren med samme navn om รฅ kjรธre , og den vil starte sshd-tjenesten pรฅ nytt.

Ansible Playbooks

Forklaring:

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

Ansible roller

Nรฅr du har รฅ gjรธre med omfattende lekebรธker, er det lettere รฅ dele opp oppgavene i roller. Dette hjelper ogsรฅ med รฅ gjenbruke rollene i fremtiden. Roller er en samling oppgaver som kan flyttes fra en spillebok til en annen, kan kjรธres uavhengig, men bare gjennom en spillebokfil.

Roller lagres i separate kataloger og har en bestemt katalogstruktur.

[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 standardkatalogen inneholder en liste over standardvariabler som skal brukes sammen med spilleboken. Behandlerkatalogen brukes til รฅ lagre behandlere. Metakatalogen skal ha informasjon om forfatteren og rolleavhengigheter. I oppgavekatalogen er det yaml-hovedfilen for rollen.

Testkatalogen inneholder et eksempel pรฅ en yaml playbook-fil og en eksempel pรฅ inventarfil og brukes for det meste til testformรฅl fรธr den faktiske rollen opprettes.

Vars-katalogen inneholder yaml-filen der alle variablene som brukes av rollen vil bli definert. Katalogmalene og katalogfilene skal inneholde filer og maler som skal brukes av oppgavene i rollen.

For รฅ lage katalogtreet for en rolle, bรธr du bruke fรธlgende kommando med den siste parameteren, rollenavnet:

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

Ansible fungerer ogsรฅ bra med maler. Som et sprรฅk for maling bruker den Jinja2.

I neste eksempel vil du finne ut hvordan en grunnleggende jinja2-mal ser ut og bruke den i en rolle.

Pรฅ kjรธretiden, avhengig av, la oss si i hvilket datasenter serveren din er plassert, kan du velge fra mer enn รฉn navneserver, som hver tilsvarer et datasenter, ved รฅ bruke variabelen ยซresolver_ip_addressesยป.

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

options timeout:1
options attempts:5
options rotate

I dette eksemplet, i playbook-katalogen, er det definert noen variabler, inkludert en variabel kalt resolver_ip_addresses med forskjellige verdier avhengig av datasenteret.

- 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รฅ malen som skal brukes. Mal ligger i maler dir i rollebanen
  2. Destinasjonsbanen til filnavnet som skal erstattes med malen, pรฅ klientsiden.
  3. Tillatelser for mรฅlfilen

Rolleoppgavene kan ogsรฅ ha et tagfelt, som har et navn. Mer enn รฉn oppgave kan dele samme tag. Nรฅr du kjรธrer en ansible playbook, kan du spesifisere taggen ogsรฅ, slik at disse oppgavene blir utfรธrt.

Ansible kasusstudie

I denne delen vil vi analysere en case-studie av en essensiell ansible lekebok som har tre roller. Hensikten med dette er รฅ gi et praktisk eksempel pรฅ hva vi snakket om fรธr. Noen av eksemplene som er brukt fรธr i denne Ansible playbook-opplรฆringen vil bli tilpasset og brukt i denne playbook.

Nedenfor er katalogstrukturen til spilleboken. Yaml-filen som skal brukes 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

Spilleboken har tre roller, en kalt resolver som setter en spesifikk navneserver pรฅ serverne ved รฅ kopiere en fil fra serveren til /etc/resolv.conf-destinasjonen. En annen kalles httpd, og den installerer httpd-pakken med yum-modulen, og den tredje aktiverer SELinux og varsler den loggede brukeren om รฅ starte systemet pรฅ nytt. Hver rolle ble opprettet ved hjelp av ansible-galaxy-kommandoen.

Lรธserrolle, main.yml-oppgave:

Ansible kasusstudie

Httpd-rolle, main.yml-oppgave:

Ansible kasusstudie

Selinux-rolle, main.yml-oppgave:

Ansible kasusstudie

Nedenfor er p4.yml-spilleboken definert. Det vil kjรธre pรฅ alle verter hvis ikke annet er spesifisert i kommandolinjen, det vil kjรธre som root-bruker pรฅ port 22 (SSH), det vil samle fakta fรธr det kjรธrer rollene, og det vil kjรธre alle de tre rollene nevnt fรธr. Hver rolle kan kjรธres uavhengig ved รฅ spesifisere taggen i ansible-playbook-kommandolinjen med โ€“t-parameteren.

---

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

Kjรธre p4.yml-spilleboken pรฅ to verter og tolke utdataene. Den samme kommandoen kan kjรธres med โ€“check-parameteren for en tรธrrkjรธring. I tilfelle du vil bruke passordautentisering, bruk -k parameter.

Ansible kasusstudie

Forklaring:

  1. Ansible-playbook-kommando som kjรธrer p4.yml
  2. Playbook hopper over SELinux-rollen fordi den allerede er aktivert.
  3. Ansible fant ut at httpd-pakken allerede er installert, sรฅ den returnerer ok.
  4. Resolver ble satt, og rollelรธser fikk status endret.

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

Utfรธr en oppdatering av pakkene pรฅ Debian/Ubuntu systemer

$ sudo apt update

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

$ sudo apt install software-properties-common

Installer mulig personlig 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

Utsted en ping-kommando pรฅ alle servere som er definert i inventarfilen kalt hosts

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

Utsted en ping-kommando bare pรฅ host2

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

Kopier filen "testfile" pรฅ alle verter 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 verter

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

Fjern ncdu-pakken pรฅ alle verter

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

Bygg katalogstrukturen for rolle kalt rolle1.

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

Tรธrrkjรธrt p4.yml-lekebok

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

Kjรธr p4.yml playbook med passordautentisering for alle verter

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

Sammendrag

I en verden med teknologi som kontinuerlig endrer seg i raskt tempo og vokser utrolig raskt samtidig, mรฅ systemadministratorer og devops-ingeniรธrer tenke pรฅ forskjellige tilnรฆrminger for hvordan de kan automatisere rutineoppgaver og orkestrere store servergrupper.

Mens det er mange alternativ til Ansible (Chef, Puppet) der ute som gjรธr det samme med noen forskjeller, Ansible klarte รฅ heve seg over dem alle med sin enkelhet, forbedrede sikkerhet og ikke minst sin jevne lรฆringskurve. Pรฅ grunn av disse egenskapene og den raske innfรธringen av Ansible, har vi laget en opplรฆring full av eksempler slik at du kan fรฅ en enda mer sรธmlรธs fรธrste erfaring med รฅ jobbe med Ansible.

I denne grunnleggende opplรฆringen for Ansible beskrev vi ansible og snakket litt om historien. Vi nevnte de sterke sidene til Ansible og fordelene som ansible kan gi til automatisering og orkestrering av infrastrukturer av forskjellige stรธrrelser. Vi definerte de essensielle ansible brukte begrepene og definerte strukturen til Ansible playbooks. Grundige eksempler fulgte med all informasjon med detaljerte forklaringer.

Oppsummer dette innlegget med: