ANSIBLE ROLES

• 自定义Ansible Role
• 编写playbook调用role
• 使用ansible-galaxy管理Roles
在实际生产环境中,为了实现不同的功能,我们会编写大量的playbook文件。而且,每个playbook还可能会调用其他文件(如变量文件),对于海量的、无规律的文件,管理起来非常痛苦! Ansible从1.2版本开始支持Role(角色),Role(角色)是管理ansible文件的一种规范(目录结构),Role(角色)会按照标准的规范,自动到特定的目录和文件中读取数据。
如果我们创建了一个名称为user.example的Role(角色),则其标准的目录结构如下图所示。ANSIBLE ROLES_第1张图片
Roles目录结构中主要文件的作用是什么呢?
• defualts/main.yml:定义变量的缺省值,优先级较低
• files目录:存储静态文件的目录,如tar包、音乐、视频等
• handlers/main.yml:定义handlers
• meta/main.yml:写作者、版本等描述信息
• README.md:整个角色(role)的描述信息
• tasks/main.yml:定义任务的地方
• templates目录:存放动态数据文件的地方(文件中包含了变量的模板文件)
• vars/main.yml:定义变量,优先级高

步骤一:Role应用案例
下面这个案例目的:编写一个包含变量的模板文件,编写任务调用template模块,将模板文件拷贝给被管理端主机。

		1)创建Roles
		ansible-galaxy命令可以创建、管理自己的roles。
				1.	[root@control ansible]# mkdir ~/ansible/roles
				2.	[root@control ansible]# ansible-galaxy init  ~/ansible/roles/issue
				3.	#创建一个Role,该Role的目的是拷贝自己新建的一个模板文件到远程主机的/etc/issue
				4.	[root@control ansible]# tree  ~/ansible/roles/issue/
				5.	#查看目录结构,如果没有tree命令则需要使用yum安装该软件
		2)修改Role文件
		定义名称为myfile.txt的模板文件(该文件包含变量,因此必须放置templates目录)
				1.	[root@control ansible]# vim ~/ansible/roles/issue/templates/myfile.txt
				2.	This is the system {{ansible_hostname}}
				3.	Today's date is:{{ansible_date_time.date}}
				4.	Contact to {{ admin }}
		3)自定义变量文件(前面调用了admin这个变量,这里需要定义admin变量并赋值)
				1.	[root@control ansible]# vim ~/ansible/roles/issue/vars/main.yml
				2.	---
				3.	# vars file for /root/ansible/roles/issue
				4.	admin: [email protected]
				5.	#变量名为admin,变量的值为[email protected]
		4)修改任务文件,任务文件中不需要tasks关键词,Role的各个文件之间相互调用不需要写文件的路径。
				1.	[root@control ansible]# vim ~/ansible/roles/issue/tasks/main.yml
				2.	---
				3.	# tasks file for /root/ansible/roles/issue
				4.	-  name: delever issue file
				5.	   template:
				6.	     src: myfile.txt
				7.	     dest: /etc/issue
				8.	#调用template模块将myfile.txt文件拷贝给被管理端主机.
		5)在Playbook中调用Role
		Role创建好了,role不会自己运行,需要编写一个剧本调用上面的role。编写playbook剧本文件,通过roles关键词调用role。
				1.	[root@control ansible]# vim  ~/ansible/issue.yml
				2.	---
				3.	- hosts: test
				4.	  roles:
				5.	    - issue
				6.	#   - role2              #支持加载多个role
		6)修改ansible.cfg配置文件,定义roles目录。
				1.	[root@control ansible]# vim  ~/ansible/ansible.cfg 
				2.	[defaults]
				3.	inventory = ./inventory
				4.	roles_path = ./roles                    #指定到哪个目录下找role
				5.	remote_user = alice
				6.	[privilege_escalation]
				7.	become=True
				8.	become_method=sudo
				9.	become_user=root
				10.	become_ask_pass=False

ansible-galaxy命令:
公共Roles仓库(https://galaxy.ansible.com)管理,就是上网查找别人已经写好的roles,开源嘛。

	1.	[root@control ansible]# ansible-galaxy  search 'httpd' 
	2.	#联网搜索roles
	3.	[root@control ansible]# ansible-galaxy info acandid.httpd 
	4.	#查看roles基本信息
	5.	[root@control ansible]# ansible-galaxy install acandid.httpd -p ~/ansible/roles/
	6.	#下载roles到特定的目录,-p可以指定下载到哪个目录

使用ansible-galaxy install可以直接下载Role,也可以编写requirements.yml文件下载Role

			1.	[root@control ansible]# vim ~/ansible/roles/requirements.yml
			2.	#格式一:可以直接从Ansible Galaxy官网下载
			3.	- src: acandid.httpd
			4.	#格式二:可以从某个git服务器下载
			5.	- src: http://gitlab.com/xxx/xxx.git
			6.	  scm: git
			7.	  version: 56e00a54
			8.	  name: nginx-acme
			9.	#格式三:可以指定位置下载tar包,支持http、https、file
			10.	- src:  http://example.com/myrole.tar
			11.	  name:  myrole
			12.	
			13.	[root@control ansible]# ansible-galaxy install 	-r ~/ansible/roles/requirements.yml  -p roles
			16.	# -r后面跟文件名,该文件中包含了需要下载哪些role以及他们的链接位置
			17.	# -p 指定将下载的role保存到哪个目录

你可能感兴趣的:(Linux,Centos,linux)