Ինչպե՞ս աշխատել անսխալ փոփոխականների և փաստերի հետ:
Ansible-ը լայնորեն օգտագործվող բաց կոդով գործիք է, որն օգնում է ավտոմատացնել ծրագրային ապահովման ապահովումը, կոնֆիգուրացիայի կառավարումը և հավելվածների տեղակայումը: Դրա հզոր առանձնահատկություններից մեկը փոփոխականներ և փաստեր օգտագործելու ունակությունն է, որը կարող է պարզեցնել ձեր խաղային գրքույկներն ու առաջադրանքները և թույլ տալ նախագծել ավելի դինամիկ, ճկուն և բազմակի օգտագործման ավտոմատացման սցենարներ:
Այս հոդվածում մենք կսովորենք, թե ինչպես աշխատել Ansible փոփոխականների և փաստերի հետ՝ ցույց տալով մի քանի օրինակներ և դրանց համապատասխան արդյունքը:
Հասկանալով Ansible Variables
Ansible-ի փոփոխականները թույլ են տալիս պահպանել և շահարկել արժեքները, որոնք կարող են օգտագործվել բազմաթիվ առաջադրանքների կամ նույնիսկ տարբեր խաղային գրքույկների համար: Փոփոխականները կարող են սահմանվել տարբեր վայրերում, և դրանց շրջանակը հիմնականում որոշվում է նրանով, թե որտեղ են դրանք սահմանվում:
Փոփոխականների սահմանում
Ansible -ում փոփոխականները սահմանելու բազմաթիվ եղանակներ կան
Խաղատետրում - Ահա մի օրինակ, թե ինչպես կարող եք փոփոխական սահմանել խաղատետրում -
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
tasks:
- name: Ensure Apache is at the latest version
yum:
name: httpd
state: latest
Այս գրքույկում http_port և max_clients փոփոխականները սահմանված են և կարող են օգտագործվել այս գրքույկի ցանկացած առաջադրանքում:
Գույքագրման ֆայլում − Փոփոխականները կարող են սահմանվել նաև գույքագրման ֆայլում −
[webservers]
server1 ansible_host=192.168.1.10 http_port=80 max_clients=200
Այս գույքագրման ֆայլում http_port և max_clients սահմանված են server1-ի համար:
Օգտագործելով փոփոխականներ
Դուք կարող եք օգտագործել այս փոփոխականները առաջադրանքների կամ ձևանմուշների մեջ՝ դրանք փակելով կրկնակի գանգուր փակագծերում: Ահա մի օրինակ -
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
tasks:
- name: Ensure Apache is configured with vars
template:
src: /etc/httpd/conf/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
Կաղապարի ֆայլում դուք կհղեք այս փոփոխականներին այսպես −
Listen {{ http_port }}
MaxClients {{ max_clients }}
Հստակ փաստերի ըմբռնում
Հստակ փաստերը թիրախային համակարգից ստացված տեղեկատվության կտորներն են, ինչպիսիք են ցանցային միջերեսները, ՕՀ-ի մանրամասները, IP հասցեները և այլն: Այս փաստերը պահվում են փոփոխականների մեջ և կարող են օգտագործվել խաղատախտակներում:
Ansible-ը փաստեր հավաքելու համար օգտագործում է մի մոդուլ, որը կոչվում է setup: Եթե ցանկանում եք տեսնել, թե ինչ փաստեր է հավաքում Ansible-ը համակարգի մասին, գործարկեք հետևյալ հրամանը −
ansible −m setup hostname
Փոխարինեք հոսթի անունը այն հոսթի անունով կամ IP-ով, որը ցանկանում եք թիրախավորել: Արդյունքը կլինի JSON փաստաթուղթ, որը թվարկում է այդ հաղորդավարի համար հավաքված բոլոր փաստերը:
Ահա առաջադրանքում փաստերի օգտագործման օրինակ −
---
- hosts: webservers
tasks:
- name: Display OS family
debug:
msg: "The operating system family is {{ ansible_os_family }}"
Այս օրինակում ansible_os_family-ը փաստ է, որը տալիս է թիրախային համակարգի OS ընտանիքը:
Փոփոխականների կազմակերպում
Ձեր Ansible-ի օգտագործումը չափելիս կարող եք պարզել, որ գործ ունեք մեծ թվով փոփոխականների հետ: Նման սցենարներում նպատակահարմար է կառավարել ձեր փոփոխականները հատուկ ֆայլերում կամ նույնիսկ դիրեկտորիաներում:
Առանձին փոփոխականների ֆայլերում - Դուք կարող եք փոփոխականներ սահմանել առանձին ֆայլերում և այնուհետև ներառել այդ ֆայլերը ձեր խաղային գրքույկներում, այսպես.
---
- hosts: webservers
vars_files:
- vars/apache.yml
tasks:
- name: Ensure Apache is at the latest version
yum:
name: httpd
state: latest
Vars/apache.yml-ում կարող եք փոփոխականները սահմանել այսպես −
---
http_port: 80
max_clients: 200
Գրացուցակում – Ավելի լավ կազմակերպման համար, հատկապես ավելի մեծ նախագծերի համար, դուք կարող եք փոփոխականներ պահել գրացուցակի կառուցվածքում:
---
- hosts: webservers
vars_files:
- vars/apache.yml
- vars/directory/extra_vars.yml
tasks:
- name: Ensure Apache is at the latest version
yum:
name: httpd
state: latest
Vars/directory/extra_vars.yml-ում դուք կարող եք սահմանել լրացուցիչ փոփոխականներ:
Ընդլայնված փոփոխականի օգտագործում. Փաստերի քեշավորում
Ansible-ի հզոր հատկանիշներից մեկը փաստերը քեշավորելու ունակությունն է: Սա հատկապես օգտակար է, երբ դուք աշխատում եք մեծ գույքագրման հետ կամ երբ ցանկանում եք օգտագործել հավաքված փաստերը բազմաթիվ գրքույկներում՝ առանց դրանք ամեն անգամ նորից հավաքելու:
Փաստերի քեշավորումն ակտիվացնելու համար ձեր ansible.cfg ֆայլում պետք է սահմանեք հետևյալ պարամետրերը.
[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 7200
Այս կազմաձևով Ansible-ը հավաքված փաստերը կքեշավորի /tmp/ansible_facts գրացուցակում և նորից չի հավաքի դրանք 7200 վայրկյան (2 ժամ):
Այս օրինակը ցույց է տալիս, թե ինչպես մուտք գործել քեշավորված փաստեր −
---
- hosts: webservers
tasks:
- name: Display cached OS family
debug:
msg: "The cached operating system family is {{ ansible_os_family }}"
Այս գրքույկում ansible_os_family-ն կօգտագործի քեշի արժեքը, եթե այն հասանելի է և ոչ ավելի, քան 2 ժամ:
Փոփոխական գերակայություն
Ansible-ում կան փոփոխականներ սահմանելու բազմաթիվ եղանակներ, և շատ կարևոր է հասկանալ դրանց գնահատման հերթականությունը: Այս կարգը, որը հայտնի է որպես փոփոխականի գերակայություն, թույլ է տալիս վերահսկել փոփոխականի վերջնական արժեքը:
Ահա պարզեցված գերակայության կարգը ամենացածրից մինչև ամենաբարձրը −
Դերի լռելյայն
Գույքագրման ֆայլի կամ սցենարների խմբի vars
Գույքագրման group_vars/all
Playbook group_vars/all
Գույքագրման խումբ_վարս/*
Playbook group_vars/*
Գույքագրման ֆայլ կամ սկրիպտի հոսթ vars
Գրապահոց host_vars/*
Playbook host_vars/*
Հյուրընկալող փաստեր/քեշավորված set_facts
Խաղալ vars
Խաղացեք vars_prompt
Խաղացեք vars_files
Role vars (սահմանված է role/vars/main.yml-ում)
Արգելափակել vars (միայն բլոկի առաջադրանքների համար)
Առաջադրանքի տառեր (միայն առաջադրանքի համար)
Լրացուցիչ տառեր (միշտ շահել գերակայությունը)
Փոփոխական տեսակներ
Բացի ստանդարտ փոփոխականներից, Ansible-ն առաջարկում է մի քանի հատուկ փոփոխականների տեսակներ, որոնք կարող են շատ օգտակար լինել: Դրանք ներառում են −
Ցանկի փոփոխականներ − Այս տեսակը թույլ է տալիս ստեղծել արժեքների ցանկ (զանգված):
fruits:
- Apple
- Banana
- Orange
Բառարանային փոփոխականներ - Այս տեսակը հնարավորություն է տալիս ավելի բարդ տվյալների կառուցվածքների պահպանմանը:
user:
name: John Doe
job: Developer
Բուլյան փոփոխականներ − Դրանք օգտագործվում են True/False արժեքները պահելու համար:
debug_mode: True
Կոմպլեքս փոփոխականների մուտք
Ցանկի և բառարանի փոփոխականների համար կարող եք մուտք գործել առանձին տարրեր՝ ըստ իրենց ինդեքսի կամ բանալիի: Օրինակ −
---
- hosts: localhost
gather_facts: no
vars:
fruits:
- Apple
- Banana
- Orange
user:
name: John Doe
job: Developer
tasks:
- debug:
msg: "The first fruit in the list is {{ fruits[0] }}"
- debug:
msg: "The user's job is {{ user['job'] }}"
Վերոնշյալ խաղագիրքը դուրս կգա −
PLAY [localhost]
***************************************************************
TASK [debug]
*******************************************************************
ok: [localhost] => {
"msg": "The first fruit in the list is Apple"
}
TASK [debug]
*******************************************************************
ok: [localhost] => {
"msg": "The user's job is Developer"
}
PLAY RECAP
*********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Փոփոխականներով զտիչներ օգտագործելը
Ansible-ի ֆիլտրերը կարող են շահարկել փոփոխականները: Դրանք օգտագործվում են | բնավորություն. Օրինակ, «կանխադրված» ֆիլտրը կարող է օգտագործվել փոփոխականին լռելյայն արժեք նշանակելու համար, եթե այն սահմանված չէ.
---
- hosts: localhost
gather_facts: no
vars:
var1: "Hello"
tasks:
- debug:
msg: "{{ var1 | default('Hi') }}"
- debug:
msg: "{{ var2 | default('Hi') }}"
Վերոնշյալ խաղագիրքը դուրս կգա −
PLAY [localhost]
***************************************************************
TASK [debug]
*******************************************************************
ok: [localhost] => {
"msg": "Hello"
}
TASK [debug]
*******************************************************************
ok: [localhost] => {
"msg": "Hi"
}
PLAY RECAP
*********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Վրիպազերծման առաջին առաջադրանքում var1-ը սահմանված է, ուստի լռելյայն զտիչը չի փոխում իր արժեքը: Երկրորդ առաջադրանքում var2-ը սահմանված չէ, ուստի լռելյայն զտիչը նրան տալիս է «Բարև» արժեքը:
Ansible-ում փոփոխականները և փաստերը օգտագործելը հասկանալը արդյունավետ, բազմակի օգտագործման ավտոմատացման սցենարներ գրելու բանալին է: Միշտ շարունակեք սովորել և ուսումնասիրել այս հասկացությունները՝ Ansible-ից առավելագույն օգուտ քաղելու համար:
Եզրակացություն
Ansible փոփոխականները և փաստերը, երբ ճիշտ օգտագործվում են, կարող են մեծապես բարելավել ձեր ավտոմատացման աշխատանքային հոսքերը՝ դարձնելով ձեր առաջադրանքները ավելի դինամիկ, նվազեցնելով կրկնությունը և թույլ տալով ավելի արդյունավետ օգտագործել ռեսուրսները: Հիմնական փոփոխականների սահմանումից և օգտագործումից մինչև փաստերի քեշավորման պես առաջադեմ ռազմավարությունների կիրառում, կան լայն հնարավորություններ:
Հասկանալով այս հասկացությունները՝ դուք կարող եք գրել ավելի ճկուն, արդյունավետ և հզոր Ansible գրքույկներ: Ինչպես միշտ, համոզվեք, որ խորհրդակցեք Ansible-ի պաշտոնական փաստաթղթերին առավել ճշգրիտ և արդի տեղեկատվության համար: