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 գրքույկները, ժամանակն է սկսել: