ansible---templates、tags、roles 使用介绍

本文介绍了Ansible的templates模板、tags模块和roles模块的使用。templates用于创建 Jinja2 模板,tags模块允许选择执行特定任务,roles则是Ansible中组织任务的层次化方式,便于复用和管理。通过示例展示了如何创建和使用roles,包括各个目录的用途,如tasks、handlers、vars等,并给出了安装LAMP架构的实验案例。
摘要由CSDN通过智能技术生成

ansible—templates/tags/roles 使用介绍

templates 模板

[root@ansible ~]# cd /opt/
[root@ansible opt]# ssh-agent bash	'//控制用来保存公钥身份验证所使用的私钥'
[root@ansible opt]# ssh-add 		'//把专用秘钥添加至ssh-agent高速缓存中'
Enter passphrase for /root/.ssh/id_rsa: 
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@ansible opt]# scp root@192.168.126.20:/etc/httpd/conf/httpd.conf /opt/
'//将webserver端的apache配置文件远程复制至本地'
httpd.conf                                     100%   11KB  10.1MB/s   00:00
[root@ansible opt]# vim httpd.conf 
'//修改配置文件,添加模板(变量)'
43 Listen {{http_port}}			'//监听'
98 ServerName {{server_name}}	'//域名'
99 MaxClients {{access_num}}	'//访问量'

[root@ansible opt]# mv httpd.conf httpd.conf.j2
'//修改完配置文件,复制一份,j2格式表示为模板'
[root@ansible opt]# vim /etc/ansible/hosts 
'//后续需要对参数进行赋值'
25 [webserver]		'//设定变量'
26 192.168.126.20 http_port=192.168.126.20:80 server_name="www.chenwei.com:80" access_num=300
[root@ansible opt]# vim apache.yml

- hosts: webserver		'//指定webserver'
  remote_user: root		'//指定远程主机使用root用户'
  vars:		'//变量可以定义在vars中,也可以在hosts主机清单中'
   - package: httpd
   - server: httpd
  tasks:
   - name: check latest		'//检查最新版本'
     yum: name={{package}} state=latest		'//安装最新版本服务'
   - name: configure apache		'//配置apache'
     template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
     '//源文件在ansible端,生成至对方服务器端'
     notify:		'//修改配置文件后需重启服务'
      - restart httpd
   - name: statrt httpd		'//最后一步需要开启服务项'
     service: name={{server}} enabled=true state=started	'//开启自启'
  handlers:		'//notify通知handlers执行'
   - name: restart httpd		'//重启服务使配置生效'
     service: name={{server}} state=restarted

[root@ansible opt]# ansible-playbook apache.yml --syntax-check
'//检查语法,正确'
playbook: apache.yml
[root@ansible opt]# ansible-playbook apache.yml 
'//执行'
PLAY [webserver] ****************************************************************

TASK [Gathering Facts] **********************************************************
ok: [192.168.126.20]

TASK [check latest] *************************************************************
ok: [192.168.126.20]

TASK [configure apache] *********************************************************
changed: [192.168.126.20]

TASK [statrt httpd] *************************************************************
ok: [192.168.126.20]

RUNNING HANDLER [restart httpd] *************************************************
changed: [192.168.126.20]

PLAY RECAP **********************************************************************
192.168.126.20             : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
'//切换至webserver主机,查看配置文件是否更改'
[root@webserver ~]# grep -i Listen /etc/httpd/conf/httpd.conf
[root@webserver ~]# grep -i MaxClients /etc/httpd/conf/httpd.conf
[root@webserver ~]# grep -i ServerName /etc/httpd/conf/httpd.conf
'//可以看到配置好的模板已自动生效'
'//所有服务器皆可按照模板来,非常强大及便捷!'

tags 模块

1.在一个剧本中,一般会定义多个task,而tags可以选择执行哪一个
[root@ansible opt]# vim file.yml

- hosts: webserver
  remote_user: root
  tasks:
   - name: Copy hosts file		'//复制操作'
     copy: src=/etc/hosts dest=/opt/hosts
     tags:		'//标记,打标签,以上为一个整体'
      - only
   - name: touch file		'//另一个操作'
     file: path=/opt/hosts01 state=touch
'//以上操作表示为只执行完第一个就结束而不执行第二个'
'//若不设置标签则会执行到底
'
[root@ansible opt]# ansible-playbook file.yml --syntax-check

playbook: file.yml
[root@ansible opt]# ansible-playbook file.yml --tags="only"

PLAY [webserver] ****************************************************************

TASK [Gathering Facts] **********************************************************
ok: [192.168.126.20]

TASK [Copy hosts file] **********************************************************
changed: [192.168.126.20]

PLAY RECAP **********************************************************************
192.168.126.20             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@ansible opt]# ansible webserver -a "ls /opt"
192.168.126.20 | CHANGED | rc=0 >>
hosts		'//结果反馈,只有hosts,没有hosts01,执行成功'
rh

--always--
[root@ansible opt]# vim file.yml

- hosts: webserver
  remote_user: root
  tasks:
   - name: Copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
      - only
   - name: touch file
     file: path=/opt/hosts01 state=touch
     tags:		'//添加此项,always表示在任何条件前提下始终执行'
      - always

[root@ansible opt]# ansible webserver -a "rm -rf /opt/hosts"
[WARNING]: Consider using the file module with state=absent rather than running
'rm'.  If you need to use command because file is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
192.168.126.20 | CHANGED | rc=0 >>
'//删除旧文件,方便后续测试'
[root@ansible opt]# ansible-playbook file.yml 

PLAY [webserver] ****************************************************************

TASK [Gathering Facts] **********************************************************
ok: [192.168.126.20]

TASK [Copy hosts file] **********************************************************
changed: [192.168.126.20]

TASK [touch file] ***************************************************************
changed: [192.168.126.20]

PLAY RECAP **********************************************************************
192.168.126.20             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible opt]# ansible webserver -a "ls -l /opt"
192.168.126.20 | CHANGED | rc=0 >>
总用量 4
-rw-r--r--  1 root root 158 4月   8 10:00 hosts
-rw-r--r--  1 root root   0 4月   8 10:00 hosts01		'//有了,always生效'
drwxr-xr-x. 2 root root   6 3月  26 2015 rh

roles 模块

roles介绍

Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles 。
角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
角色是ansible自带的工具,在我之前的博客学习了playbook的用法,将所有的操作写入playbook里面,但是如果hosts较多,写在一起容易混淆并且读起来也不方便。所以我们引入了roles,roles将每个部分分割开来,生成不同的目录,每个目录有每个目录的作用。
讲解每个目录的作用,其实不难发现,每个目录就是我们之前写playbook中所用到的,将每个部分分离出来。

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文件,用于定义此角色的特殊设定及其依赖关系。

roles使用步骤

在一个palybook中使用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目录,用不到的目录可以创建为空(以httpd和mysql举例)

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文件中,调用各角色。

vim  /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

–编写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

-------编写mysql模块-------

vim fetc/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*

------编写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

-----编写roles示例-----

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

----验证ansible-playbook----

ansible-playbook lamp.yaml

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值