自动化运维 ansible角色管理

本文详细介绍了如何使用Ansible的Templates模块定制配置文件,tags模块的灵活应用,以及roles模块的组织结构与在搭建LAMP架构过程中的实践,包括httpd、mysql和php模块的编写与整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Templates模块

在控制端进行以下操作:

1、获取模板

yum install -y httpd     #获取httpd.conf模板
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

2、定义变量

#定义httpd.conf.j2文件中的变量
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
httpd.conf.j2  rh  test.sh
[root@localhost opt]# vim httpd.conf.j2 
Listen {{http_port}}         #修改(监听端口)
ServerName {{server_name}}   #取消注释后修改(域名)
MaxClients {{access_num}}    #添加改行(最大连接数)

3、传入变量

[root@localhost opt]# vim /etc/ansible/hosts
[webservers]
192.168.200.30 http_port=192.168.200.30:80 access_num=30 server_name="www.gcc.com:80"
[mysql]
192.168.200.40

4、编写剧本

[root@localhost demo]# vim i.yaml 

- hosts: webservers
   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

#执行剧本
[root@localhost demo]# ansible-playbook i.yaml

#去远程主机[webservers]上查看配置文件是否更改成功
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 模块

1、编写tags标签剧本

如果剧本中有tags标签,那么在执行剧本的时候备注上tags标签的话,只会执行到tags标签处就会停止,不会再往后执行。

[root@localhost demo]# vim j.yaml
 - hosts: webservers
   remote_user: root
   tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - abc
    - name: touch file
      file: path=/opt/hosts01 state=touch


[root@localhost demo]# ansible-playbook j.yaml --syntax-check    #检查yaml语法是否有错

playbook: j.yaml
[root@localhost demo]# ansible-playbook j.yaml --tags="abc"    #使用tags命令,让yaml文件执行到tags标签处停止,后面的内容不再执行   

发现只执行到copy模块处
在这里插入图片描述

2、编写always标签剧本

当打上always标签后,无论前面是否与其他tags标签,整个剧本均会被执行。

[root@localhost demo]# vim j.yaml 
 - hosts: webservers
   remote_user: root
   tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - abc
    - name: touch file
      file: path=/opt/hosts01 state=touch
      tags:
        - always


[root@localhost demo]# ansible-playbook j.yaml --tags="abc"

发现执行到了touch模块处
在这里插入图片描述

三、role模块

roles能够根据层次型结构自动装载变量文件、task以及handlers等。

roles/
	common/
	files/
	templates/
	tasks/
	handlers/
	vars/
	defaults/
	meta/
web/
	files/
	templates/
	tasks/
	handlers/
	vars/
	defaults/
	meta/

(一)、roles内各目录含义解释:

files:用来存放由copy模块或script模块调用的文件。
templates:用来存放jnja2(j2)模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks:此目录应当包含一个 main.yml 文件, 用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的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,tasks,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

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

1、编写httpd模块

写一个简单的 tasks/main.yml

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

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

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

2、编写mysq|模块

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


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

3、编写php模块

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

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

4、编写roles示例

vim /etc/ansible/site.yml
 - hosts: webservers
   remote_user: root
   roles:
    - httpd
    - mysql
    - php

5、执行剧本

[root@localhost mysql]# ansible-playbook /etc/ansible/site.yml 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值