Ansible Playbook Ինչպես ստեղծել և կարգավորել Playbooks


Եթե դուք համակարգի ադմինիստրատոր եք կամ DevOps-ի ինժեներ, դուք գիտեք, թե որքան կարևոր է ավտոմատացումը ձեր ամենօրյա գործունեության մեջ: Ավտոմատացման ամենահայտնի գործիքներից մեկը Ansible-ն է՝ կոնֆիգուրացիայի կառավարման գործիք, որը հեշտացնում է սերվերների, ցանցային սարքերի և այլ ՏՏ ենթակառուցվածքների կառավարումը: Այս հոդվածում մենք կանդրադառնանք Ansible խաղային գրքույկներին՝ Ansible-ի հզոր հատկանիշը, որը թույլ է տալիս ավտոմատացնել բարդ առաջադրանքներն ու կոնֆիգուրացիաները:

Ի՞նչ է Ansible Playbook-ը:

Ansible playbook-ը YAML ֆայլ է, որը նկարագրում է առաջադրանքների մի շարք, որոնք պետք է կատարվեն մեկ կամ մի քանի հոստերի վրա: Playbook-ը Ansible ավտոմատացման սիրտն է, որն ապահովում է առաջադրանքները որոշակի կարգով սահմանելու և կատարելու կառուցվածքային եղանակ: Playbooks-ը գրված է YAML-ով, որը մարդու կողմից ընթեռնելի տվյալների սերիականացման լեզվով է, և դրանք կարող են կառավարվել տարբերակով, ինչպես ցանկացած այլ տեքստային ֆայլ: Playbooks-ը հեշտ է կարդալ, գրել և հասկանալ նույնիսկ ոչ ծրագրավորողների համար:

Ansible Playbook-ի անատոմիան

Ansible խաղագիրքը կազմված է չորս հիմնական բաղադրիչներից

  • Հոսթներ − թիրախավորել հոսթինգները, որոնց վրա առաջադրանքները կկատարվեն: Հոսթները կարող են սահմանվել՝ օգտագործելով IP հասցեներ, հոսթների անուններ կամ նախշեր, որոնք համընկնում են հյուրընկալողների խմբերին:

  • Փոփոխականներ − Փոփոխականները սահմանում են խաղագրքի առաջադրանքների կողմից օգտագործվող տվյալները: Փոփոխականները կարող են սահմանվել խաղատախտակի կամ առաջադրանքի մակարդակում: Դրանք կարող են նաև սահմանվել որպես լռելյայն կամ անտեսվել յուրաքանչյուր հյուրընկալողի կամ խմբի համար:

  • Առաջադրանքները - Առաջադրանքները սահմանում են գործողություններ, որոնք պետք է իրականացվեն թիրախային հոսթինգների վրա: Առաջադրանքները կարող են կազմված լինել մոդուլներից, որոնք նախապես կառուցված Ansible սկրիպտներ են, որոնք կատարում են հատուկ գործառույթներ, ինչպիսիք են ֆայլերի կառավարումը, փաթեթների տեղադրումը կամ ծառայությունների վերագործարկումը:

  • Կարգավորիչներ − Կառավարիչները սահմանում են գործողություններ, որոնք պետք է կատարվեն առաջադրանքների կողմից հրահրված իրադարձություններին ի պատասխան: Հանդիսավորները նման են առաջադրանքներին, բայց գործարկվում են միայն այն դեպքում, երբ ծանուցվում են առաջադրանքից: Գործող սարքերը կարող են օգտագործվել, օրինակ, ծառայությունը վերագործարկելու համար միայն այն դեպքում, եթե այն փոխվել է առաջադրանքով:

Ansible Playbook-ի ստեղծում

Ansible խաղատախտակի ստեղծումը պարզ գործընթաց է: Նախ, դուք պետք է ստեղծեք YAML ֆայլ և սահմանեք հյուրընկալողներ, փոփոխականներ, առաջադրանքներ և մշակողներ: Ահա մի պարզ գրքի օրինակ, որը փաթեթ է տեղադրում մի խումբ հոսթինգների վրա −

---
- hosts: webservers
	become: yes
	tasks:
	- name: Install Apache2
	apt:
		name: apache2
		state: latest
	handlers:
	- name: Restart Apache2
	service:
		name: apache2
		state: restarted

Այս օրինակում մենք սահմանում ենք հոսթինգների խումբ, որը կոչվում է «վեբսերվերներ» և նշում, որ մենք ցանկանում ենք առաջադրանքները կատարել որպես արմատային օգտվող (օգտագործելով «դառնալ՝ այո»): Մենք սահմանում ենք առաջադրանք, որը կոչվում է «Install Apache2», որն օգտագործում է apt մոդուլ՝ Apache2 վեբ սերվերի վերջին տարբերակը տեղադրելու համար: Վերջապես, մենք սահմանում ենք «Վերագործարկեք Apache2» կոչվող կարգավորիչը, որն օգտագործում է ծառայության մոդուլը Apache2 ծառայությունը վերագործարկելու համար, եթե այն փոխվել է առաջադրանքով:

Ansible Playbook-ի կատարում

Երբ ստեղծեք ձեր խաղագիրքը, կարող եք այն կատարել «ansible-playbook» հրամանի միջոցով: Ահա մի օրինակ, թե ինչպես կարելի է կատարել խաղագիրքը, որը մենք ստեղծել ենք ավելի վաղ −

ansible-playbook playbook.yml

Այս հրամանը կգործարկի «Վեբսերվերներ» խմբում սահմանված բոլոր հոստերի վրա: Ansible-ը կմիանա յուրաքանչյուր հոսթին SSH-ի միջոցով և կկատարի առաջադրանքները խաղատախտակի մեջ սահմանված կարգով: Ansible-ը նաև կհավաքի և կցուցադրի արդյունքները յուրաքանչյուր առաջադրանքից և մշակողից:

Ansible Playbooks-ի առաջադեմ առանձնահատկությունները

Ansible գրքույկներն ապահովում են բազմաթիվ առաջադեմ գործառույթներ, որոնք թույլ են տալիս ավտոմատացնել բարդ առաջադրանքներն ու կոնֆիգուրացիաները: Ահա մի քանի օրինակներ −

Օղակներ

Loops-ը թույլ է տալիս կրկնել առաջադրանքը ցուցակի յուրաքանչյուր կետի համար: Սա կարող է օգտակար լինել, օրինակ, մի քանի փաթեթներ տեղադրելիս կամ բազմաթիվ ֆայլեր ստեղծելիս: Ահա խաղային գրքի օրինակ, որը տեղադրում է բազմաթիվ փաթեթներ՝ օգտագործելով հանգույց −

---
- hosts: webservers
  become: yes
  vars:
	packages:
	- apache2
	- mysql-server
	- php
  tasks:
  - name: Install packages
	apt:
		name: "{{ item }}"
		state: latest
	loop: "{{ packages }}"

Այս օրինակում մենք սահմանում ենք «փաթեթներ» կոչվող փոփոխական, որը պարունակում է փաթեթների անունների ցանկ: Այնուհետև մենք օգտագործում ենք հանգույց, որպեսզի կրկնենք ցուցակը և տեղադրենք յուրաքանչյուր փաթեթ՝ օգտագործելով apt մոդուլը:

Պայմաններ

Պայմանները թույլ են տալիս կատարել առաջադրանքներ՝ հիմնվելով որոշակի պայմանների վրա: Սա կարող է օգտակար լինել, օրինակ, փաթեթը տեղադրելիս միայն այն դեպքում, եթե այն արդեն տեղադրված չէ: Ահա խաղային գրքի օրինակ, որը տեղադրում է փաթեթ միայն այն դեպքում, եթե այն արդեն տեղադրված չէ

---
- hosts: webservers
  become: yes
  vars:
    package: apache2
  tasks:
  - name: Check if package is installed
    command: "dpkg -s {{ package }}"
    register: result
    ignore_errors: true
  - name: Install package
    apt:
      name: "{{ package }}"
      state: latest
    when: result.rc != 0

Այս օրինակում մենք սահմանում ենք փոփոխական, որը կոչվում է «փաթեթ», որը պարունակում է տեղադրվող փաթեթի անվանումը: Մենք օգտագործում ենք «հրաման» մոդուլը՝ ստուգելու համար, թե արդյոք փաթեթն արդեն տեղադրված է, և գրանցելու արդյունքում ստացվում է «արդյունք» կոչվող փոփոխական։ Այնուհետև մենք օգտագործում ենք պայմանական փաթեթը տեղադրելու համար միայն այն դեպքում, եթե հրամանը վերադարձնում է ոչ զրոյական կարգավիճակի կոդ՝ նշելով, որ փաթեթն արդեն տեղադրված չէ:

Դերեր

Դերերը թույլ են տալիս կազմակերպել ձեր խաղային տետրերը վերօգտագործվող աշխատանքի միավորների մեջ: Դերերը պարունակում են առաջադրանքներ, մշակիչներ, փոփոխականներ և ֆայլեր, որոնք հատուկ են որոշակի ֆունկցիայի կամ հավելվածի: Դերերը կարող են կիսվել և նորից օգտագործվել բազմաթիվ խաղային գրքերում: Ահա մի պարզ դերի օրինակ, որը տեղադրում է փաթեթ −

---
- name: Install Apache2
  become: yes
  apt:
    name: apache2
    state: latest

Այս օրինակում մենք սահմանում ենք «apache2» կոչվող դերը, որը տեղադրում է Apache2 փաթեթը՝ օգտագործելով apt մոդուլը: Այնուհետև մենք կարող ենք ներառել այս դերը խաղատախտակի մեջ՝ օգտագործելով «include_role» մոդուլը −

---
- hosts: webservers
  become: yes
  tasks:
  - name: Install Apache2
    include_role:
      name: apache2

Այս օրինակում մենք ներառում ենք «apache2» դերը մեր խաղագրքում՝ օգտագործելով «include_role» մոդուլը: Ansible-ը ավտոմատ կերպով կկատարի դերում սահմանված առաջադրանքները:

Ահա Ansible գրքույկի ևս մի քանի առաջադեմ առանձնահատկություններ, որոնք կարող եք օգտագործել ձեր ենթակառուցվածքը ավտոմատացնելու համար

Փոփոխականներ և կաղապարներ

Ansible գրքույկները թույլ են տալիս օգտագործել փոփոխականներ՝ առաջադրանքների միջև արժեքներ փոխանցելու, լռելյայն արժեքներ սահմանելու և որոշակի հոսթինգների կամ խմբերի արժեքները վերացնելու համար: Դուք կարող եք նաև օգտագործել կաղապարներ՝ փոփոխականների վրա հիմնված կազմաձևման ֆայլերը դինամիկ ձևավորելու համար: Ահա խաղային գրքի օրինակ, որն օգտագործում է փոփոխականներ և կաղապարներ −

---
- hosts: webservers
  become: yes
  vars:
    server_name: example.com
    document_root: /var/www/html
  tasks:
  - name: Create virtual host file
    template:
      src: virtualhost.j2
      dest: /etc/apache2/sites-available/{{ server_name }}
  - name: Enable virtual host
    command: "a2ensite {{ server_name }}"
  - name: Create document root
    file:
      path: "{{ document_root }}"
      state: directory

Այս օրինակում մենք փոփոխականներ ենք սահմանում սերվերի անվան և փաստաթղթերի արմատային գրացուցակի համար: Այնուհետև մենք օգտագործում ենք ձևանմուշային մոդուլ՝ «virtualhost.j2» կոչվող Jinja2 ձևանմուշի վրա հիմնված վիրտուալ հոսթի կազմաձևման ֆայլ ստեղծելու համար: Մենք օգտագործում ենք «հրաման» մոդուլը՝ վիրտուալ հոսթին և «ֆայլ» մոդուլին հնարավորություն տալու համար՝ փաստաթղթերի արմատային գրացուցակը ստեղծելու համար:

Պիտակներ

Ansible playbooks-ը թույլ է տալիս առաջադրանքներին հատկորոշել պիտակներ՝ թույլ տալով ընտրողաբար կատարել առաջադրանքները՝ հիմնվելով դրանց պիտակների վրա: Սա կարող է օգտակար լինել վրիպազերծման կամ փորձարկման ժամանակ գրքույկները: Ահա խաղային գրքի օրինակ, որն օգտագործում է պիտակներ −

---
- hosts: webservers
  become: yes
  tasks:
  - name: Install Apache2
    apt:
      name: apache2
      state: latest
    tags: apache
  - name: Install MySQL
    apt:
      name: mysql-server
      state: latest
    tags: mysql

Այս օրինակում մենք հատկորոշում ենք երկու առաջադրանք՝ «apache» և «mysql»: Այնուհետև մենք կարող ենք կատարել միայն առաջադրանքներ հատուկ պիտակով, օգտագործելով «ansible-playbook» հրամանը −

ansible-playbook playbook.yml --tags apache

Այս հրամանը կկատարի միայն «apache» թեգով առաջադրանքը:

պահոց

Ansible գրքույկները թույլ են տալիս գաղտնագրել զգայուն տվյալները՝ օգտագործելով Ansible Vault-ը: Vault-ն ապահովում է այնպիսի զգայուն տվյալներ, ինչպիսիք են գաղտնաբառերը, API ստեղները և SSH ստեղները գաղտնագրված ձևաչափով պահելու և կառավարելու միջոց: Ահա խաղային գրքի օրինակ, որն օգտագործում է Ansible Vault −

---
- hosts: webservers
  become: yes
  vars:
    db_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          61646566336461333462323466633435386366663433663237663731346662336434303863316535
  tasks:
  - name: Create database user
    mysql_user:
      name: dbuser
      password: "{{ db_password }}"
      priv: '*.*:ALL,GRANT'

Այս օրինակում մենք սահմանում ենք փոփոխական, որը կոչվում է «db_password», որը կոդավորված է Ansible Vault-ի միջոցով: Այնուհետև մենք օգտագործում ենք «mysql_user» մոդուլը տվյալների բազայի օգտատեր ստեղծելու և կոդավորված գաղտնաբառ փոխանցելու համար՝ օգտագործելով «{{ }}» շարահյուսությունը:

Եզրակացություն

Ansible playbooks-ը հզոր գործիք է ՏՏ ենթակառուցվածքի ավտոմատացման համար: Playbooks-ն ապահովում է առաջադրանքները որոշակի հերթականությամբ սահմանելու և կատարելու կառուցվածքային եղանակ՝ հեշտացնելով բարդ կոնֆիգուրացիաների ավտոմատացումը: Playbooks-ը հեշտ է կարդալ, գրել և հասկանալ նույնիսկ ոչ ծրագրավորողների համար: Ansible-ն ապահովում է բազմաթիվ առաջադեմ հնարավորություններ, ինչպիսիք են օղակները, պայմանականները և դերերը, որոնք թույլ են տալիս հեշտությամբ ավտոմատացնել բարդ առաջադրանքները և կոնֆիգուրացիաները: Եթե դուք արդեն չեք օգտագործում Ansible գրքույկները, ժամանակն է սկսել: