Ამაში ნაწილი 5 -ის საპასუხო სერია, ჩვენ ავუხსნით როგორ შევქმნათ საპასუხისმგებლო სპექტაკლები და სათამაშო წიგნები Ansible მოდულების გამოყენებით.
პასუხგაუცემელი გემები დამოუკიდებელი სკრიპტებით ე.წ მოდულები რომლებიც გამოიყენება სათამაშო წიგნები დისტანციურ კვანძებზე სპეციალიზებული ამოცანების შესასრულებლად.
მოდულები მოსახერხებელია ისეთი ამოცანების ავტომატიზაციისთვის, როგორიცაა პაკეტის მართვა, ფაილების დაარქივება და კოპირება მხოლოდ რამდენიმე მათგანის აღსანიშნავად. ისინი საშუალებას მოგცემთ შეცვალოთ კონფიგურაციის ფაილები და მართოთ ისეთი მოწყობილობები, როგორიცაა მარშრუტიზატორები, გადამრთველები, დატვირთვის ბალანსირება, ბუხარი და სხვა მრავალი მოწყობილობა.
ამ ქვეთემის მიზანია მოგაწოდოთ მიმოხილვა სხვადასხვა ამოცანების შესახებ, რომელთა შესრულებაც შესაძლებელია საპასუხო მოდულები:
პაკეტის მენეჯმენტი არის ერთ -ერთი ყველაზე მნიშვნელოვანი და ხშირი ამოცანა, რომელსაც ასრულებენ სისტემის ადმინისტრატორები. გამოსადეგი გემები მოდულებით, რომლებიც დაგეხმარებათ შეასრულოთ პაკეტის მართვის ამოცანები ორივეში Წითელი ქუდი და დებიანი დაფუძნებული სისტემები.
მათი გამოცნობა შედარებით ადვილია. არსებობს შესაფერისი მოდული ამისთვის APT პაკეტის მართვა დებიანისთვის, ძველი yum მოდული ამისთვის YUM პაკეტის მენეჯმენტი და dnf მოდული ასოცირდება ახალ RHEL დისტრიბუციებთან.
ქვემოთ მოცემულია რამდენიმე მაგალითი იმისა, თუ როგორ შეიძლება მოდულების გამოყენება ა სათამაშო წიგნი:
- სახელი: დააინსტალირეთ Apache ვებ სერვერის მასპინძლები: ვებ სერვერის ამოცანები: - სახელი: დააინსტალირეთ httpd dnf: სახელი: httpd მდგომარეობა: უახლესი.
- სახელი: დააინსტალირეთ Apache ვებ სერვერის მასპინძლები: მონაცემთა ბაზების ამოცანები: - სახელი: დააინსტალირეთ Apache ვებ სერვერი apt: სახელი: apache2 მდგომარეობა: უახლესი.
სერვისის მოდული საშუალებას აძლევს სისტემის ადმინისტრატორებს დაიწყონ, შეაჩერონ, განაახლონ, განაახლონ და განაახლონ სერვისები სისტემაში.
- სახელი: დაიწყეთ სერვისი httpd, თუ არ დაიწყო სერვისი: სახელი: httpd მდგომარეობა: დაიწყო.
- სახელი: სერვისის გაჩერება httpd სერვისი: სახელი: httpd მდგომარეობა: გაჩერებულია.
- სახელი: გადატვირთეთ ქსელის მომსახურება ინტერფეისის eth0 სერვისისთვის: სახელი: ქსელის მდგომარეობა: გადატვირთულია args: enp2s0.
როგორც სახელი გვთავაზობს, მოდულის კოპირება ასლებს ფაილებს დისტანციური აპარატის ერთი ადგილიდან იმავე ადგილას სხვა ადგილას.
- სახელი: დააკოპირეთ ფაილი მფლობელთან და ნებართვები ასლი: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf მფლობელი: tecmint ჯგუფი: tecmint რეჟიმი: '0644'
სათამაშო წიგნი აკოპირებს კონფიგურაციის ფაილს tecmint.conf დან /etc/files/ დირექტორია /srv/ დირექტორია, როგორც ექსპედიცია მომხმარებელთან ერთად 0644 ნებართვები.
ნებართვები ასევე შეიძლება წარმოდგენილი იყოს სიმბოლური წარმოდგენის გამოყენებით, როგორც ეს ნაჩვენებია ბოლო სტრიქონში.
- name: დააკოპირეთ ფაილი მფლობელთან და ნებართვები ასლი: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf მფლობელი: tecmint ჯგუფი: tecmint რეჟიმი: u = rw, g = r, o = r.
ნებართვები წინა მაგალითში შეიძლება წარმოდგენილი იყოს, როგორც ნაჩვენებია ბოლო სტრიქონში, მომხმარებელს ენიჭება წაიკითხე და დაწერე ნებართვები, ჯგუფს ენიჭება წერის ნებართვები, ხოლო დანარჩენ სამყაროს ენიჭება წაკითხვის ნებართვები.
ფაილის მოდული იგი გამოიყენება მრავალი ფაილური ოპერაციის შესასრულებლად, მათ შორის ფაილების და დირექტორიების შესაქმნელად, ფაილის ნებართვების მინიჭებისათვის და სიმლინკების დასაყენებლად.
- name: შეცვალეთ ფაილის მფლობელობა, ჯგუფი და ნებართვები ფაილი: path: /etc/tecmint.conf მფლობელი: tecmint ჯგუფი: tecmint რეჟიმი: '0644'
ზემოთ მოყვანილი პიესა ქმნის ფაილს სახელწოდებით tecmint.conf იმ /etc დირექტორიის ნებართვების დაყენება 0644.
- სახელი: ფაილის წაშლა (ფაილის წაშლა) ფაილი: გზა: /etc/tecmint.conf მდგომარეობა: არ არსებობს.
ეს წაშლის ან წაშლის ფაილს tecmint.conf.
- name: შექმენით დირექტორია, თუ ის არ არსებობს ფაილი: path: /etc /mydirectory მდგომარეობა: დირექტორია რეჟიმი: '0777'
ეს შექმნის დირექტორიას /etc დირექტორიის ნებართვების დაყენება 0777.
- name: დირექტორიის ფაილის რეკურსიული წაშლა: path: /etc/tecmint.conf მდგომარეობა: არ არსებობს.
ზემოხსენებული თამაში რეკურსიულად წაშლის დირექტორიას.
ხაზოვანი ფაილი მოდული სასარგებლოა, როდესაც გსურთ ფაილში ერთი სტრიქონის შეცვლა. მას შეუძლია შეცვალოს არსებული ხაზი.
- name: დარწმუნდით, რომ SELinux დაყენებულია რეჟიმის ხაზის აღსასრულებლად:
პიესა ზემოთ ადგენს სელინუქსი ღირებულება ინვალიდი.
SELINUX = გამორთულია.
- name: დაამატეთ ხაზი ფაილს, თუ ფაილი არ არსებობს, regexp lineinfile გავლის გარეშე: path: /etc /hosts line: 10.200.50.51 tecmint.com create: yes.
ეს ამატებს ჩანაწერს 10.200.50.51tecmint.com რომ /etc/hosts ფაილი
ან არქივი მოდული გამოიყენება ერთი ან რამდენიმე ფაილის შეკუმშული არქივის შესაქმნელად. იგი მიიჩნევს, რომ შეკუმშვის წყარო არსებობს სამიზნე დანიშნულების ადგილზე. დაარქივების შემდეგ, საწყისი ფაილი შეიძლება მოგვიანებით წაიშალოს ან წაიშალოს განცხადების გამოყენებით წაშლა = მართალია
.
- name: შეკუმშოს დირექტორია/path/to/tecmint_dir/in /path/to/tecmint.tgz არქივი: path: /path/to/tecmint_dir dest: /path/to/tecmint.tgz ეს შეკუმშავს/path/to/tecmint_dir დირექტორიას /path/to/tecmint.tgz.
- name: შეკუმშეთ რეგულარული ფაილი/path/to/tecmint /path/to/foo.gz და წაშალეთ არქივი: path:/path/to/tecmint dest: /path/to/tecmint.tgz ამოიღეთ: yes.
ზემოთ პიესაში, საწყისი ფაილი /path/to/tecmint წაიშლება არქივის დასრულების შემდეგ.
- name: შექმენით bz2 არქივი/path/to/tecmint archive: path:/path/to/tecmint ფორმატი: bz2.
ეს ქმნის შეკუმშულ ფაილს bz2 ფორმატიდან /path/to/tecmint ფაილი
მოდული მართავს პროგრამული საცავის git შემოწმებას.
- git: repo: ' https://foosball.example.org/path/to/repo.git' dest: /srv /checkout ვერსია: გამოშვება -0.22.
ერთ -ერთი ყველაზე ხშირად გამოყენებული მოდული, ბრძანება მოდული იღებს ბრძანების სახელს და მოგვიანებით მოჰყვება არგუმენტების სია. ბრძანება გავიდა იმავე გზით, როგორც თქვენ უნდა ჩაწეროთ Linux ჭურვი.
- name: ბრძანების შესრულება ბრძანების მოდულის ბრძანების გამოყენებით: cat helloworld.txt.
- სახელი: შეამოწმეთ დისტანციური მასპინძლის დროული მასპინძლები: სერვერების ამოცანები: - სახელი: შეასრულეთ Uptime ბრძანება ბრძანების მოდულის რეგისტრაციაზე: uptimeoutput ბრძანება: "uptime" - გამართვა: var: uptimeoutput.stdout_lines.
ბრძანების მოდული იღებს დისტანციური სერვერების ხანგრძლივობას.
ჩვეულებრივ, პასუხგაუცემელი სათამაშო წიგნები გამოიყენება მართული მასპინძლებისთვის დავალებების შესასრულებლად ბრძანების სტრიქონში გამომავალი ჩვენების გარეშე. თუმცა არის შემთხვევები, როდესაც შეიძლება მოგეთხოვოთ გამომავალი ან შედეგების გადაღება. ამ განყოფილებაში ჩვენ გეტყვით, თუ როგორ შეგიძლიათ დაიჭიროთ სათამაშო წიგნის გამომავალი ცვლადში და მოგვიანებით აჩვენოთ იგი.
პასუხგარეშე რეგისტრი გამოიყენება ამოცანის გამომავალი და ცვლადის შესანახად. ცვლადი შემდგომ შეიცავს ამოცანის განმსაზღვრელ დონეს.
მაგალითად, მოდით ვივარაუდოთ, რომ თქვენ გსურთ შეამოწმოთ მართული კვანძების დისკის გამოყენება შესაბამის ძირითად დირექტორიებში, გამოყენებით df -Th /
ბრძანება. თქვენ აპირებთ გამოიყენოთ "ბრძანება"
მოდული ბრძანების განსაზღვრისათვის და "რეგისტრაცია"
შეინარჩუნოს std გამომავალი ცვლადში.
ბრძანების ჩვენების მიზნით, თქვენ გამოიყენებთ "გამართვა"
მოდული stdout დაბრუნების მნიშვნელობის გვერდით.
- მასპინძლები: ყველა გახდება: დიახ ამოცანები: - სახელი: განახორციელეთ /ჩატვირთეთ გამოყენება მასპინძლებზე ბრძანება: 'df -Th /' რეგისტრაცია: df - გამართვა: var = df.stdout.
ახლა, გავუშვათ სათამაშო წიგნი. ამ შემთხვევაში, ჩვენ დავასახელეთ ჩვენი სათამაშო წიგნი check_disk_space.yml.
# ansible-playbook check_disk_space.yml.
როგორც ხედავთ, გამომავალი ყველაფერი შერეულია და ართულებს მის გაყოლას.
გამომავალი გასასწორებლად და წაკითხვის გასაადვილებლად, შეცვალეთ მკაცრი დაბრუნების ღირებულება ერთად stdout_lines.
- მასპინძლები: ყველა გახდება: დიახ ამოცანები: - სახელი: განახორციელეთ /ჩატვირთეთ გამოყენება მასპინძლებზე ბრძანება: 'df -Th /' რეგისტრაცია: df - გამართვა: var = df.stdout_lines.
ისევე როგორც პროგრამირების ენებზე, პირობითი განცხადებები გამოიყენება მაშინ, როდესაც შესაძლებელია ერთზე მეტი შედეგი. მოდით შევხედოთ Ansible სათამაშო წიგნებში ჩვეულებრივ გამოყენებულ პირობით განცხადებებს.
ზოგჯერ შეიძლება დაგჭირდეთ დავალებების შესრულება კონკრეტულ კვანძებზე და არა სხვაზე. 'როდესაც'
პირობითი განცხადება საკმაოდ ადვილი გამოსაყენებელია და განხორციელებულია სათამაშო წიგნში. გამოყენებისას 'როდესაც'
პუნქტი უბრალოდ აცხადებს პუნქტის მიმდებარე მდგომარეობას, როგორც ნაჩვენებია:
როდესაც: მდგომარეობა.
როდესაც პირობა დაკმაყოფილებულია, მაშინ ამოცანა შესრულებულია დისტანციურ სისტემაზე.
განვიხილოთ რამდენიმე მაგალითი:
- მასპინძლები: ყველა ამოცანა: - სახელი: დააინსტალირეთ Nginx Debian apt: name = nginx state = present when: ansible_os_family == "Debian"
ზემოთ თამაში დაინსტალირდება Nginx ვებ სერვერი მასპინძლებზე, რომლებიც მართავენ დებიანის ოჯახის დისტროსებს.
თქვენ ასევე შეგიძლიათ გამოიყენოთ ან
და და
ოპერატორი, როდესაც პირობითი განცხადება.
- მასპინძლები: ყველა ამოცანა: - სახელი: დააინსტალირეთ Nginx Debian apt: name = nginx state = present when: ansible_os_family == "Debian" და ansible_distribution_version == "18.04"
გამოყენებისას და
ოპერატორი, ორივე განცხადება უნდა იყოს დაკმაყოფილებული ამოცანის შესასრულებლად.
ზემოთ მოყვანილი პიესა აყენებს Nginx– ს კვანძებზე, რომლებსაც აქვთ OS– ს Debian ოჯახი, რომელიც არის ვერსია 18.04. ცხადია, ეს იქნება Ubuntu 18.04.
თან ან
ოპერატორი, ამოცანა შესრულებულია, თუ რომელიმე პირობა შესრულებულია.
- მასპინძლები: ყველა ამოცანა: - სახელი: დააინსტალირეთ Nginx Debian apt: name = nginx state = present when: ansible_os_family == "Debian" ან Ansible_os_family == "SUSE"
ზემოთ თამაში აყენებს Nginx ვებ სერვერებს OS– ს Debian ან SUSE ოჯახზე ან ორივე მათგანზე.
ᲨᲔᲜᲘᲨᲕᲜᲐ: ყოველთვის უზრუნველყოს ორმაგი თანასწორობის ნიშნის გამოყენება ==
მდგომარეობის შემოწმებისას.
პირობითი პირობები ასევე შეიძლება გამოყენებულ იქნას მარყუჟში. მაგალითად, თქვით, რომ თქვენ გაქვთ მრავალი პაკეტის სია, რომლებიც უნდა იყოს დაინსტალირებული დისტანციურ კვანძებზე.
ქვემოთ მოცემულ სათამაშო წიგნში ჩვენ გვაქვს მასივი სახელწოდებით პაკეტები შეიცავს პაკეტების ჩამონათვალს, რომლებიც უნდა იყოს დაინსტალირებული. ეს ამოცანები შესრულდება ერთმანეთის მიყოლებით, თუ საჭირო პუნქტი მითითებულია მართალია.
- name: დააინსტალირეთ პროგრამული პაკეტების მასპინძლები: all vars: packages: • name: nginx. საჭირო: ჭეშმარიტი • სახელი: mysql. საჭირო: ჭეშმარიტი • სახელი: apache. საჭირო: მცდარი ამოცანები: • სახელი: დააინსტალირეთ „{{item.name}}“ დებიანზე. apt: name: “{{item.name}}” მდგომარეობა: present როდის: item.required == True. მარყუჟი: "{{პაკეტები}}"
ზოგჯერ, ამოცანები ვერ ხერხდება სათამაშო წიგნების გაშვებისას. დავუშვათ, თქვენ ასრულებთ 5 დავალებას 3 სერვერზე, როგორც ეს ნაჩვენებია ქვემოთ მოცემულ წიგნში. თუ შეცდომა მოხდა მე –3 დავალებაზე (იწყება MySQL) სერვერზე 2, ანსიბლი შეწყვეტს სერვერ 2 – ზე დარჩენილი ამოცანების შესრულებას და შეეცდება დაასრულოს დანარჩენი სერვერები.
- სახელი: დააინსტალირეთ პროგრამული პაკეტების მასპინძლები: server1, server2, server3 ამოცანები: - სახელი: დააინსტალირეთ დამოკიდებულებები. << ზოგიერთი კოდი >> - სახელი: დააინსტალირეთ MySQL მონაცემთა ბაზა. << ზოგიერთი კოდი >> - სახელი: დაწყება MySQL. << ზოგიერთი კოდი >> - სახელი: დააინსტალირეთ Nginx. << ზოგიერთი კოდი >> - სახელი: დაიწყეთ Nginx. << რაღაც კოდი >>
თუ გსურთ თანმიმდევრულობა სათამაშო წიგნის შესრულებაში, მაგალითად, შეწყვიტოთ სათამაშო წიგნის შესრულება, თუ რომელიმე სერვერი გაუმართავია, დაამატეთ ვარიანტი.
- name: დააინსტალირეთ პროგრამული პაკეტების მასპინძლები: server1, server2, server3 any_errors_fatal: true დავალებები:
ამგვარად, თუ ერთ სერვერზე ერთი ამოცანა ვერ შესრულდება, Ansible შეწყვეტს მთლიანი სათამაშო წიგნის შესრულებას ყველა სერვერზე და გამოვა.
თუ გსურთ, რომ სათამაშო წიგნმა იგნორირება გაუწიოს შეცდომებს და გააგრძელოს დარჩენილი ამოცანების შესრულება, მაშინ გამოიყენეთ ignore_errors: ჭეშმარიტი ვარიანტი.
- სახელი: დააინსტალირეთ პროგრამული პაკეტების მასპინძლები: server1, server2, server3 ამოცანები: - სახელი: დააინსტალირეთ დამოკიდებულებები. << რაღაც კოდი >> ignore_errors: მართალია
ამ განყოფილებაში ჩვენ გადავხედავთ დამატებით ვარიანტებს, რომლებიც ხელმისაწვდომია სათამაშო წიგნის გაშვებისას.
დავიწყოთ იმით Ჩეკი რეჟიმი ან მშრალი სირბილი ვარიანტი. მშრალი გაშვების ან შემოწმების რეჟიმი გამოიყენება სათამაშო წიგნის გაშვებისას იმის შესამოწმებლად, მოხდება თუ არა რაიმე შეცდომა და არის თუ არა რაიმე ცვლილება, რომელიც მოხდება მართულ მასპინძლებზე. ამასთან, ის არ ახდენს რაიმე ცვლილებას დისტანციურ კვანძებში.
მაგალითად, გასაშრობად გაუშვით სათამაშო წიგნი ე.წ httpd.yml
რომ დაინსტალირდება და იწყება Apache ვებ სერვერის გაშვება:
# ansible-playbook httpd.yml-შემოწმება.
სხვა ვარიანტი, რომელსაც ჩვენ უნდა შევხედოთ არის -დავალების დაწყება
ვარიანტი. ეს გამოიყენება იმ დავალების სახელის მითითებისას, რომლითაც უნდა დაიწყოს ან დაიწყოს სათამაშო წიგნი.
ავიღოთ მაგალითი: ქვემოთ მოცემული სათამაშო წიგნი ასახავს 2 ამოცანას: პირველი სპექტაკლი აყენებს Apache ვებ სერვერს და მეორე აინსტალირებს htop პროგრამა.
- სახელი: დააინსტალირეთ httpd მასპინძლები: ყველა ამოცანა: yum: სახელი: httpd მდგომარეობა: დაინსტალირებული - სახელი: დააინსტალირეთ htop yum: სახელი: htop მდგომარეობა: დაიწყო.
თუ გსურთ გამოტოვოთ Apache ვებ სერვერის დაყენება და ნაცვლად დააინსტალიროთ htop კომუნალური გაშვება:
# ansible-playbook playbook.yml-დაწყება-ამოცანა "დააინსტალირე htop"
დაბოლოს, თქვენ შეგიძლიათ მონიშნოთ თქვენი ამოცანები ან პიესები დამატებით ტეგები ვარიანტი თქვენი სათამაშო წიგნისთვის, როგორც ნაჩვენებია. ეს მოსახერხებელია, როდესაც თქვენ გაქვთ საკმაოდ დიდი სათამაშო წიგნი და გსურთ კონკრეტული დავალებების შესრულება მთელი სათამაშო წიგნიდან.
- სახელი: დააინსტალირეთ httpd ტეგები: დააინსტალირეთ და დაიწყეთ მასპინძლები: ყველა ამოცანა: yum: სახელი: httpd მდგომარეობა: დაინსტალირებული ტეგები: დააინსტალირეთ • სერვისი: სახელი: httpd. მდგომარეობა: დაიწყო.
# ansible -playbook playbook.yml -ეტიკები "ინსტალაცია"
ტეგების გამოტოვების მიზნით გამოიყენეთ -გამოტოვეთ ტეგები
პარამეტრები, როგორც ნაჩვენებია.
# ansible-playbook playbook.yml-გამოტოვეთ წარწერები "დააინსტალირეთ"
ამ თემაში ჩვენ გადაგიყვანთ ჩვეულებრივ გამოყენებულ მოდულებში პასუხგაუცემელი, როგორ გამოვიღოთ stdout საწყისი playbook შესრულების ანალიზისთვის, პირობითი საშუალებების გამოყენებით playbook– ში და როგორ უნდა მართოთ შეცდომები, რომლებიც შეიძლება წარმოიშვას ამოცანების შესრულებისას. დაბოლოს, ჩვენ განვიხილეთ სათამაშო წიგნების კონფიგურაცია და როგორ შეგიძლიათ გამოიყენოთ დამატებითი პარამეტრები, რომ გადაწყვიტოთ რომელი ამოცანების შესრულება იქნება, თუ არ აპირებთ მთლიანი სათამაშო წიგნის გაშვებას.