5 קלח - הלעפה ירפסו תוגצה רוציל דציכ
.Ansible לש םילודומ תועצמאב Ansible ינובשחמו תוזחמ רוציל דציכ ריבסנ ,Ansible תרדס לש הז 5 קלחב
.םיקחורמ םיתמצב תודחוימ תומישמ עוציבל הלעפה ירפסב םישמשמה םילודומ םיארקנה םייאמצע םיטפירקס םע תומאות תוניפס
.םירחא םירישכמ ללשו שא תומוח ,םיסמוע ינוזיא ,םיגתמ ,םיבתנ ןוגכ םינקתה להנלו הרוצת יצבקב םייוניש עצבל ךל םירשפאמ םה .םירכזומ םהמ המכ קר ,םיצבק תקתעהו ןויכרא ,תוליבח לוהינ ןוגכ תומישמ לש היצ
:Ansible לש םילודומ תועצמאב עצבל ןתינש תונוש תומישמ לע הריקס ךל תתל איה הזה הנשמה אשונ תרטמ
סקונילב תוליבח לוהינ
.Debian -ב ןהו RedHat תוססובמ תוכרעמב ןה תוליבח לוהינל תומישמ עצבל ךל םירזועש םילודומ םע Ansible תוניפס .תוכרעמ ילהנמ ידי לע ועצובש רתויב תורידתהו תוינויחה תומישמה תחא אוה תוליבח לוהינ
.רתוי תושדח RHEL תוצפהל ךיושמה dnf לודומו YUM תוליבח לוהינל םיאתמ לודומ ונשי .םתוא שחנל תיסחי לק
:הלעפה רפסב םילודומב שומישה ןפואל תואמגוד רפסמ ןלהל
--- - name: install Apache webserver hosts: webservers tasks: - name: install httpd dnf: name: httpd State: latest
--- - name: install Apache webserver hosts: databases tasks: - name: install Apache webserver apt: name: apache2 State: latest
תוריש לודומ
.תכרעמב םיתוריש שדחמ ןיעטהלו גרדשל ,ןכדעל ,רוצעל ,ליעפהל תכרעמ ילהנמל רשפאמ תורישה לודומ
--- - name: Start service httpd, if not started service: name: httpd state: started
--- - name: Stop service httpd service: name: httpd state: stopped
--- - name: Restart network service for interface eth0 service: name: network state: restarted args: enp2s0
לודומ קתעה
.הנוכמ התואב רחא םוקימל קחורמה בשחמב דחא םוקיממ םיצבק תוקתעה לודומ קתעה ,זמרמ םשהש יפכ
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: '0644'
.0644 תואשרה םע tecmint שמתשמכ srv/directory/לא etc/files/directory/מ tecmint.conf הרוצתה ץבוק תא הקיתעמ העמשהה תרבוח
.הנורחאה הרושב גצומש יפכ ילמס גוציי תועצמאב םג תואשרה גצייל ןתינ
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: u=rw, g=r, o=r
.האירק תואשרה תוצקומ םלועה ראשלו הביתכ תואשרה הצובקל ,תוצקומ הביתכו האירק תואשרה שמתשמל ,הנורחאה הרושב גצומש יפכ תמדוקה המגודב תואשרהה תא גצייל ןתינ
םיצבק לודומ
.לובמיס ירושיק תרדגהו םיצבק תואשרה תאצקה ,תוירפסו םיצבק תריצי ללוכ ,תובר םיצבק תולועפ עוציבל שמשמ םיצבקה לודומ
--- - name: Change file ownership, group, and permissions file: path: /etc/tecmint.conf owner: tecmint group: tecmint mode: '0644'
.0644 -ל etc/הירפסה תרדגה תואשרהב tecmint.conf םשב ץבוק תרצוי ליעלש הלעפהה
--- - name: Remove file (delete file) file: path: /etc/tecmint.conf state: absent
.tecmint.conf ץבוקה תא קחומ וא ריסמ הז
--- - name: create a directory if it doesn’t exist file: path: /etc/mydirectory State: directory mode: '0777'
.0777 -ל etc/היירפסה תרדגה תואשרהב היירפס רוצית וז הלועפ
--- - name: Recursively deleting a directory file: path: /etc/tecmint.conf state: absent
.הירפס תיביסרוקר תקחומ ליעלש הגצהה
Lineinfile לודומ
.םייק וק ףילחהל לוכי הז .ץבוקב תחא הרוש תונשל ךנוצרב רשאכ ליעומ lineinfile לודומ
--- - name: Ensure SELinux is set to enforcing mode lineinfile: path: /etc/selinux/config regexp: '^SELINUX=' line: SELINUX=disabled
.תבשומ ל SELINUX ךרע תא הרידגמ הלעמלש הגצהה
SELINUX=disabled
--- - name: Add a line to a file if the file does not exist, without passing regexp lineinfile: path: /etc/hosts line: 10.200.50.51 linux-console.net create: yes
.etc/hosts/ץבוקל linux-console.net 10.200.50.51 ךרעה תא ףיסומ הז
ןויכרא לודומ
. remove = True
טפשמה תועצמאב רוקמה ץבוק תא ריסהל וא קוחמל ןתינ רתוי רחואמ ,ןויכראה רחאל .דעיה דעיב םייק הסיחדה רוקמש חינמ אוה .םיבורמ וא םידדוב םיצבק לש סוחד ןויכרא תריצ
- name: Compress directory /path/to/tecmint_dir/ into /path/to/tecmint.tgz archive: path: /path/to/tecmint_dir dest: /path/to/tecmint.tgz This compresses the /path/to/tecmint_dir directory to /path/to/tecmint.tgz
- name: Compress regular file /path/to/tecmint into /path/to/foo.gz and remove it archive: path: /path/to/tecmint dest: /path/to/tecmint.tgz remove: yes
.ןויכראה תמלשה רחאל קחמנ tecmint/לא/ביתנ/רוקמה ץבוק ,ליעלש הגצהב
- name: Create a bz2 archive of /path/to/tecmint archive: path: /path/to/tecmint format: bz2
.path/to/tecmint/ץבוקמ bz2 טמרופב סוחד ץבוק רצוי הז
טיג לודומ
.הנכות ירגאמ לש git תופוק להנמ לודומה
- git: repo: 'https://foosball.example.org/path/to/repo.git' dest: /srv/checkout version: release-0.22
דוקיפ לודומ
.סקוניל תפטעמ תדלקהש ןפוא ותואב תרבעומ הדוקפה .םיטנמוגרא תמישר וירחאו רתוי רחואמו הדוקפה םש תא חקול הדוקפה לודומ ,רתויב םיצופנה םילודומה דחא
- name: Executing a command using the command module command: cat helloworld.txt
--- - name: Check the remote host uptime hosts: servers tasks: - name: Execute the Uptime command over Command module register: uptimeoutput command: "uptime" - debug: var: uptimeoutput.stdout_lines
.םיקחורמ םיתרש לש תוליעפה ןמז תא רזחאמ הדוקפה לודומ
תודוקפה תואצות רוזחאל םינתשמ
.ךשמהב התוא גיצהלו הנתשמב העמשה תרבוח לש טלפה תא סופתל לכות דציכ םירבדמ ונא הז קלחב .תואצותה תא וא טלפה תא סופתל שרדיתש ןכתיי ,תאז םע ,םירקמ םנשי .הדוקפה תרושב טלפה תא גיצהל ילבמ םילהונמ ם
.המישמה לש טודוטסה תא ןכמ רחאל ליכי הנתשמה .הנתשמכ התוא רומשלו המישמה טלפ תסיפתל ליגר םושיר שמשמ
.הנתשמב STD -ה טלפ תא רומשל ידכ 'register'
-ו הדוקפה תא רידגהל ידכ 'command'
לודומב שמתשהל ךלוה התא . df -Th/
הדוקפה תועצמאב המאתהב שרושה תוי
.stdout לש הרזחהה ךרע דצל 'debug'
לודומב שמתשת ,הדוקפה תא גיצהל ידכ
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout
.check_disk_space.yml ונלש העמשהה תרבוח תא ונמש ,הז הרקמב .העמשהה תרבוח תא ליעפנ ואוב ,וישכע
# ansible-playbook check_disk_space.yml
.בקעמה לע השקמו תבברועמ הלוכ הקופתה ,תיארש יפכ
.stdout_lines -ב stdout רזחהה ךרע תא ףלחה ,האירקה לע לקהלו טלפה תא רשייל ידכ
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout_lines
הלעפהה עוציב לע טולשל ידכ םיאנתב שמתשה
.Ansible לש העמשהה ירפסב תוצופנה תונתומה תורהצההמ המכ לע לכתסנ ואוב .תחא האצותמ רתוי ןכתי רשאכ תונתומ תורהצהב םישמתשמ ,תונכת תופשב ומכ קוידב
:גצומכ ףיעסל ךומסה יאנתה לע וזירכה טושפ when
ףיעסב שומיש תעב .הלעפה רפסב םושייו שומישל הלק יד רשאכ
יאנתה תרהצה .םירחאב אלו םייפיצפס םיתמצב תומישמ עצבל הצרתש ן
when: condition
.תקחורמה תכרעמב תעצבתמ המישמה ,םייקתמ יאנתה רשאכ
:תואמגוד המכ קודבל ואוב
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian”
.ןאיבד לש תוצפהה תחפשמ תא םילהנמה םיחראמ לע Nginx לש טנרטניאה תרש תא ןיקתמ הלעמלש הזחמה
.יאנתה רשאכ טפשמה דצל AND
-ו OR
םיליעפמב שמתשהל םג לוכי התא
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” and ansible_distribution_version == “18.04”
.עצובת המישמהש ידכ תוקפוסמ תויהל תובייח תורהצה יתש , AND
רוטרפואב שומיש תעב
.18.04 וטנובוא היהי הזש רורב .18.04 הסרג הווהמה הלעפהה תכרעמ לש ןאיבד תחפשמ םיצירמה םיתמצב Nginx תא ןיקתמ הלעמלש הזחמה
.םייקתמ םיאנתהמ דחא םא תעצבתמ המישמה , OR
רוטרפוא תועצמאב
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” or Ansible_os_family == “SUSE”
.םהינשב וא SUSE וא ןאיבד הלעפהה תכרעמ תחפשמב Nginx לש טנרטניאה יתרש תא הניקתמ ליעלש הגצהה
.יאנת תקידב תעב ==
לופכה ןויוושה ןמיסב שמתשהל דימת דפקה :הרעה
תואלולב םיאנת
.םיקחורמ םיתמצ לע ןיקתהל ךירצש תוליבח רפסמ לש המישר ךל שיש לשמל חיננ .האלולב םג םיאנתב שמתשהל ןתינ
.True -כ רדגומ שרדנה ףיעסה םא היינשה ירחא תחא ועצובי הלא תומישמ .ןיקתהל שיש תוליבח תמישר ליכמה תוליבח ארקנש ךרעמ ונל שי ,הטמלש העמשהה רפסב
--- - name: Install Software packages hosts: all vars: packages: • name: nginx required: True • name: mysql required: True • name: apache required: False tasks: • name: Install “{{ item.name }}”on Debian apt: name: “{{ item.name }}” state: present When: item.required == True loop: “{{ packages }}”
תואיגשב לופיט לש הרוצת עבק
.םיתרשה ראשב תורתונה תומישמה תא םילשהל הסניו 2 תרשב תורתונה תומישמה תא עצבל קיספי Ansible ,2 תרשב (MySQL תלעפה) 3 המישמב האיגש תשחרתמ םא .הטמל העמשהה תרבוחב גצומש יפכ םיתרש 3 לע תומישמ 5 ל
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> - name: Install MySQL database << some code >> - name: Start MySQL << some code >> - name: Install Nginx << some code >> - name: Start Nginx << some code >>
.תורשפאה תא ףסוה ,לשכיי םיתרשה דחא םא ,העמשה תרבוח לש עוציבה תא קספה ,לשמל ,העמשהה תרבוח עוציבב תויבקע הצור התא םא
--- - name: Install Software packages hosts: server1, server2, server3 any_errors_fatal: true tasks:
.אציו םיתרשה לכב הלוכ העמשהה תרבוח לש עוציבה תא קיספי Ansible ,דחא תרשב תלשכנ תחא המישמ םא ,וז ךרדב
.ignore_errors: True תורשפאב שמתשה ,רתונש תומישמה ךרעמ תא עצבל ךישמיו תואיגשהמ םלעתי העמשהה רפסש ךנוצרב םא
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> ignore_errors: True
רדגומ בצמל תוכרעמ רידגהל ידכ העמשה ירפס רוצ
.העמשה תרבוח תלעפה תעב תונימזה תופסונ תויורשפא המכ ןחבנ הז קלחב
.םיקחורמה םיתמצב םייוניש עצבמ וניא אוה ,תאז םע .םילהונמה םיחראמב ושעייש םייוניש שי םאו ןהשלכ תואיגשב ולקתי םא קודבל ידכ העמשה תרבוח תלעפה תעב תשמשמ הקידבה בצמ וא השביה הצירה תורשפא .השבי ה
:Apache לש טנרטניאה תרש תלעפה תא הליחתמו הניקתמש httpd.yml
םשב המשה תרבוח שבי ליעפהל ידכ ,אמגודל
# ansible-playbook httpd.yml --check
.הב ליחתהל וא ליחתהל הלעפהה רפס לעש המישמה םש ןויצ תעב שמשמ הז . - start-at-task
תורשפאה איה לכתסהל ונילעש תרחאה תורשפאה
.htop תורישה ילכ תא הניקתמ היינשהו Apache לש טנרטניאה תרש תא תנקתמ הנושארה הלעפהה :תומישמ יתש תטרפמ הטמלש העמשהה תרבוח :המגוד חקינ ואוב
--- - name: Install httpd hosts: all tasks: yum: name: httpd state: Installed - name: Install htop yum: name: htop state: started
:htop תורישה תלעפה תא ןיקתהל םוקמבו י'צאפא לש טנרטניאה תרש תנקתה לע גלדל ךנוצרב םא
# ansible-playbook playbook.yml --start-at-task “Install htop”
.קחשמה תרבוח לכמ תויפיצפס תומישמ ליעפהל הצור התאו הלודג יד תרבוח ךל שי רשאכ ישומיש הז .גצומש יפכ ךלש לפיילפל םיגתה תורשפא תפסוה ידי לע ךלש תולעפהה וא תומישמה תא גייתל לוכי התא ,ףוסבל
--- - name: Install httpd tags: Install and start hosts: all tasks: yum: name: httpd state: Installed tags: Install • service: name: httpd state: started
# ansible-playbook playbook.yml -tags "Install"
.גצומש יפכ - ship-tags
תויורשפאב שמתשה םיגתה תא טימשהל ידכ
# ansible-playbook playbook.yml --skip-tags "Install"
.הלוכ העמשהה תרבוח תא ץירהל םינווכתמ םכניא םא ליעפהל תומישמ וליא טילחהל ידכ תופסונ תויורשפאב שמתשהל ולכות דציכו העמשהה ירפס לש הרוצתה תא ונמכיס ,ףוסבל .תומישמ תלעפה תעב שחרתהל תולולעה תואי