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 天前
RHCA Ansible高级自动化(DO374)认证信息整理
运维·自动化·ansible·rhca·红帽认证
有毒的教程6 天前
Ansible批量操作自动化完整教程:批量部署服务、配置同步、软件更新实战
运维·自动化·ansible
Hy行者勇哥11 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏13 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风24 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠1 个月前
ansible编辑
网络·ansible
芳心粽伙饭1 个月前
Ansible课后作业
ansible
烁3471 个月前
Ansible初识
ansible
烁3471 个月前
Ansible安装部署调试
ansible
烁3471 个月前
Ansible命令
ansible