ansible之template模板和tags模块介绍

1. ansible 之 template(模板)

1.1 简介

  • Jinja是基于Python的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。
  • 也就是说可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份

1.2 template的应用

  • 用该模板配置节点设备

1.2.1 环境的部署

  • 首先需要在主节点上搭建好ansible环境,上一篇中已经介绍了如何搭建
  • 搭建好后,在node1 节点上安装服务,并将服务配置发送给 node2
服务器 IP
master主节点 192.168.140.20
node1 192.168.140.21
node2 192.168.140.22
  • ansible主机清单
[webserver]
192.168.140.21
[mysql]
192.168.140.22

1.2.2 安装,并修改配置文件

  • node1节点上
[root@node1 ~]# yum -y install httpd
  • 主节点上,拷贝node1 apache 配置文件到 master 上
[root@master ~]# mkdir httpd
[root@master ~]# scp root@192.168.140.21:/etc/httpd/conf/httpd.conf  httpd
httpd.conf                                                     100%   11KB   7.0MB/s   00:00

[root@master ~]# cd httpd/
[root@master httpd]# ll
总用量 12
-rw-r--r--. 1 root root 11753 114 16:50 httpd.conf
  • 修改变量
[root@master ~]# vi httpd/httpd.conf
...//修改添加变量
Listen {
    
    {
    
    port}}              '//修改监听端口,IP为变量'
ServerName {
    
    {
    
    server_name}}    '//修改域名为变量'
MaxClients {
    
    {
    
    access_num}}  	 '//在域名下添加最大连接数500'
  • 修改配置文件为模板文件
目的:修改为 j2 模板文件可以被 template 模块直接识别

[root@master ~]# mv httpd/httpd.conf httpd.conf.j2
  • 修改ansible主机清单配置
可指定某一台主机,以mysql主机为例
[root@master ~]# vi /etc/ansible/hosts
...
[mysql]
192.168.140.22 port=192.168.140.22:80 server_name=www.xx.com:80 access_num=500

1.2.3 编写yaml剧本并运行

[root@master ~]# vi apache.yaml
- hosts: mysql
  remote_user: root
  vars:
  - server: httpd
  tasks:
  - name: install apache
    yum: name={
    
    {
    
    server}} state=latest
  - name: configure file
    template: src=/root/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
    notify:
       - restart httpd
  - name: start httpd
    service: name={
    
    {
    
    server}} state=started
  handlers :
  - name: restart httpd
    service: name={
    
    {
    
    server}} state=restarted enabled=true
  • 检查语法并执行
[root@master ~]# ansible-playbook apache.yaml --syntax-check

playbook: apache.yaml
[root@master ~]# ansible-playbook apache.yaml

1.2.4 验证

  • 到mysql主机即 node2 节点上验证
[root@node2 ~]# rpm -q httpd
httpd-2.4.6-67.el7.centos.x86_64
[root@node2 ~]# systemctl status httpd

在这里插入图片描述

  • 查看httpd配置文件,发现配置已经修改
[root@node2 ~]# vi /etc/httpd/conf/httpd.conf
...
Listen 192.168.140.22:80
ServerName www.xx.com:80
MaxClients 500

2. tags标签模块

2.1 tags介绍

  • 在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个或者多个task时就可以使用tags标签功能了

2.2 tags应用示例

2.2.1 单标签任务

  • 编写剧本任务
[root@master ~]# vi test_hosts.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts
     copy: src=/etc/hosts dest=/opt/hosts
     tags:           
      - aaa
   - name: touch hosts01
     file: path=/opt/hosts01 state=touch
   - name: mkdir directory
     file: path=/opt/hosts02 state=directory

注意:打上标签后只执行标签上面操作,下面的其他任务都不执行
  • 检查语法并运行
[root@master ~]# ansible-playbook test_hosts.yaml --syntax-check
[root@master ~]# ansible-playbook test_hosts.yaml --tags="aaa"
  • 验证
[root@node1 ~]# cd /opt
[root@node1 opt]# ls
hosts  rh		//hosts即为任务生成的文件

2.2.2 多标签任务

  • 编写剧本任务
[root@master ~]# vi test_hosts2.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts
     copy: src=/etc/hosts dest=/opt/hosts
     tags:           
      - aaa
   - name: touch hosts01
     file: path=/opt/hosts01 state=touch
   - name: mkdir directory
     file: path=/opt/hosts02 state=directory
     tags:           
      - aaa
  • 检查语法并运行
[root@master ~]# ansible-playbook test_hosts2.yaml --syntax-check
[root@master ~]# ansible-playbook test_hosts2.yaml --tags="aaa"
  • 验证
[root@node1 ~]# cd /opt
[root@node1 opt]# ls
hosts  hosts01  hosts02  rh
  • 结论:tags会执行相同的标签任务

2.3 扩展

  • always模块
定义:
1.事实上不光可以为单个或多个task指定同一个tags,playbook还提供了一个特殊的tags为always;
2.作用就是当使用always当tags的task时,无论执行哪个tags时,定义有always的任务必须强制执行
  • roles(角色)模块
定义:
roles(角色)能够根据层次型结构自动装载变量文件、task以及handlers等。 
简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include
变量目录类型:
roles/
common/
files/
templates/
tasks/
handlers/
defaults/
meta/
web/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
roles内各目录含义解释
1.files: 用来存放由copy模块或script模块调用的文件

2.templates: 用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件

3.tasks: 此目录应当包含一个main.yml文件, 用于定义此角色的任务列表,此文件可以使用

4.include包含其它的位于此目录的task文件

5.handlers: 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作

6.vars: 此目录应当包含一个main.yml文件,用于定义此角色用到的变量

7.defaults: 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量

8.meta: 此目录应当包含一个main.yml文件, 用于定义此角色的特殊设定及其依赖关系

猜你喜欢

转载自blog.csdn.net/weixin_42449832/article/details/112856559