1.異常中斷
做法1:強制正常
2. 任務依賴
條件依賴:
一個任務是否執行取決于另一個任務的執行結果(成功或失敗)。可以通過 when 語句結合任務執行結果的變量來實現。
數據依賴:
一個任務需要使用另一個任務的輸出數據作為輸入。通常通過 register 關鍵字將一個任務的輸出注冊到變量,然后在其他任務中引用該變量。
為了解決這個問題,我們需要有?種?式能解決我們這種存在依賴關系的任務場景。
注:由于notify涉及到的動作是由handlers創建的,在實踐過程先寫handlers,再在notify中調用
- hosts: webremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologin- name: test new usershell: getend passwd | grep nginx-testignore_errors: True- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: install packageapt:name: nginxstate: present- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conf- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify: restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yes # 為了掩飾效果,不要改成restarthandlers:- name: restart nginxservice:name: nginxstate: restarted
2. 觸發多任務? ?
文件名:05-nginx.yml??

3. 標簽??
給任務添加標簽??



- hosts: webtags: host-tagsremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologintags: installtask- name: test new usershell: getend passwd | grep nginx-testignore_errors: Truetags: installtask- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directorytags: installtask- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.htmltags: installtask- name: install packageyum:name: nginxstate: presenttags: installtask- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conftags: installtask- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify:- restart nginx- check nginxtags:- changetask- installtask- name: start serviceservice:name: nginxstate: startedenabled: yestags: installtaskhandlers:- name: restart nginxservice:name: nginxstate: restarted- name: check nginxshell: netstat -tnulp | grep nginx > /tmp/nginx.test


4 綜合實踐[T]
5. 變量進階
ansible all -a "hostname" -o? ? #查看主機名
ansible all -m hostname -a "name=xxx"? ?#修改主機名
需求 想讓三臺主機的主機名不一樣 用ansible如何來實現?例如
10.0.0.12? ?aaa
10.0.0.15? ?bbb
10.0.0.18? ?ccc
變量的多種設定方法
- hosts: allremote_user: roottasks:- name: create filefile:name: /var/log/var-{{ ansible_fqdn }}.logstate: touchowner: daemon

1. 主機列表變量
- hosts: webremote_user: roottasks:- name: set hostnamehostname:name: ansible-{{ name }}.example.com
主機清單下改成這個

實踐:? 文件名03-v.yml

- hosts: webremote_user: roottasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}
2. 命令行
3. playbook實踐

4. playbook變量基礎
- hosts: webremote_user: rootvars:- head: ni- hostid: hao- tail: .shuai.comtasks:- name: set hostnamehostname:name: "{{ qian }}-{{ name }}{{ hou }}"
出來的結果不是想要的結果 疑?? ? 待解決?
ansible-playbook 04-v.yml? ? 執行
??ansible web -m shell -a "hostname" -o? ?#查看結果


- hosts: webremote_user: rootvars_files:- vars.yamlvars:- head: www- tail: .ansible.toptasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}

6. 模板
server {listen {{ nginx_port }};root /data/webserver/html;location / {}
}
4.改造playbook.yaml
- hosts: webremote_user: roottasks:- name: install packageyum:name: nginxstate: present- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted
實踐后期出現這個報錯,但是01-template.yml 格式是正確的? 原因是nginx有殘留
做法:在每臺主機上都yum autoremove 一下 清理掉nginx殘存的東西
得到下面的結果
1.條件管理
在ansible動態生成配置文件的場景中,when語句可以對變量facts的值進行條件判斷,從而實現不同的效果。
- hosts: webremote_user: roottasks:- name: install packageapt: name=nginx state=presentwhen: ansible_os_family == "RedHat"
- hosts: webremote_user: roottasks:- name: ps_checkshell: ps -ef | grep nginx | grep -v grep | wc -lregister: nginx_numchanged_when: falseignore_errors: true- name: print debug messagedebug:msg: "System {{ inventory_hostname }} has nginx service."when: nginx_num.stdout != "0"- name: install packageyum:name: nginxstate: presentwhen: nginx_num.stdout == "0"- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted

2.迭代管理??
- hosts: webremote_user: roottasks:- name: add usergroupgroup:name: webgroupstate: present- name: add several usersuser:name: "{{ item }}"state: presentgroups: webgroupwith_items:- testuser1- testuser2

- hosts: webremote_user: roottasks:- name: install packageyum:name: "{{ item }}"state: presentwith_items:- 'nginx'- 'redis'- 'mariadb-server'
- hosts: webremote_user: roottasks:- name: add some groupuser:name: "{{ item }}"state: presentwith_items:- group1- group2- group3- name: add some usersuser:name: "{{ item.name }}"group: "{{ item.group }}"state: presentwith_items:- { name: 'user1', group: 'group1' }- { name: 'user2', group: 'group2' }- { name: 'user3', group: 'group3' }
