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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值