Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块

①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可看作一个编译过的模

板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。

②在配置文件中,会有一些数据(如:ip 地址、主机名、端口、用户、页面路径等)会动态的改

变,需要使用变量来表示;

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

使用 jinjia2 模块语言来编写,结尾(后缀)一定是 j2(xxx.j2)。

实验:通过 playbook 安装 apache

1 先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

复制代码
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改  总控制端,可以管理被控制点

root@11-6 opt\]# vim /opt/httpd.conf.j2

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

vim /etc/ansible/hosts

3 编写 playbook

vim cs_cs_apache.yaml

复制代码
---
- name: install httpd
  hosts: all
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: copy confg file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf     
      notify:
        - restart httpd
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted

4 被管理点添加域名

5 被管理者导入文本:

6 管理者与被管理者达成共识:

7 检测一下:

systemctl restart httpd

8 另一种检测方法:

root@11-6 opt\]# vim /etc/ansible/hosts

root@11-6 opt\]# vim /opt/httpd.conf.j2

二 tags 模块

例如:安装tomcat 必需现有jdk,就可以用这种方式部署

可以在一个playbook中为某个或某些任务定义"标签",在执行此playbook时通过ansible-playbook

命令使用--tags选项能实现仅运行指定的tasks。

playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪

一个tags时,定义有always的tags都会执行。

  • 标签调用哪一个就执行哪一个
  • 如果指定的标签是always,不管指定不指定,都执行
  • 执行顺序从上往下

注:标记那个标签执行那个操作

复制代码
---
- name: ceshi tags
  hosts: mcbweb01
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - JOB
    - name: touch file
      file: path=/opt/kangkang state=touch

root@11-6 opt\]# ansible-playbook cs_webhost.yaml --tags="JOB"

检测:

若有always都会执行操作

执行一下

root@11-6 opt\]# ansible-playbook cs_webhost.yaml --tags="K"

always

复制代码
---
- name:  or tags
  hosts: mcbweb01
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - K
    - name: touch file
      file: path=/opt/ab state=touch
        - always
    - name:  create dir     
      file: path=/opt/F state=directory
      tags:
        - F

检测一下:

三 Roles 模块

Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自

动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块

及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场

景中,但也可以用于构建守护进程等场景中。

//roles 的目录结构:

cd /etc/ansible/

tree roles/

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

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

复制代码
mkdir /etc/ansible/roles/ -p    #yum装完ansible默认就有

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

复制代码
mkdir /etc/ansible/group_vars/ -p

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

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

复制代码
mkdir /etc/ansible/roles/httpd

mkdir /etc/ansible/roles/mysql

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

(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)修改 site.yml 文件,针对不同主机去调用不同的角色

vim /etc/ansible/mcb.yml

复制代码
---
- hosts: mcbweb01
  remote_user: root
  roles:
     - httpd
- hosts: mcb02
  remote_user: root
  roles:
     - mysql
~               

(7)运行 ansible-playbook

cd /etc/ansible

ansible-playbook mcb.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

复制代码
[root@11-6 opt]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── httpd
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    └── vars
        └── main.yml

24 directories, 15 files

四 青春版的LNMP

1 编写httpd模块

写一个简单的tasks/main.yml

vim /etc/ansible/roles/httpd/tasks/main.yml

相关推荐
网硕互联的小客服24 分钟前
服务器如何配置防火墙规则以阻止恶意流量和DDoS攻击?
服务器·网络·ddos
AIbase202425 分钟前
国内MCP服务平台推荐!aibase.cn上线MCP服务器集合平台
运维·服务器·人工智能
喜欢吃豆1 小时前
快速手搓一个MCP服务指南(九): FastMCP 服务器组合技术:构建模块化AI应用的终极方案
服务器·人工智能·python·深度学习·大模型·github·fastmcp
九丝城主2 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--上篇
服务器·flutter·macos·vmware
南瓜胖胖3 小时前
【seismic unix相速度分析-频散曲线】
服务器·unix
热爱生活的猴子6 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
计算机毕设定制辅导-无忧学长11 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
cv高级工程师YKY14 小时前
SRE - - PV、UV、VV、IP详解及区别
大数据·服务器·uv
眠修14 小时前
Kuberrnetes 服务发布
linux·运维·服务器
BAOYUCompany16 小时前
暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
运维·服务器