ansible templates+roles

一、Templates模块

(这里我们以apache为示例,这里192.168.177.33安装了ansible、epel源、以及apache,然后配置主机清单,并推送密钥给另一台(192.168.177.8))

yum install httpd -y
rpm -qc httpd

在这里插入图片描述

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

在这里插入图片描述

vim httpd.conf.j2
Listen {{http_port}}  #监听端口
ServerName {{server_name}} #注释去掉  域名
MaxClients {{access_num}}   #最大连接数

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

vim /etc/ansible/hosts
[webserver]
192.168.177.8 http_port=192.168.177.8:80 access_num=30 server_name=www.tefuir.com:80

在这里插入图片描述
编辑yaml文件

vim b.yaml
- hosts: webserver
  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 b.yaml --syntax-check
ansible-playbook b.yaml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入172.168.177.8进行查看

vim /etc/httpd/conf/httpd.conf
   

在这里插入图片描述
在这里插入图片描述
去远程主机查看

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标签功能了。
vim c.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
     - yoyo
   - name: touch file
     file: path=/opt/hosts01 state=touch
执行命令:ansible-playbook c.yaml --tags="yoyo"

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

这里我们发现后面touch的命令没有执行,所以就需要以下的操作

vim c.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
     - yoyo
   - name: touch file
     file: path=/opt/hosts01 state=touch
     tags:
     - always

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

三、roles

roles能够根据层次型结构自动装载变量文件、task以及handlers等。
roles内各目录含义解释

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

在一个playbook中使用roles的步骤
(1)创建以roles命令的目录

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

(2)创建全局变量目录

mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all #文件名自己定义,引用的时候主机

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

mkdir /etc/ansible/roles/common -p

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

(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,tasjs,meta,handlers}/main.yml

(6)在playbook文件中,调用各角色。

vi /etc/ansible/site.yml

- hosts: webserver
  remote_user: root
  roles:
    - httpd
    - mysql

实验:安装搭建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

准备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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ansible中,roles是一种组织和管理Playbook的方式。它可以将相关的任务、变量和文件组织在一起,以便更好地管理和复用代码。而templatesAnsible中用于生成配置文件的模板文件。 具体来说,roles是一个包含特定功能的目录结构,通常包含以下几个主要部分: 1. tasks:该目录包含了执行具体任务的YAML文件。这些文件定义了要在目标主机上执行的操作,例如安装软件包、配置服务等。 2. handlers:该目录包含了处理任务事件的处理程序。当某个任务发出通知时,处理程序会根据需要执行相应的操作,例如重启服务。 3. defaults:该目录包含了角色的默认变量。这些变量可以在整个角色中使用,并且可以在Playbook中进行覆盖。 4. vars:该目录包含了角色的其他变量。这些变量可以在整个角色中使用,并且可以在Playbook中进行覆盖。 5. files:该目录包含了角色所需的文件。这些文件可以在任务中使用,例如复制到目标主机上。 6. templates:该目录包含了用于生成配置文件的模板文件。模板文件使用Jinja2语法,可以根据变量和条件生成不同的配置文件。 而templatesAnsible中用于生成配置文件的模板文件。模板文件使用Jinja2语法,可以根据变量和条件生成不同的配置文件。在模板文件中,可以使用变量、循环、条件等语法来动态生成配置文件内容。模板文件通常存放在roles目录的templates子目录中,并且可以在任务中使用template模块来生成配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值