Ինչպե՞ս աշխատել անսխալ փոփոխականների և փաստերի հետ:


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-ի պաշտոնական փաստաթղթերին առավել ճշգրիտ և արդի տեղեկատվության համար: