Ansible中的Templates、tags和roles

一、Templates模块

templates是ansible的一个模块,其功能是根据模板文件动态生成配置文件,templates文件必须存放于templates目录下,且命名为".j2"结尾,yaml/yml文件需要和templates目录平级,这样我们在yml文件中调用模板的时候,就不需要写模板文件的路径,否则需要描述模板文件的路径,因为template模块会自动去找templates目录下的模板文件

示例:

yum -y install httpd

在这里插入图片描述

mkdir httpd
mv /etc/httpd/conf/httpd.conf /root/httpd/httpd.conf.j2

cd httpd/

在这里插入图片描述
编写templates模板,放在管理端

//在管理端讲配置文件要修改的地方定义变量
vim httpd.conf.j2
Listen {{httpd_port}}
ServerName {{server_name}}
MaxClients {{access_num}}    //客户端最大连接数

在这里插入图片描述

vim /etc/ansible/hosts
[webserver]
192.168.163.150 httpd_port=192.168.163.150:80 server_name="www.test.com:80" access_num=100

在这里插入图片描述

vim apache.yaml
- hosts: webserver
  remote_user: root
  vars:
   - ap: httpd
  tasks:
   - name: install httpd
     yum: name={{ap}}
   - name: create configure file
     template: src=/root/httpd/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
     notify:
      - restart httpd
   - name: start httpd server
     service: name={{ap}} enabled=true state=started
  handlers:
   - name: restart httpd
     service: name={{ap}} state=restarted

在这里插入图片描述

ansible-playbook apache.yaml --syntax-check
ansible-playbook apache.yaml    #执行脚本

在这里插入图片描述

去两台远程主机上查看
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "listen"'
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "maxclient"'
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "servername"'

在这里插入图片描述

二、tags模块

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

格式如下

vim tags1.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
      - only
   - name: touch file
     file: path=/opt/touch1 state=touch

执行命令:ansible-playbook tags1.yaml --tags="only"
ansible-playbook hosts.yml
在这里插入图片描述
在这里插入图片描述

事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

//远程删除文件,虚拟机实验也可以直接切换虚拟机删除
ansible webserver -a 'rm /opt/hosts -f'
ansible webserver -a 'rm /opt/touch1 -f'
ansible webserver -a 'ls /opt'

在这里插入图片描述

vim tags1.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
      - only
   - name: touch file
     file: path=/opt/touch1 state=touch
     tags:
      - always

执行命令:ansible-playbook tags1.yaml --tags="only"
查看/opt目录下的文件:ansible webserver -a 'ls /opt'
在这里插入图片描述

三、roles

roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

1、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文件,用于定义此角色的特殊设定及其依赖关系。

2、在一个playbook中使用roles的步骤

(1)创建以roles命令的目录

//yum装完默认就有
mkdir /etc/ansible/roles/ -p

(2)创建全局变量目录

mkdir /etc/ansible/group_vars/ -p

//文件名自己定义,引用的时候注意
touch /etc/ansible/group_vars/all

(3)在roles目录中分别创建以各角色名称命令的目录,如httpd

mkdir /etc/ansible/roles/common -p

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

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

(5)在每个角色的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

(6)在playbook文件中,调用各角色

vim /etc/ansible/site.yml
- hosts: webserver
  remote_user: root
  roles:
   - httpd
   - mysql

3、实验:

安装httpd、mysql和php服务
创建相应的目录和目录中的main.yml文件

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: pkg={{pkg}} state=latest

在这里插入图片描述

定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中

vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd

在这里插入图片描述
下面的mysql模块、php模块的配置和httpd模块的配置一样
编写mysql模块

vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql 
  yum: pkg={{pkg}} state=latest

在这里插入图片描述

vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*

在这里插入图片描述

编写php模块

vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
  yum: pkg={{pkg}}  state=latest

在这里插入图片描述

vim /etc/ansible/roles/php/vars/main.yml
pkg: php

在这里插入图片描述

编写roles示例

vim /etc/ansible/site.yml
- hosts: webserver
  remote_user: root
  roles:
   - httpd
   - mysql
   - php

在这里插入图片描述

//检查脚本的有没有语法问题
ansible-playbook site.yml --syntax-check
//执行脚本
ansible-playbook site.yml

在这里插入图片描述

验证

ansible webserver -a 'rpm -q httpd'
ansible webserver -a 'rpm -q mariadb'
ansible webserver -a 'rpm -q mariadb-server'
ansible webserver -a 'rpm -q php'

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值