ansible---------roles&template

一、template模板

例如:使用template模板安装apache
1、管理端安装apache

yum -y install httpd

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2		# template必须要使用j2的格式的文件

vim /opt/httpd.conf.j2
Listen {{http_port}}
ServerName {{server_name}}
MaxClients {{access_num}}

vim /etc/ansible/hosts
[test]
192.168.241.20 http_port=192.168.241.20:80 server_name=www.hzh.com access_num=100

vim apache.yml
- hosts: test
  remote_user: root
  vars:
   - names: httpd
  tasks:
   - name: install httpd
     yum: name={{names}} state=latest
   - name: config file
     template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
     notify:
      - restart httpd
   - name: enable httpd
     service: name={{names}} enabled=true state=started
  handlers:
   - name: restart httpd
     service: name={{names}} state=restarted
ansible-playbook apache.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2、在远程主机上查看

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、打标签,只执行某一段的task

vim test.yml
- hosts: test
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - qqq
    - name: touch file
      file: path=/opt/hosts11 state=touch
执行命令:
ansible-playbook test.yml --tags="qqq"

上面的例子只执行tags以上的,以下的就不执行了
在这里插入图片描述

2、实际上,不光可以为单个或者多个task指定同一个tags,playbook还提供一个特殊的tags为always,也就是不管前面的tags,它一直会执行这个tags

- hosts: test
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - qqq
    - name: touch file
      file: path=/opt/hosts11 state=touch
      tags:
       - always
ansible-playbook test.yml --tags="qqq"
去远程端检查下就可以看到,依旧执行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、roles模块

roles能够根据层次型结构自动装载变量文件

1、roles内各目录的含义解释

files:用来存放由copy模块或者script模块调用的文件

template:用来存放j2模板的,template模块会自动在此目录中寻址j2模板文件

tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件

handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作

vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量

defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量

meta:此目录应当包含一个main.yml文件,用于为当前角色的特殊设定及其依赖关系

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

1)创建以roles命令的目录

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

2)创建全局变量目录

mkdir -p /etc/ansible/group_vars
touch /etc/ansible/group_vars/all			# 文件名称可以自定义,但是在引用的时候需要注意下

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

mkdir -p /etc/ansible/roles/command

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

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)在每个角色的defaults,vars,tasks,meta,handlers目录下创建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/test.yml
- hosts: test01
  remote_user: root
  roles:
    - httpd
	- mysql

7)搭建lanp架构
准备需要目录

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

准备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
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

在这里插入图片描述

编写httpd模块

vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
  yum: pkg= {{servername}} state=latest

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

在这里插入图片描述
在这里插入图片描述

编写mysql模块

vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
  yum: pkg= {{servername}} state=latest

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

编写PHP模块

vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
  yum: pkg= {{servername}} state=latest

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

创建剧本

vim /etc/ansible/lamp.yml
- hosts: test01
  remote_user: root
  roles:
    - httpd
	- mysql
	- php
ansible-playbook lamp.yml

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值