ansibl——template、tags、roles模板
一、template模块
#temple主要是进行文本替换的
案例:安装Apache并修改里面的配置文件
1、控制端安装httpd服务
#第一步现在控制端安装一个httpd服务
[root@localhost ~]# yum install -y httpd
2、复制并修改配置文件
#将http.conf这个文件复制到/opt下进行修改
[root@localhost opt]# cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2 #temple文本替换的文件一定是以.j2结尾
[root@localhost opt]# vim httpd.conf.j2
Listen {{http_port}} #修改端口号,设定为一个变量
ServerName {{server_name}} #修改域名,设定一个变量
MaxClients {{access_num}} #也可以添加一个连接数,设定为变量
3、主机清单变量
[root@localhost opt]# vim /etc/ansible/hosts
[webservers]
192.168.200.12 http_port=192.168.200.12:80 server_name=www.aaa.com:80 access_num=30#在要创建httpd服务的被控制端添加想要修改的变量
4、创建playbook
[root@localhost opt]# vim 1.yaml
- hosts: 192.168.200.12 #指定被控制端
remote_user: root #使用的用户
vars: #设定变量为names代表httpd
- names: httpd
tasks:
- name: install httpd #想要安装httpd
yum: name={{names}} state=latest #name={{names}}调用变量,状态为最新的
- name: config file #想要修改文件
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf #将本机的文件替换到被控制端的文件
notify: #用来调用下面的handlers的
- restart httpd #重启服务
- name: enable httpd #开机自启动
service: name={{names}} enabled=true state=started
handlers: #被notify来调用的,如果没有notify,handlers将无用
- name: restart httpd
service: name={{names}} state=restarted
5、查看结果
[root@localhost opt]# ansible 192.168.200.12 -a ‘grep -i listen /etc/httpd/conf/httpd.conf’
[root@localhost opt]# ansible 192.168.200.12 -a ‘grep -i ServerName /etc/httpd/conf/httpd.conf’
[root@localhost opt]# ansible 192.168.200.12 -a ‘grep -i MaxClient /etc/httpd/conf/httpd.conf’
#运用ansible查看被控端是否修改成功
二、tags模块
#在一个playbook中,一般会定义很多个tasks,如果只想执行其中摸一个task或者多个task时就可以使用tags标签功能了
案例:复制本地文件到被控制端
[root@localhost opt]# vim 2.yaml
- hosts: 192.168.200.12
remote_user: root
tasks:
- name: copy
copy: src=/etc/hosts dest=/opt/hosts #复制本地/etc下的hosts文件到被控制端/opt目录下
tags: #打上一个标签
- only
- name: touch file
file: path=/opt/hosts01 state=touch[root@localhost opt]# ansible-playbook 2.yaml --tags=“only”
#当在task下指定一个tags定位always,always是一个特殊的存在,当标签定为always则不管标签定成什么都会执行
[root@localhost opt]# vim 2.yaml
- hosts: 192.168.200.12
remote_user: root
tasks:
- name: copy
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch file
file: path=/opt/hosts01 state=touch
tags:
- always[root@localhost opt]# ansible-playbook 2.yaml --tags=“only”
三、roles
#roles能够根据层次型结构自动装载变量文件、task以及handlers等
roles内各目录含义 | |
---|---|
files | 用来存放有copy模块或script模块调用的文件 |
templates | 用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件 |
tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件 |
handlers | 此目录应当包含一个main.yml文件,用于定义此角色中处罚条件时执行的动作 |
vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
defaults | 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 |
meta | 此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系 |
案例:单间LAMP架构
1、创建目录
#在/etc/ansible/roles创建httpd、mysql、php三个目录,并在其下面创建 files,templates,tasks,handlers.vars.defaults,meta等目录
[root@localhost ~]# mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@localhost ~]# mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
[root@localhost ~]# mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
2、创建文件
#在各个目录下面创建main.yml文件
[root@localhost ~]# touch /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}/main.yml
[root@localhost ~]# touch /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}/main.yml
[root@localhost ~]# touch /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}/main.yml
3、编写httpd
[root@localhost ansible]# vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install httpd
yum: name={{pkg}} state=latest #此处的别名在vars目录下的main.yml文件进行设置[root@localhost ansible]# vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
4、编写mysql
[root@localhost ansible]# vim /etc/ansible/roles/mysql/tasks/main.yml
- name: yum install mysql
yum: name={{pkg}} state=latest[root@localhost ansible]# vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*
5、编写php
[root@localhost ansible]# vim /etc/ansible/roles/php/tasks/main.yml
- name: yum install php
yum: name={{pkg}} state=latest[root@localhost ansible]# vim /etc/ansible/roles/php/vars/main.yml
pkg: php
6、创建剧本
[root@localhost ansible]# cd /etc/ansible/ #需要切换到ansible下面创建剧本
[root@localhost ansible]# vim lamp.yaml
- hosts: 192.168.200.12
remote_user: root
roles: #调用下面的,来创建Lamp
- httpd
- mysql
- php