当前位置:主页 > 查看内容

ansible的template、tags、roles模块及应用

发布时间:2021-05-19 00:00| 位朋友查看

简介:template、tags、roles 一、Templates模块 二、tags模块 三、roles 实验ansible安装搭建LAMP架构 创建基本文件 编写httpd模块 编写mysql模块 编写php模块 编写roles示例 一、Templates模块 在ansible上操作 1、安装httpd服务 yum -y install httpd 2、编辑te……

一、Templates模块

在ansible上操作

1、安装httpd服务

yum -y install httpd

2、编辑template文件

cp /etc/httpd/conf/httpd.conf /opt
mv httpd.conf httpd.conf.j2

vim /opt/httpd.conf.j2			#在文件中找到以下内容,并修改
...
Listen {{http_port}}
ServerName {{server_name}}
MaxClients {{access_num}}

3、编辑ansible配置文件

vim /etc/ansible/hosts	#添加以下内容
...
[webserver]
192.168.28.20 httpd_port=192.168.28.20:80 access_num=200 server_name="www.mxx.com:80"

4、编辑yml文件

vim apache.yml

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

5、检查并执行yml文件

ansible-playbook apache.yml --syntax-check

ansible-playbook apache.yml

补充

可以去远程主机上查看
grep -i listen /etc/httpd/conf/httpd.conf
grep -i MaxClient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf

二、tags模块

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

例一:

1、编辑yml文件

vim hosts.yml

- hosts: webserver
  remote_user: root
  tasks:
    - name: copy hosts files
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - only
    - name: touch file
      file: path=/opt/host01 state=touch

2、执行yml文件

ansible-playbook hosts.yml --tags="only"

在执行完命令后,可以去[webserver]主机上查看/opt目录下是否有hosts和hosts01文件,结果显示只有一个hosts文件,是因为tags: -only标签的执行,阻止了后边的内容的继续
在[webserver]主机的/opt中删除hosts01文件,再执行以下命令:

ansible-playbook hosts.yml

可以发现/opt目录下,有了hosts和hosts01文件

例二:

1、编辑yml文件

vim hosts.yml

- hosts: webserver
  remote_user: root
  tasks:
    - name: copy hosts files
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - only
    - name: touch file
      file: path=/opt/host01 state=touch
      tags:
      - always

2、执行yml文件

ansible-playbook hosts.yml --tags="only"

三、roles

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

roles常用的模块
roles/
  common/
  files/
  templates/
  tasks/
  handlers/
  vars/
  defaults/
  meta/
  web/
  files/
  templates/
  tasks/
  handlers/
  vars/
  defaults/
  meta/

roles内各目录含义解释

  • files:用来存放由copy模块或script模块调用的文件。
  • templates:用来存放jinjia2模板, template模块会自动在此目录中寻找jinjia2模板文件。
  • tasks:此目录应当包含-个main.yml文件, 用于定义此角色的任务列表,此文件可以使用
  • include包含其它的位于此目录的task文件。
  • handlers:此目录应当包含-个main.ym|文件, 用于定义此角色中触发条件时执行的动作。
  • vars: 此目录应当包含- 个main.yml文件, 用于定义此角色用到的变量。
  • defaults:此目录应当包含一个main.ym|文件, 用于为当前角色设定默认变量。
  • meta:此目录应当包含-个main.yml文件, 用于定义此角色的特殊设定及其依赖关系。

实验:ansible安装搭建LAMP架构

创建基本文件

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

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

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

编写mysql模块

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

编写php模块

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

编写roles示例

vim /etc/ansible/site.yml
- hosts: webserver
  remote_user: root
  roles:
   - httpd
   - mysql
   - php
;原文链接:https://blog.csdn.net/weixin_51725822/article/details/115524521
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐