Ansible中的Templates、tags和roles

一、Templates 模块

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

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.10.16 httpd_port=192.168.10.16: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中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用–tags选项能实现仅运行指定的tasks。
  • playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的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

Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

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的步骤

创建以roles命令的目录

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

创建全局变量目录

mkdir /etc/ansible/group_vars/ -p

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

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

mkdir /etc/ansible/roles/common -p

在每个角色命令的目录中分别创建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

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

在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模块

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

在这里插入图片描述

vim /etc/ansible/roles/httpd/vars/main.yml
pkg: 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'

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值