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 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"
}
Forklaring:
- Status for kommandoen, i dette tilfellet SUKSESS
- Vert som kommandoen kjรธrte pรฅ
- Kommandoen utstedt via parameteren -m, i dette tilfellet ping
- 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"
}
Forklaring:
- Limit-parameter kan brukes til รฅ gi kommandoer bare pรฅ spesifikke verter i vertens fil
- 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
}
Forklaring:
- Kopimodul definert
- Modulargumenter, i dette tilfellet, er absolutt kildebane og absolutt mรฅlbane.
- 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"
]
}
Forklaring:
- Yum-modulen brukes i dette eksemplet
- 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
- 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.
- 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"
]
}
Forklaring:
- 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 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
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:
- Gruppe med verter som spilleboken skal kjรธres pรฅ
- Yum-modulen brukes i denne oppgaven for lldpad-installasjon
- 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
Forklaring:
- Gruppenavn
- 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'
Forklaring:
- Eksempel pรฅ nรฅr-klausulen, I dette tilfellet, nรฅr OS-typen er Debian. Ansible_os_family-variabelen samles inn via gather_facts-funksjonaliteten.
- Oppgaveutgangen er registrert for fremtidig bruk, med navnet enable_selinux
- Et annet eksempel pรฅ nรฅr-klausulen. I dette tilfellet vil en melding vises for vertsbrukeren hvis SELinux faktisk var aktivert fรธr.
- 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.
Forklaring:
- Eksempel pรฅ en varsler
- 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
Forklaring:
- Navn pรฅ malen som skal brukes. Mal ligger i maler dir i rollebanen
- Destinasjonsbanen til filnavnet som skal erstattes med malen, pรฅ klientsiden.
- 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:
Httpd-rolle, main.yml-oppgave:
Selinux-rolle, main.yml-oppgave:
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.
Forklaring:
- Ansible-playbook-kommando som kjรธrer p4.yml
- Playbook hopper over SELinux-rollen fordi den allerede er aktivert.
- Ansible fant ut at httpd-pakken allerede er installert, sรฅ den returnerer ok.
- 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.















