1、tags模块
可以给任务定义标签,可以根据标签来运行指定的任务
2、标签的类型
bash
always:设定了标签名为always,除非指定跳过这个标签,否则该任务将始终会运行,即使指定了标签还会运行
never:始终不运行的任务,指定标签名never可以运行
debug:用于调试
setup:收集主机的信息
标签名也可以自定义:tags
bash
vim test1.yaml
- hosts: 192.168.230.20
gather_facts: false
tasks:
- name: debug-test1
debug:
msg: "cow"
tags:
- debug
- name: always-test1
debug:
msg: "ALWAYS-RUN"
tags:
- always
- name: setup-test1
debug:
msg: "SETUP-1"
tags:
- setup
- name: never-test1
debug:
msg: "Never-run"
tags:
- never
#不加标签运行,四个任务都会执行
ansible-playbook test1.yaml
#从setup标签开始运行,会运行setup和always的任务内容
ansible-playbook test1.yaml --tags=setup
#运行never标签,always的标签也会运行
ansible-playbook test1.yaml --tags=never
#跳过always不执行
ansible-playbook test1.yaml --skip-tags=always
#运行多个标签
ansible-playbook test1.yaml --tags="debug","setup"
3、自定义标签
bash
- hosts: 192.168.230.20
remote_user: root
tasks:
- name: fuzhiwenjian
copy: src=/etc/hosts dest=/opt/hosts
tags:
- zlm
- name: touch file
file: path=/opt/test1.txt state=touch
tags:
- hpc
#运行
ansible-playbook test2.yaml --tags=hpc
4、模版
对应用的配置文件初始化
templates模版,Jinja组件,把编译过的模版文件传送给目标文件
bash
cd /etc/httpd/conf
cp httpd.conf /opt/httpd.conf.j2
cd /opt
vim httpd.conf.j2
42行 Listen {{http_port}}
95行取消注释 SeverName {{server_name}}
119行 DocumentRoot "{{root_dir}}"
vim /etc/ansible/hosts
192.168.230.20 http_port=192.168.230.20:80 server_name=www.xy.com:80 root_dir=/etc/httpd/htdocs
vim test3.yaml
- hosts: 192.168.230.20
gather_facts: false
remote_user: root
vars:
- pg: httpd
- sv: httpd
tasks:
- name: install httpd
yum: name={{pg}}
- name: editon conf
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
handlers:
- name: restart httpd
service: name={{sv}} state=restarted
#运行
ansible-playbook test3.yaml
作业:nginx通过传参的方式,端口改成8080,servername:www.xy.com
5、roles模块
ansible为了层次化、结构化的组织playbook,使用roles(角色),通过层次化自动装载变量、任务和处理器等
roles把变量、任务和模块的文件单独放置在各个不同的文件中,通过roles一键编排
bash
cd /etc//ansible
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
yum -y install tree
tree
roles:
├── httpd 角色名称 自定义
│ │ ├── defaults 存放配置文件的目录,可以不写
│ │ ├── files 存放copy模块或者script
│ │ ├── handlers 存放处理器文件的目录
│ │ ├── meta 保存角色元信息的文件
│ │ ├── tasks 保存任务的文件
│ │ ├── templates 保存模版的文件
│ │ └── vars 保存变量的文件
就是把原来写在一个yaml的配置,分开到不同的目录,保存在一个名字的yaml里面,执行的时候调用不同目录的同一个yaml文件
文件名:main.yml
cd httpd
cd tasks
vim main.yml
- name: install httpd
yum: name={{pkg}}
- name: start apach
service: name={{svc}} enabled=true state=started
cd vars
vim main.yaml
pkg:httpd
svc:httpd
cd /etc/ansible
vim site.yaml
- hosts: 192.168.230.30
remote_user: root
roles:
- httpd
#运行
ansible-playbook site.yaml