ansible—playbook的template、tags、roles模块

目录

一、template

1、简介

2、template模块实例

1.先准备一个以.j2结尾的template模板文件,设置引用的变量,ansible上要先安装httpd

2、修改主机清单文件,使用主机变量定义一个变量名相同而值不同的变量

3、主机添加hosts

4、编写playbook文件

二、tags模块

1、概念

2、实例

1、主机1的配置文件

2、主机2的配置文件

三、roles模块

1、概念

2、roles的目录结构

3、roles内各个目录的含义

4、在playbook中使用roles的步骤

①创建以roles命名的目录

②创建全局变量目录(可选)

③在roles目录中分别创建以各角色名称命令的目录,如httpd,mysql等

④在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建。

⑤在每个角色的handlers,tasks,meta,defaults,vars目录下创建main.yml文件,千万不能自定义文件名。

⑥修改site.yml文件,针对不同主机去调用不同的角色

⑦运行ansible-playbook

5、roles实现lnmp搭建

①创建httpd,mysql,和php三个所需要的文件

②编写httpd模块

③编写mysql模块

④编写php模块

⑤编写roles


一、template

1、简介

ansible的template模块,可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份。

template是一种创建配置文件的工具,在配置文件中,会有一些数据等会动态的变化,如IP地址,主机名,端口,用户,页面路径等。

template模块就是将变量和动态文件结合起来,最终生成一个配置文件(你需要动态改变)

jinja是基于python的模板引擎。template是jinja的一个重要的组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递python的变量给模板去替换模板中的标记。

注意:文件配置使用jinja2模板语言来编写,结尾一定要是j2(xxx.j2)

2、template模块实例

1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
#注意ansible本身要安装httpd,其他2台被控制的不能安装httpd
vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改
#修改template配置文件模块的端口和主机名、根目录为变量
2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量
vim /etc/ansible/hosts
[webservers1]
192.168.170.113 http_port=192.168.170.113:80 server_name=www.rmh.com:80 root_dir=/var/www/html
[webservers2]
192.168.170.114 http_port=192.168.170.114:80 server_name=www.kfc.com:80 root_dir=/var/www/html
3.主机添加hosts
vim /etc/hosts
192.168.170.113 www.rmh.com
192.168.170.114 www.kfc.com
4.编写playbook文件
vim httpd.yaml
---
- hosts: all
  remote_user: root
  gather_facts: false
  vars:
  - package: httpd
  - service: httpd
  tasks:
    - name: install httpd
      yum: name={{package}} state=latest
    - name: con test
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
#配置文件模板拷贝到httpd的子配置文件中
      notify:
        - restart httpd
    - name: start httpd
      service: name={{service}} state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted
5.最后在ansible上curl访问2个域名验证
1.先准备一个以.j2结尾的template模板文件,设置引用的变量,ansible上要先安装httpd
2、修改主机清单文件,使用主机变量定义一个变量名相同而值不同的变量
3、主机添加hosts
4、编写playbook文件

二、tags模块

1、概念

当你写了一个很长的playbook,其中有很多的任务,很多时候在使用的时候只是想执行一部分任务,或者只是想执行一类任务,这时可以借助tags模块为任务进行做标签,任务存在标签之后,在执行playbook时可以利用标签来决定执行哪些任务或者不执行哪些任务。

可以在一个playbook中为某个任务定义"标签",在执行此playbook时通过ansible-playbook命令使用--tags选项来实现仅运行指定的tasks。

playbook还提供一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags,定义中有always的tags都会执行。

2、实例

---
- hosts: web
  remote_user: root
  gather_facts: false
  tasks:
    - name: copy hosts
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - tags1
#自定义标签名,可以在执行yaml文件时使用 --tag="tags1"只执行此任务,always标签任务除外
    - name: touch file
      file: path=/opt/testhost state=touch
      tags:
      - always
#always标签,无论执行那个标签都会将此标签的任务内容执行

分别在两个主机上测试文件创建的情况

1、主机1的配置文件

主机1因为有always所以两个标签都执行

2、主机2的配置文件

此时webb中因为没有always所以只执行指向的tags

三、roles模块

1、概念

简单的说,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般用于基于主机构建服务的场景中,但是也可以用于构建守护进程等场景中。

2、roles的目录结构

3、roles内各个目录的含义

|-----------|-----------------------------------------------|
| files | 用来存放copy模块或script模块调用的文件 |
| templates | 用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件 |

|----------|------------------------------------------------------------------|
| tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件 |
| handlers | 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 |

|----------|---------------------------------------|
| vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
| defailts | 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 |
| meta | 此目录应当包含一个main.yml文件,用于定义此角色的特殊设及其依赖关系 |

4、在playbook中使用roles的步骤

①创建以roles命名的目录
mkdir /etc/ansible/roles/ -p    #yum装完默认就有
②创建全局变量目录(可选)
mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意
③在roles目录中分别创建以各角色名称命令的目录,如httpd,mysql等
mkdir /etc/ansible/group_vars/ -p 
touch /etc/ansible/group_vars/all #文件名自己定义,引用的时候注意
④在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建。
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
⑤在每个角色的handlers,tasks,meta,defaults,vars目录下创建main.yml文件,千万不能自定义文件名。
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
⑥修改site.yml文件,针对不同主机去调用不同的角色
vim /etc/ansible/site.yml
---
- hosts: web
  remote_user: root
  roles:
     - httpd
- hosts: webb
  remote_user: root
  roles:
     - mysql
⑦运行ansible-playbook

cd /etc/ansible/

ansible-playbook site.yml

5、roles实现lnmp搭建

①创建httpd,mysql,和php三个所需要的文件
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

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
②编写httpd模块
写一个简单的tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apache
  yum: name={{pkg}} state=latest
- name: start apache
  service: enabled=true name={{svc}} state=started
 
//定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
svc: httpd
③编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql
  yum: name={{pkg}} state=latest
- name: start mysql
  service: enabled=true name={{svc}} state=started
  
vim /etc/ansible/roles/mysql/vars/main.yml
pkg:
  - mariadb
  - mariadb-server
svc: mariadb
④编写php模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
  yum: name={{pkg}} state=latest
- name: start php-fpm
  service: enabled=true name={{svc}} state=started

vim /etc/ansible/roles/php/vars/main.yml
pkg:
  - php
  - php-fpm
svc: php-fpm
⑤编写roles
vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
   - httpd
   - mysql
   - php


cd /etc/ansible
ansible-playbook site.yml
相关推荐
紫晓宁2 天前
jmeter结合ansible分布式压测--3压测执行
分布式·jmeter·ansible
紫晓宁3 天前
jmeter结合ansible分布式压测--1数据准备
分布式·jmeter·ansible
紫晓宁3 天前
jmeter结合ansible分布式压测--2jmter环境准备
分布式·jmeter·ansible
SG.xf7 天前
ansible中的任务执行控制
ansible
赶紧回家去9 天前
Ansible基本使用
运维·ansible
我就是全世界10 天前
ansible详细介绍和具体步骤
ansible
福大大架构师每日一题10 天前
27.9 调用go-ansible执行playbook拷贝json文件重载采集器
golang·json·ansible·prometheus
SG.xf10 天前
Ansible
运维·ansible
避凉闲庭10 天前
ansible开局配置-openEuler
linux·运维·ansible·脚本·openeuler·免密登录·批量化
运维小白。。13 天前
Ansible 批量部署
ansible