playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础
playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式
playbook配置文件使用YAML语法,YAML文件的扩展名通常为.yaml或.yml。具有简洁明了、结构清晰等特点。playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表。上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下了。更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维
Ansible 自动化运维原理介绍+命令模块详细操作过程
安装nginx服务,安装完成后并启动nginx 自启操作
[root@master ~]# vi bbb.yml
- hosts: master
remote_user: root
tasks:
- name: nginx
yum: name=nginx
- name: started nginx
service: enabled=true name=nginx state=started
检查语法
[root@master ~]# ansible-playbook --syntax-check bbb.yml
playbook: bbb.yml
重启bbb.yml
[root@master ~]# ansible-playbook bbb.yml
PLAY [master] ************************
TASK [Gathering Facts] ************************************************************
ok: [20.0.0.3]
TASK [nginx] **********************************************************************
changed: [20.0.0.3]
TASK [started nginx] **************************************************************
changed: [20.0.0.3]
PLAY RECAP ************************************************************************
20.0.0.3 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
注:切记不要用Ted键,用空格符 ,格式特别重要
查看master的nginx安装没有与运行中?
[root@master ~]# ansible master -a "systemctl status nginx"
20.0.0.3 | CHANGED | rc=0 >>
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2021-01-14 09:31:09 CST; 1 day 2h ago
介绍
注:不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次
跟node节点安装httpd服务,handlers下发任务notify执行任务重启服务
- hosts: node
remote_user: root
tasks:
- name: httpd
yum: name=httpd state=latest
notify:
- restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted
给20.0.0.4删除httpd服务
- hosts: 20.0.0.4
remote_user: root
vars:
- aaa: httpd
tasks:
- name: remove httpd
yum: name={{aaa}} state=absent
查看node节点httpd服务开启没有?
通过 ansible 命令传递变量值案例
给20.0.0.4设置用户user=lisi
- hosts: 20.0.0.4
remote_user: root
vars:
- aaa:
tasks:
- name: add new user
user: name={{aaa}}
ansible-playbook aaa.yml -e "aaa=lisi"
[root@master ~]# vi o.yaml
- hosts: all
remote_user: root
tasks:
- name: copy file
copy: content="{{ansible_all_ipv4_addresses}}" dest=/opt/addr.txt
[root@master ~]# ansible 20.0.0.4 -a "cat /opt/addr.txt"
20.0.0.4 | CHANGED | rc=0 >>
["192.168.122.1", "20.0.0.4"]
引用主机变量案例
[root@master ~]# vi /etc/ansible/hosts
[node]
20.0.0.4 number="66666" # number 的值为 66666
- hosts: 20.0.0.4
remote_user: root
tasks:
- name: vopy number
copy: content="{{number}}" dest=/opt/a.txt
~
[root@master ~]# ansible 20.0.0.4 -a "cat /opt/a.txt"
20.0.0.4 | CHANGED | rc=0 >>
66666