Tutorial ng Baguhan - Hindi Masasayang Mga Playbook, Variable, at Imbentaryo

Beginner S Tutorial Ansible Playbooks



Ang mga hindi madaling basahin na playbook ay mga file na naglalaman ng mga gawain na pinapatakbo upang mai-configure ang mga host sa Ansible. Ang mga hindi madaling basahin na aklat ay nakasulat sa format na YAML. Ang YAML ay isang napaka-simpleng format ng file tulad ng JSON. Ipapakita ko sa iyo kung paano tumingin ang Ansible YAML playbooks sa isang susunod na seksyon ng artikulong ito.

Ang Ansible Inventory file ay nagpapanatili ng isang listahan ng mga host na nais mong i-configure o pamahalaan sa Ansible. Maaari mong i-grupo ang mga host na ito at pamahalaan ang mga ito ayon sa mga pangkat, pati na rin. Maaari mo ring ipasa ang iba't ibang mga variable para sa bawat host o para sa isang pangkat ng mga host.







Sa artikulong ito, ipapakita ko sa iyo kung paano magtrabaho kasama ang Ansible playbook, variable, mga file ng imbentaryo, at ilang karaniwang mga Ansible module na may praktikal na mga halimbawa. Kaya, magsimula tayo!



Mga Pangangailangan

Kung nais mong subukan ang mga halimbawa sa artikulong ito,



1) Dapat ay mayroon kang naka-install na Ansible sa iyong computer.
2) Dapat ay mayroon kang hindi bababa sa isang host ng Ubuntu / Debian at isang host ng CentOS / RHEL 8 na na-configure para sa Ansible automation.





Maraming mga artikulo sa LinuxHint na nakatuon sa Pag-install ng Hindi Kapansin-pansin at pag-configure ng mga host para sa Ansible automation. Maaari mong suriin ang mga artikulong ito kung kinakailangan para sa karagdagang impormasyon.

Lumilikha ng isang Direktoryo ng Proyekto

Una, lumikha ng isang direktoryo ng proyekto ~ / proyekto / kasama ang sumusunod na utos:

$mkdir -pv~/proyekto/mga playbook

Mag-navigate sa ~ / proyekto / direktoryo tulad ng sumusunod:

$CD~/proyekto

Pangunahing File ng Imbentaryo:

Lumikha ng isang Ansible na file ng imbentaryo host sa direktoryo ng proyekto na may sumusunod na utos:

$nanohost

Maaari mong i-type ang mga IP address ng mga host na nais mong i-configure / awtomatiko gamit ang Ansible sa host file ng imbentaryo

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Kapag natapos mo na sa hakbang na ito, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Kung nais mong gumamit ng mga pangalan ng DNS sa halip na mga IP address sa file ng imbentaryo, maaari mo rin itong gawin.

Kung wala kang isang gumaganang DNS server, maaari mong gamitin ang / etc / host file sa iyong computer para sa lokal na resolusyon ng DNS.

Para sa lokal na resolusyon ng DNS, buksan ang / etc / host file sa isang text editor ( nano , sa aking kaso) tulad ng sumusunod:

$sudo nano /atbp/host

I-type ang mga IP address at ang nais mong mga pangalan ng DNS tulad ng sumusunod:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Kapag natapos mo na ang hakbang na ito, pindutin ang + X sinundan ng AT at .

Buksan ang Ansible na file ng imbentaryo host tulad ng sumusunod:

$nanohost

Maaari mo na ngayong i-type ang mga pangalan ng DNS ng mga host na nais mong i-configure / awtomatiko gamit ang Ansible sa host file ng imbentaryo

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Kapag natapos ka na, i-save ang file ng imbentaryo ng mga host sa pamamagitan ng pagpindot + X sinundan ng AT at .

Pagsubok Pagkakonekta sa Lahat ng Mga Host

Ngayon, maaari mong subukang i-ping ang lahat ng mga host sa file ng imbentaryo tulad ng sumusunod:

$hindi nakakain-akohost lahat-uhindi nakakain-m ping

Tulad ng nakikita mo, maaabot ang lahat ng mga host sa file ng imbentaryo. Kaya, handa na kaming magpatuloy sa susunod na seksyon ng artikulong ito.

Ang iyong Unang Mahusay na Playbook

Lumikha tayo ng isang simpleng Ansible playbook ping_all_hosts.yaml nasa mga playbook / direktoryo Ang pagkilos na ito ay i-ping ang lahat ng mga host sa host file ng imbentaryo, tulad ng dati.

$nanomga playbook/ping_all_hosts.yaml

I-type ang mga sumusunod na linya sa ping_all_hosts.yaml Hindi kapani-paniwala na file ng playbook:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: Ping lahat ng mga host
ping:

Dito,

host: lahat - pipiliin ang lahat ng mga host mula sa file ng imbentaryo host .
gumagamit: hindi nakakain - Sinasabi sa Ansible sa SSH sa mga host sa file ng imbentaryo bilang hindi nakakain gumagamit
gawain - Ang lahat ng mga gawain na isasagawa ng Ansible sa mga host ay nakalista dito. Ang bawat isa sa mga gawain ay karaniwang may a pangalan at isa o higit pang mga tiyak na pagpipilian sa module.

Ang playbook ping_all_hosts.yaml mayroon lamang isang gawain, pag-ping sa lahat ng mga host sa file ng imbentaryo host . Ang pangalan ng gawain ay Ping lahat ng host at ginagamit nito ang ping modyul

Ang ping module ay hindi kailangan ng anumang iba pang mga pagpipilian. Kaya, iniwan ko itong walang laman (walang anuman pagkatapos ng colon, : )

Kapag natapos mo na sa hakbang na ito, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Maaari mong patakbuhin ang ping_all_hosts.yaml Hindi kapani-paniwala na playbook tulad ng sumusunod:

$nakakain-playbook-akonagho-host ng mga playbook/ping_all_hosts.yaml

Tulad ng nakikita mo, ang gawain ng ping ay matagumpay sa lahat ng mga host sa file ng imbentaryo.

Simpleng Ansible Configuration File

Sa naunang halimbawa, kailangan mong gamitin ang -ako pagpipilian upang sabihin sa Ansible kung aling file ng imbentaryo ang gagamitin. Sa aking kaso, ito ang host file ng imbentaryo

$nakakain-playbook-akonagho-host ng mga playbook/ping_all_hosts.yaml

Kung hindi mo nais na pumasa sa isang file ng imbentaryo kasama ang -ako pagpipilian tuwing nagpapatakbo ka ng isang Ansible playbook, ang kailangan mo lang gawin ay magtakda ng isang default na file ng imbentaryo para sa iyong proyekto.

Upang magawa iyon, lumikha ng isang bagong Ansible config file hindi nakakain.cfg sa iyong ugat ng proyekto tulad ng sumusunod:

$nanohindi nakakain.cfg

I-type ang mga sumusunod na linya sa hindi nakakain.cfg file:

[mga default]
imbentaryo =./host

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Maaari mong patakbuhin ang parehong Ansible playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/ping_all_hosts.yaml

Tulad ng nakikita mo, ang playbook ay gumagamit ng host file ng imbentaryo bilang default. Maaari mo pa ring gamitin ang -ako pagpipilian upang tukuyin ang isang iba't ibang mga file ng imbentaryo, kung nais mo. Ang Ansible ay napaka-kakayahang umangkop.

Pagpapangkat ng Mga Host sa Inventory File

Sa ngayon, ipinakita ko sa iyo kung paano magpatakbo ng isang hanay ng mga gawain (playbook) sa lahat ng mga host sa file ng imbentaryo. Ngunit paano kung nais mong magpatakbo ng isang hanay ng mga gawain sa ilan sa mga host at isa pang hanay ng mga gawain sa iba pang mga host? Maaari mong pangkatin ang mga host sa file ng imbentaryo at magpatakbo ng iba't ibang mga gawain sa mga pangkat ng host.

Sa seksyong ito, ipapakita ko sa iyo kung paano i-grupo ang mga host sa file ng imbentaryo at kung paano gumana sa mga pangkat ng host.

Una, buksan ang file ng imbentaryo host tulad ng sumusunod:

$nanohost

I-type ang mga sumusunod na linya sa host file ng imbentaryo:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Dito, lumikha ako ng dalawang host group: debian10 at centos8 .

Nasa debian10 grupo, mayroon akong dalawang host: vm1.nodekite.com at vm2.nodekite.com

Nasa centos8 grupo, mayroon akong dalawang host: vm3.nodekite.com at vm4.nodekite.com

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Lilikha kami ngayon ng isang bagong playbook ping_debian10_hosts.yaml , na kung saan ay mag-host ng ping tulad ng dati, ngunit ang mga host lamang sa debian10 host group.

Lumikha ng isang playbook ping_debian10_hosts.yaml nasa mga playbook / direktoryo tulad ng sumusunod:

$nanomga playbook/ping_debian10_hosts.yaml

I-type ang mga sumusunod na linya sa ping_debian10_hosts.yaml Mahusay na playbook:

- host: debian10
gumagamit: hindi nakakain
gawain:
- pangalan: Ping lahat ng Debian10host
ping:

Sa halip na host: lahat , Naidagdag ko host: debian10 dito debian10 ay ang host group. Ang playbook na ito ay tatakbo lamang sa mga host sa debian10 host group.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/ping_debian10_hosts.yaml

Tulad ng nakikita mo, ang mga host lamang sa debian10 naka-ping ang host group.

Gamit ang parehong pamamaraan, lumikha ng isa pang playbook ping_centos8_hosts.yaml tulad ng sumusunod:

$nanomga playbook/ping_centos8_hosts.yaml

I-type ang mga sumusunod na linya sa ping_centos8_hosts.yaml Mahusay na playbook:

- host: centos8
gumagamit: hindi nakakain
gawain:
- pangalan: Ping lahat ng CentOS8host
ping:

Sa parehong paraan, nagdagdag ako host: centos8 dito centos8 ay ang host group. Ang playbook na ito ay tatakbo lamang sa mga host sa centos8 host group.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/ping_centos8_hosts.yaml

Tulad ng nakikita mo, ang mga host lamang sa centos8 naka-ping ang host group.

Hindi Nakakailang Mga Uri ng Variable

Mayroong iba't ibang mga uri ng variable sa Ansible. Ang pangunahing uri ng variable ay Mga variable na hindi nakakain na Katotohanan at Mga variable na tinukoy ng gumagamit .

Mga variable na hindi nakakain na Katotohanan: Nakasalalay sa host na gumagana ang Ansible, bumubuo ang Ansible ng mga variable na Ansible na katotohanan. Ang mga variable na hindi nababatid na katotohanan ay naglalaman ng impormasyon tungkol sa host, tulad ng mga IP address, hostname, pangalan ng domain, petsa, oras, mga variable ng environment ng shell, at marami pa.

Mga variable na tinukoy ng gumagamit: Ito ang mga pasadyang variable na tinukoy ng gumagamit. Maaari mong ipasa ang mga variable na tinukoy ng gumagamit mula sa linya ng utos, o gamit ang file ng imbentaryo.

Pangunahin ang mga variable na tinukoy ng gumagamit ay may dalawang uri: Mga variable ng pangkat at Mga variable ng host .

Ansible Variable Precedence

Ang variable na nauna sa Ansible ay : Mga Variable ng Command Line > Mga Variable ng Host > Mga variable ng pangkat

Kung itinakda mo ang parehong variable bilang variable ng host at variable ng pangkat, mailalapat ang variable ng host.

Katulad nito, ang mga variable na itinakda mo mula sa linya ng utos habang nagpapatakbo ng isang playbook ay papalitan ang parehong mga variable ng host at pangkat.

Paggawa gamit ang Ansible Facts Variable

Sa seksyong ito, ipapakita ko sa iyo kung paano gumana sa Ansible variable ng mga katotohanan. Kaya, magsimula tayo!

Maaari mong ilista ang lahat ng variable na Ansible Facts ng mga host sa iyong host file ng imbentaryo tulad ng sumusunod:

$hindi nakakain lahat-uhindi nakakain-mpag-setup

Tulad ng nakikita mo, ang lahat ng mga variable na Ansible Facts ay nakalista sa format na JSON. Ito ay isang napakahabang listahan.

Tulad ng haba ng listahan, maaari mo itong buksan sa isang pager program tulad ng mas kaunti tulad ng sumusunod:

$hindi nakakain lahat-uhindi nakakain-mpag-setup| mas kaunti

Ngayon, maaari mong i-scroll ang output pataas, pababa, pakaliwa, at pakanan ayon sa kinakailangan.

Maaari ka ring maghanap para sa mga variable na pangalan mula sa pager. Upang gawin iyon, pindutin ang / susi sa iyong keyboard. Pagkatapos, i-type ang string ng paghahanap ( hostname sa aking kaso) at pindutin .

Tulad ng nakikita mo, ang variable na Ansible facts na tumutugma sa string ng paghahanap ansible_hostname . Maaari mong pindutin N upang pumunta sa susunod na laban at P upang pumunta sa nakaraang laban mula sa pager. Ito ay kung paano mo mahahanap ang variable na Ansible facts na kailangan mo para sa iyong proyekto na Ansible.

Tingnan natin ngayon kung paano i-access ang Ansible reality variable.

Lumikha ng isang bagong playbook print_variable1.yaml tulad ng sumusunod:

$nanomga playbook/print_variable1.yaml

I-type ang mga sumusunod na linya sa print_variable1.yaml file:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-printhostnameng lahat ng host
debug:
msg:'{{ansible_hostname}}'

Dito, nagdagdag ako ng isang gawain I-print ang hostname ng lahat ng mga host . Ang gawaing ito ay gumagamit ng Ansible pag-debug module upang mai-print ang isang mensahe kapag tumatakbo ang playbook.

msg ay ang tanging kinakailangang parameter ng pag-debug modyul Ang msg Tumatanggap ang parameter ng isang string sa mga quote, na kung saan ay ang mensahe na mai-print sa console.

Dito, {{variable_name}} ginagamit ang format upang ma-access ang isang variable. Sa kasong ito, {{ansible_hostname}} ay ginagamit upang i-print ang ansible_hostname variable ng bawat isa sa mga host sa file ng imbentaryo.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Maaari mo ring ma-access ang variable na Ansible katotohanan bilang ansible_fact [variable_name] . Kaya ang ansible_hostname variable ay magiging ansible_fact [hostname] .

Maaari nating muling isulat ang print_variable1.yaml playbook na ganito rin. Makakakuha kami ng parehong output.

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-printhostnameng lahat ng host
debug:
msg:'{{ansible_fact [' variable_name ']}}'

Patakbuhin ang playbook print_variable1.yaml tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/print_variable1.yaml

Tulad ng nakikita mo, ang hostname ng bawat host sa file ng imbentaryo ay nakalimbag sa console.

I-print natin ngayon ang default na IPv4 address ng bawat host kasama ang hostname. Tulad ng nakikita mo, ang default na IPv4 address ng host ay maaaring ma-access gamit ang address pag-aari ng ansible_default_ipv4 bagay

Lumikha ng isang bagong playbook print_variable2.yaml tulad ng sumusunod:

$nanomga playbook/print_variable2.yaml

I-type ang mga sumusunod na linya sa print_variable2.yaml file:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-printhostnameng lahat ng host
debug:
msg:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Ang playbook na ito ay kapareho ng dati. Ang pagkakaiba lamang ay ang bagong variable {{ansible_default_ipv4.address}} nasa msg pagpipilian ng pag-debug modyul

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang print_variable2.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/print_variable2.yaml

Tulad ng nakikita mo, ang default na IPv4 address at ang hostname ng mga host ay naka-print sa console.

Kaya, ito ay kung paano ka nagtatrabaho sa mga variable na Ansible Fact.

Pagtatakda ng Mga Variable na tinukoy ng Gumagamit mula sa Command Line:

Sa seksyong ito, ipapakita ko sa iyo kung paano magtakda ng mga variable na tinukoy ng gumagamit mula sa linya ng utos habang pinapatakbo ang mga Ansible playbook.

Una, lumikha ng isang bagong playbook print_variable3.yaml tulad ng sumusunod:

$nanomga playbook/print_variable3.yaml

I-type ang mga sumusunod na linya sa print_variable3.yaml file:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-printutosvariable ng linya
debug:
msg:'Maligayang pagdating sa {{username}}'

Dito, ginamit ko na ang pag-debug module upang mai-print ang mensahe Maligayang pagdating sa {{username}} . username ay isang variable na mapapalitan kapag pinatakbo namin ang playbook.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang playbook print_variable3.yaml tulad ng sumusunod:

$nakakain-playbook-At 'username = Bob'mga playbook/print_variable3.yaml

TANDAAN: Dito, -At ginagamit ang pagpipilian upang maipasa ang a username variable na may halaga Si Bob sa playbook print_variable3.yaml mula sa linya ng utos.

Tulad ng nakikita mo, ang mensahe Maligayang pagdating Bob ay nakalimbag sa console.

Tuklasin natin ngayon kung paano pumasa sa maraming mga variable mula sa linya ng utos.

Lumikha ng isang bagong playbook print_variable4.yaml tulad ng sumusunod:

$nanomga playbook/print_variable4.yaml

I-type ang mga sumusunod na linya sa print_variable4.yaml file:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-print ang mga variable na tinukoy ng gumagamit
debug:
msg:'username = {{username}} http_port = {{http_port}}'

Ang playbook ay dapat maging pamilyar sa iyo ngayon. Ang ginagawa lang nito ay i-print ang 2 variable username at http_port sa console.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Maaari mo na ngayong ipasa ang username at http_port variable sa playbook gamit ang dalawang magkakaiba -At pagpipilian tulad ng sumusunod:

$ ansible-playbook-At 'username = Bob' -At 'http_port = 8080'
mga playbook/print_variable4.yaml

O, maaari mo lamang paghiwalayin ang mga variable na may isang whitespace, tulad ng sumusunod:

$ ansible-playbook-At 'username = Bob http_port = 8080'
mga playbook/print_variable4.yaml

Tulad ng nakikita mo, ang username at http_port ang mga variable ay naka-print sa console.

Paggawa gamit ang Mga Variable ng Pangkat na Natukoy ng Gumagamit

Sabihin, nais mong magdagdag ng ilang mga variable sa isang pangkat ng mga host. Napakadaling gawin ang pagkilos na ito sa Ansible.

Una, buksan ang iyong host file ng imbentaryo tulad ng sumusunod:

$nanohost

I-type ang mga sumusunod na linya sa iyong host file ng imbentaryo:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
username = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
username = Bob
http_port =7878

Tulad ng nakikita mo, lumikha ako ng isang bagong seksyon [debian10: vars] para sa debian10 host group at idinagdag ang mga variable ( username at http_port ) para sa debian10 host group doon.

Sa parehong paraan, lumikha ako ng isang bagong seksyon [centos8: vars] para sa centos8 host group at idinagdag ang mga variable ( username at http_port ) para sa centos8 host group doon.

Kapag natapos ka na, i-save ang host file ng imbentaryo sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang print_variable4.yaml mga playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/print_variable4.yaml

Tulad ng nakikita mo, ang mga tamang variable ay naipapasa sa bawat host depende sa kanilang host group.

Paggawa gamit ang Mga Variable na Host na Tinukoy ng User

Sa seksyong ito, ipapakita ko sa iyo kung paano magtakda ng mga variable para sa mga tukoy na host sa file ng imbentaryo.

Una, buksan ang host file ng imbentaryo tulad ng sumusunod:

$nanohost

Upang magdagdag ng mga variable sa isang tukoy na host (sabihin, vm1.nodekite.com ), magdagdag lamang ng isang puwang / tab pagkatapos ng host IP / DNS na pangalan at i-type ang iyong mga variable, tulad ng ipinakita sa screenshot sa ibaba.

Maaari kang magdagdag ng maraming mga variable, pati na rin. Paghiwalayin lamang ang bawat variable sa isang puwang.

Kapag natapos ka na, i-save ang file ng imbentaryo sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang print_variable4.yaml mga playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/print_variable4.yaml

Tulad ng nakikita mo, ang mga variable ay itinakda lamang para sa vm1.nodekite.com host Ang iba pang mga host ay may mga variable ng pangkat na inilapat sa kanila.

Mabilis na Bumubuo ng Mga Inventory File sa Mga Saklaw

Maaari kang gumamit ng mga saklaw upang mabilis na makabuo ng mga Ansible na file ng imbentaryo kung ang iyong mga host na IP address o mga pangalan ng DNS ay pare-pareho (ibig sabihin, magkaroon ng isang tukoy na format).

Sa mga naunang halimbawa, ginamit ko ang mga host vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com at vm4.nodekite.com . Sa halip na mag-type sa 4 na linya, maaari lamang akong mag-type vm [1: 4] .nodekite.com sa file ng imbentaryo.

Para sa pag-eksperimento sa mga saklaw, buksan ang host file ng imbentaryo tulad ng sumusunod:

$nanohost

Alisin ang lahat ng mga host at variable mula sa mga file ng imbentaryo.

Maaari na kaming palitan vm1.nodekite.com at vm2.nodekite.com kasama si vm [1: 2] .nodekite.com para sa debian10 host group tulad ng sumusunod.

Sa parehong paraan, maaari nating mapalitan vm3.nodekite.com at vm4.nodekite.com kasama si vm [3: 4] .nodekite.com para sa centos8 host group.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang ping_all_hosts.yaml tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/ping_all_hosts.yaml

Tulad ng nakikita mo, pinalawak ang mga saklaw ng host nang patakbo ko ang playbook.

Pag-iimbak ng Mga variable sa Iba't ibang Mga File

Ang pag-iimbak ng mga variable ng pangkat at mga variable ng host sa parehong file ng imbentaryo ay napakadali. Ngunit, maaari kang naghahanap ng higit na kakayahang umangkop. Lalo na kung nais mong gumamit ng mga saklaw sa iyong file ng imbentaryo dahil hindi mo na maitatakda ang mga variable ng host kung gumagamit ka ng mga saklaw. Kaya, maaari kang mag-imbak ng mga variable ng pangkat at mga variable ng host sa iba't ibang mga file. Sa seksyong ito, ipapakita ko sa iyo kung paano ito tapos.

Bilang default, hindi nakikita ng Ansible ang mga variable ng pangkat sa group_vars / mga variable ng direktoryo at host sa host_vars / direktoryo

Kaya, lumikha ng group_vars / at host_vars / direktoryo tulad ng sumusunod:

$mkdir -pv {host, grupo}_ kanino

Upang itakda ang mga variable ng pangkat para sa debian10 host group, lumikha ng isang file debian10 (kapareho ng pangalan ng pangkat) sa group_vars / direktoryo tulad ng sumusunod:

$nanogroup_vars/debian10

I-type ang iyong mga variable tulad ng sumusunod:

username: Lily
http_port: 4343

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ni Y at .

Ang parehong paraan, upang itakda ang mga variable ng pangkat para sa centos8 host group, lumikha ng isang file centos8 (kapareho ng pangalan ng pangkat) sa group_vars / direktoryo tulad ng sumusunod:

$nanogroup_vars/centos8

I-type ang iyong mga variable tulad ng sumusunod:

username: Bob
http_port: 7878

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ni Y at .

Patakbuhin ang print_variable4.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/print_variable4.yaml

Tulad ng nakikita mo, ang mga variable ng pangkat ay naitakda nang tama para sa bawat mga host group.

Upang itakda ang mga variable ng host para sa host vm1.nodekite.com , lumikha ng isang file vm1.nodekite.com (kapareho ng host name o IP address) sa host_vars / direktoryo tulad ng sumusunod:

$nanovm1.nodekite.com

Mag-type sa iyong mga variable ng host tulad ng sumusunod:

username: Alex
http_port: 7788

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ni Y at .

Patakbuhin ang print_variable4.yaml playbook tulad ng sumusunod:

Mga playbook na $ ansible-playbook/print_variable4.yaml
[

Tulad ng nakikita mo, ang mga variable ng host ay naitakda nang tama para sa host vm1.nodekite.com .

Paggawa gamit ang Loops sa Ansible

Sa seksyong ito, ipapakita ko sa iyo kung paano gamitin ang mga loop sa Ansible.

Una, lumikha ng isang bagong playbook loop1.yaml nasa mga playbook / direktoryo tulad ng sumusunod:

$nanomga playbook/loop1.yaml

I-type ang mga sumusunod na linya sa loop1.yaml playbook:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: I-print ang listahan ng Gumagamit
debug:
msg:'Gumagamit: {{item}}'
with_items:
- Alex
- Bob
- Lily

Narito, mayroon akong 1 gawain na naglilimbag ng isang listahan ng mga gumagamit na gumagamit ng loop.

Upang maitakda ang mga halaga ng pag-ulit para sa gawain, gagamitin mo ang may mga_item modyul Pagkatapos, idagdag mo ang mga halaga isa-isa.

with_items:
- Alex
- Bob
- Lily

Ina-access mo ang halaga ng kasalukuyang pag-ulit gamit ang item variable.

debug:
msg:'Gumagamit: {{item}}'

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang loop1.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/loop1.yaml

Tulad ng nakikita mo, tumakbo ang parehong gawain para sa bawat item sa bawat host. Kaya, gumagana ang loop.

Paggawa ng Mga Kundisyon sa Ansible

Kung nais mong magpatakbo ng mga gawain batay sa ilang mga kundisyon, ang seksyon na ito ay para sa iyo.

Upang magpatakbo ng mga gawain batay sa kundisyon, maaari mong gamitin ang kailan module ng Ansible. Tingnan natin ang isang halimbawa ng modyul na ito. Una, lumikha ng isang bagong playbook kondisyon1.yaml tulad ng sumusunod:

$nanomga playbook/kondisyon1.yaml

I-type ang mga sumusunod na linya sa kondisyon1.yaml playbook:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: Patakbuhin ang gawaing ito sa Debian lamang
debug:
msg:'ang gawaing ito ay tumatakbo sa Debian'
kailan: ansible_fact['pamamahagi']=='Debian'

Dito,

ansible_fact [‘pamamahagi’] == ‘Debian’ ay ginagamit upang suriin kung ang pamamahagi ay Debian . Tatakbo lamang ang gawain kung ang pamamahagi ay Debian.

Ang ansible_fact [‘pamamahagi’] ay ginagamit upang ma-access ang variable na Ansible Facts ansible_distribution . Maaari mo ring suriin ang bersyon ng pamamahagi gamit ang ansible_distribution_major_version variable.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang kondisyon1.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/kondisyon1.yaml

Tulad ng nakikita mo, ang gawain ay nagpatakbo lamang sa mga host ng Debian. Ang gawain ay hindi tumakbo sa mga host ng CentOS.

Maaari mo ring suriin ang maraming mga kundisyon nang sabay at patakbuhin ang gawain lamang kung ang lahat ng mga kundisyon ay totoo. Tingnan natin ang isang halimbawa.

Lumikha ng isang bagong playbook kondisyon2.yaml tulad ng sumusunod:

$nanomga playbook/kondisyon2.yaml

I-type ang mga sumusunod na linya sa kondisyon2.yaml file:

- host: lahat
gumagamit: hindi nakakain
gawain:
- pangalan: Patakbuhin ang gawaing ito sa Debian lamang10
debug:
msg:'ang gawaing ito ay tumatakbo sa Debian 10'
kailan: ansible_fact['pamamahagi']=='Debian'
at hindi mababasa_fact['distribusyon_major_version']=='10'

Dito, tatakbo lamang ang gawain kung ang pamamahagi ay Debian ( ansible_fact [‘pamamahagi’] == ‘Debian’ ) at ang bersyon ay 10 ( ansible_fact [‘distribusyon_major_version’] == ’10’ ). Kung ang parehong mga kundisyon ay totoo, pagkatapos ay tatakbo ang gawain. Othewise, ang gawain ay hindi tatakbo.

Ginamit ko ang at keyword upang suriin kung ang parehong mga kundisyon ay totoo dito. Kung nais mong suriin kung alinman sa mga kondisyon ay totoo, maaari mo itong magamit o sa halip na keyword.

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang playbook kondisyon2.yaml tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/kondisyon2.yaml

Tulad ng nakikita mo, ang gawain ay nagpatakbo lamang sa mga host ng Debian 10.

Palitan natin ang playbook kondisyon2.yaml upang patakbuhin ang gawain lamang sa mga host ng Debian 8 tulad ng sumusunod.

Tulad ng nakikita mo, lahat ng mga host ay nilaktawan dahil wala akong anumang mga host ng Debian 8 sa file ng imbentaryo.

Paggawa gamit ang Ansible apt Module

Ang apt Ang module ng Ansible ay ginagamit upang mag-install ng isang tukoy na pakete ng software sa mga host ng Ubuntu / Debian. Tingnan natin kung paano gamitin ang modyul na ito.

Una, lumikha ng isang bagong playbook apt1.yaml nasa mga playbook / direktoryo tulad ng sumusunod:

$nanomga playbook/apt1.yaml

I-type ang mga sumusunod na linya sa apt1.yaml playbook:

- host: debian10
gumagamit: hindi nakakain
maging: Totoo
gawain:
- pangalan: I-install ang apache2
apt:
pangalan: apache2
estado: pinakabagong

Ang apt module ay nangangailangan lamang ng pangalan ng package na nais mong i-install / i-upgrade / alisin at ang estado ng package.

Dito, sinusubukan kong i-install ang apache2 pakete ( pangalan: apache2 ) sa aking mga host ng Debian 10. Habang sinusubukan kong mag-install ng isang pakete at i-upgrade din ito kung magagamit ang isang bagong bersyon, ang estado ay dapat na pinakabagong .

estado Tumatanggap din ng mga sumusunod na pagpipilian:

- absent - Aalisin ang package kung naka-install na.
- pinakabagong - Ang package ay maa-upgrade kung ang isang pag-update ay magagamit. Kung ang package ay hindi pa nai-install, mai-install ito.
- kasalukuyan - Ang pakete ay mai-install kung hindi pa nai-install. Ngunit ang package ay hindi maa-upgrade kung ang isang pag-update ay magagamit.

Pansinin na idinagdag ko maging: Totoo sa playbook. Ibibigay nito ang hindi nakakain pribilehiyo ng gumagamit sudo para sa pagbabago ng istraktura ng filesystem (ibig sabihin, i-install / i-upgrade / alisin ang mga pakete). Nang walang maging: Totoo , ang apt module ay hindi magagawang i-install ang apache2 pakete

Kapag natapos ka na, i-save ang playbook sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang apt1.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/apt1.yaml

Tulad ng nakikita mo, matagumpay na tumakbo ang playbook sa mga host ng Debian 10.

Tulad ng nakikita mo, ang apache2 naka-install ang package sa aking mga host ng Debian 10.

Paggawa gamit ang Ansible dnf / yum Module

Ang dnf at yum Ang module ng Ansible ay ginagamit upang mag-install ng isang tukoy na pakete ng software sa mga host ng CentOS / RHEL. Maaari mong gamitin ang modyul na ito sa parehong paraan na ginawa mo apt module sa naunang seksyon ng artikulong ito.

Parehong ang dnf at yum tinatanggap ng mga module ang parehong mga parameter. Maaari mong gamitin ang dnf module sa CentOS / RHEL 8 host, at yum sa CentOS / RHEL 7 o mas matanda pa.

Tingnan natin ngayon ang isang halimbawa ng modyul na ito.

Una, lumikha ng isang bagong playbook dnf1.yaml nasa mga playbook / direktoryo tulad ng sumusunod:

$nanomga playbook/dnf1.yaml

I-type ang mga sumusunod na linya sa dnf1.yaml playbook:

- host: centos8
gumagamit: hindi nakakain
maging: Totoo
gawain:
- Pangalan: Mag-install ng httpd package
dnf:
pangalan: httpd
estado: pinakabagong

Ang dnf at yum module ay nangangailangan lamang ng pangalan ng package na nais mong i-install / i-upgrade / alisin at ang estado ng package.

Dito, sinusubukan kong i-install ang httpd pakete ( pangalan: httpd ) sa aking mga host ng CentOS 8. Habang sinusubukan kong mag-install ng isang pakete, at nais kong i-upgrade ito kung magagamit ang isang bagong bersyon, ang estado ay dapat na pinakabagong .

estado Tumatanggap ng mga sumusunod na pagpipilian:

- absent - Aalisin ang package kung naka-install na.
- pinakabagong - Ang package ay maa-upgrade kung ang isang pag-update ay magagamit. Kung ang package ay hindi pa nai-install, mai-install ito.
- kasalukuyan - Ang pakete ay mai-install kung hindi pa nai-install. Ngunit ang package ay hindi maa-upgrade kung ang isang pag-update ay magagamit.

Pansinin na idinagdag ko maging: Totoo sa playbook. Ibinibigay nito ang hindi nakakain pribilehiyo ng gumagamit sudo para sa pagbabago ng istraktura ng filesystem (ibig sabihin, i-install / i-upgrade / alisin ang mga pakete). Nang walang maging: Totoo , ang apt module ay hindi magagawang i-install ang httpd pakete

Kapag natapos ka na, i-save ang playbook sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang dnf1.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/dnf1.yaml

Tulad ng nakikita mo, matagumpay na tumakbo ang playbook sa host ng CentOS 8.

Paggawa gamit ang Ansible service Module

Ang serbisyo Ang module ng Ansible ay ginagamit upang simulan, ihinto, i-restart, paganahin (magdagdag ng serbisyo sa startup), at huwag paganahin (alisin ang serbisyo mula sa startup) na mga serbisyo sa iyong mga host.

Sa mga naunang seksyon, ipinakita ko sa iyo kung paano i-install ang Apache HTTP server package gamit ang Ansible apt , dnf at yum mga modyul Tiyakin natin ngayon na ang serbisyo ng server ng Apache HTTP ay tumatakbo at naidagdag sa pagsisimula ng system.

Makikipagtulungan ako sa aking mga host ng Debian 10. Ngunit, maaari kang gumana sa mga host ng CentOS 8, kung nais mo. Ayusin lamang ang playbook nang naaayon.

Una, lumikha ng isang bagong Ansible playbook apt2.yaml tulad ng sumusunod:

$nanomga playbook/apt2.yaml

I-type ang mga sumusunod na linya sa apt2.yaml playbook:

- host: debian10
gumagamit: hindi nakakain
maging: Totoo
gawain:
- pangalan: I-install ang apache2
apt:
pangalan: apache2
estado: pinakabagong
- Pangalan: Simulan ang serbisyo ng apache2
serbisyo:
pangalan: apache2
estado: nagsimula
pinagana: Totoo

Dito, nagdagdag ako ng isang bagong gawain, Simulan ang serbisyo ng apache2 .

pangalan: apache2 - ang serbisyo na pinagtatrabahuhan ko ay apache2 .

estado: nagsimula - dapat na tumatakbo ang serbisyo.

pinagana: Totoo - ang serbisyo ay dapat idagdag sa startup ng system.

Ang estado Tumatanggap ang parameter ng iba pang mga halaga.

- reload - Dapat na i-reload ng serbisyo ang mga file ng pagsasaayos.
- restart - Dapat i-restart ang serbisyo.
- nagsimula - Dapat na tumatakbo ang serbisyo. Kung ang serbisyo ay hindi tumatakbo, simulan ang serbisyo.
- huminto - Dapat ihinto ang serbisyo. Kung tumatakbo ang serbisyo, itigil ang serbisyo.

Patakbuhin ang playbook apt2.yaml tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/apt2.yaml

Tulad ng nakikita mo, matagumpay na tumakbo ang playbook.

Tulad ng nakikita mo, ang apache2 tumatakbo ang serbisyo sa aking mga host ng Debian 10.

Paggawa gamit ang Ansible copy Module

Ang Ansible kopya Pangunahing ginagamit ang module upang makopya ang mga file mula sa iyong computer hanggang sa mga remote host.

Sa naunang seksyon, na-install ko ang Apache 2 web server sa aking Debian 10 host. Paandahin natin ngayon ang isang index.html file sa webroot ng mga host ng Debian 10.

Una, lumikha ng isang bagong direktoryo mga file/ tulad ng sumusunod:

$mkdir -vmga file

Lumikha ng isang bagong file index.html nasa mga file/ direktoryo tulad ng sumusunod:

$nanomga file/index.html

I-type ang mga sumusunod na linya sa index.html file:


< html >
< ulo >
< pamagat >Webserver ni Ansible</ pamagat >
</ ulo >
< katawan >
< h1 >Maligayang pagdating sa LinuxHint</ h1 >
< p >Ang web server na ito ay na-deploy gamit ang Ansible.</ p >
</ katawan >
</ html >

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Lumikha ng isang bagong Ansible playbook apt3.yaml tulad ng sumusunod:

$nanomga playbook/apt3.yaml

I-type ang mga sumusunod na linya sa apt3.yaml file:

- host: debian10
gumagamit: hindi nakakain
maging: Totoo
gawain:
- pangalan: I-install ang apache2
apt:
pangalan: apache2
estado: pinakabagong
- pangalan: Kopyahin ang index.html sa server
kopya:
src: ../mga file/index.html
dest:/kung saan/www/html/index.html
mode: 0644
may-ari: www-data
pangkat: www-data
- Pangalan: Simulan ang serbisyo ng apache2
serbisyo:
pangalan: apache2
estado: nagsimula
pinagana: Totoo

Narito, ang gawain Kopyahin ang index.html sa server kopya ang index.html galing sa mga file/ direktoryo sa / var / www / html / direktoryo ng mga host ng Debian 10.

src: ../files/index.html - Ang path ng pinagmulan ng file.
dest: /var/www/html/index.html - Ang patutunguhang file path.
mode: 0644 - Ang mga pahintulot para sa gumagamit ng file (6 - basahin at isulat), pangkat (4 - basahin), at iba pa (4 - basahin).
may-ari: www-data - Itakda ang may-ari ng file sa www-data .
pangkat: www-data - Itakda ang pangkat ng file sa www-data .

Kapag natapos ka na, i-save ang file sa pamamagitan ng pagpindot + X sinundan ng AT at .

Patakbuhin ang apt3.yaml playbook tulad ng sumusunod:

$mga aklat-aralin na hindi nasusulat-playbook/apt3.yaml

Tulad ng nakikita mo, ang gawain Kopyahin ang index.html sa server ay matagumpay.

Tulad ng nakikita mo, ang index.html ang file ay nakopya sa mga host ng Debian 10.

Tulad ng nakikita mo, ang Debian 10 webserver ay nagsisilbi sa index.html pahina na kinopya ko lang sa mga host ng Debian 10.

Kaya, ito ang mga pangunahing kaalaman sa Ansible. Maaari kang matuto nang higit pa tungkol sa Ansible sa pamamagitan ng pagbabasa ng opisyal na dokumentasyon ng Ansible. Salamat sa pagbabasa ng artikulong ito.