[Saltstack]-{grains,pillar}[二]

[Saltstack][grains][pillar][二]
	[grains]   
	    <span style="color:#3333ff;"><strong>当minion端的minion服务启动的时候,会调用这个grains接口,然后收集minion的信息,收集到信息是可以在salt的其他
	    模块使用的,但是每当minion的服务启动的时候,也仅仅只会收集一次。不能实时的进行收集,除非重启minion端的服务。</strong></span>
	    --------------------------------------------------------------
	    salt '192.168.60.101' grains.ls
	    192.168.60.101:
	    - SSDs	固态硬盘
	    - biosreleasedate	BIOS发布时间
	    - biosversion	BIOS版本
	    - cpu_flags		CPU特征信息
	    - cpu_model		CPU型号
	    - cpuarch		CPU架构类型
	    - domain		默认名称
	    - fqdn 			正式域名
	    - fqdn_ip4		正式ipv4公网地址
	    - fqdn_ip6		正式ipv6公网地址
	    - gpus 			图形处理器
	    - host          主机类型
	    - hwaddr_interfaces  	硬件接口地址(物理mac地址)
	    - id            IP地址
	    - init          初始化状态
	    - ip4_interfaces 	IPV4接口地址
	    - ip6_interfaces 	IPV6接口地址
	    - ip_interfaces
	    - ipv4 		IPV4本地地址(127.0.0.1,192.168.X.X)
	    - ipv6 		IPV6本地地址
	    - kernel    核心
	    - kernelrelease  	核心版本
	    - locale_info 	本地信息	
	    - localhost 	本地主机名称
	    - lsb_distrib_codename 		lsb版本名称	
	    - lsb_distrib_id 		lsb的ID号
	    - lsb_distrib_release  	lsb版本
	    - machine_id    机器Id
	    - manufacturer 	制造商
	    - master   主服务器
	    - mdadm  		设备管理器
	    - mem_total 	物理内存
	    - nodename 		节点名称
	    - num_cpus  	CPU个数
	    - num_gpus		GPU个数
	    - os 			系统
	    - os_family     系统系列
	    - osarch  		系统架构类型
	    - oscodename	系统代码名称
	    - osfinger 		系统指向
	    - osfullname 	系统全名
	    - osmajorrelease 	系统主要版本
	    - osrelease 	系统版本号
	    - osrelease_info  系统版本信息
	    - path 			路径
	    - productname    产商名称
	    - ps 		系统当前运行进程状态
	    - pythonexecutable 		Python可执行状态
	    - pythonpath 			Python安装路径
	    - pythonversion 		Python版本
	    - saltpath 				salt安装路径
	    - saltversion 			salt版本
	    - saltversioninfo 	salt版本信息
	    - selinux 		selinux状态
	    - serialnumber  serial号
	    - server_id 	服务号
	    - shell		shell目录位置
	    - virtual  	相关虚拟信息
	    - zmqversion  zmq版本
	    --------------------------------------------------------------------------
	    salt '192.168.60.101' grains.items  可以列出可用于192.168.60.101的所有模块
	    salt '192.168.60.101' grains.item os 单独列出192.168.60.101的os系统信息
	    salt '*' grains.item ipv4  列出所有主机的有关于ipv4的模块信息
	    salt -G 'host:linux' grains.item ipv4 列出所有主机名为linux的主机的IPv4的地址
	    salt -G 'os:centos' test.ping  列出所有系统为centos系统的test.ping的连通性
	    
	[pillar]
		pillar是柱子的意思,顾名思义就是一个非常重要的具有部署功能的组件,起到柱子的作用,它相较于grains有很强的灵活性,
		grains是只能再minion服务启动的时候才能收集一次minion端的信息,而pillar则是动态的,数据可以随时更新。

		(1)在使用pillar之前,需要先在master的配置文件里面打开它:
			------------------------------
			pillar_roots:
			  base:
			    - /srv/pillar
			---------------------------
			然后重新启动master的服务:  service salt-master restart
			最后就可以直接创建一个目录:  mkdir /srv/pillar/

		(2)需要在/srv/pillar目录下定义一个入口文件top.sls,内容如下:
			(因为整个软件是以Python开发,所以严格使用python的缩进格式,即双空格的方式)
			---------------------------------------------------------------------------
			vim top.sls
			base:
			  '192.168.60.101':
			    - date    #为主机192.168.60.101定义了一个属性数据,引用了top.sls同目录下的date.sls
			  '192.168.60.102':
			    - webserver  #为主机192.168.60.102定义了一个属性数据,引用了top.sls同目录下的webserver.sls
			  '*':
			    -   		<span style="color:#993399;"><strong>#为所有节点定义了一个属性数据,引用了/srv/pillar/目录下的init.sls
			    			#这里指的是一个目录,salt会自动在top.sls文件中的应用目录中寻找状态文件
			    			#所以会找到pillar目录中的init.sls文件
			    			#测试的时候不要加任何注释</strong></span>
			-----------------------------------------------------------
			vim date.sls
			date: some date
			-----------------
			vim webserver.sls
			webserver: test_dir
			-------------------------------
			ll /srv/pillar
			总用量 16
			-rw-r--r--. 1 root root 16 7月   7 13:56 date.sls
			-rw-r--r--. 1 root root 88 7月   7 15:51 top.sls
			-rw-r--r--. 1 root root 20 7月   7 13:57 webserver.sls
			-----------------------------------------------------------

		(3)进行测试:首先同步属性数据到各个minion主机,然后单独采集单个主机信息:
			[root@localhost pillar]# salt '*' pillar.items  
			192.168.60.101:
			    ----------
			    date:
			        some date
			192.168.60.102:
			    ----------
			    webserver:
			        test_dir
			[root@localhost pillar]# salt '192.168.60.101' pillar.item date
			192.168.60.101:
			    ----------
			    date:
			        some date
			[root@localhost pillar]# salt '192.168.60.102' pillar.item webserver
			192.168.60.102:
			    ----------
			    webserver:
			        test_dir
		    -------------------------------------------这只是一个简单的小实验----------------------

		(4)上面进行的只是一个针对单一环境的映射,那么如果在/srv/pillar的下面有个多个目录,该如何呢,
			其实很简单,就在master的配置文件里面增加生效的映射目录就可以了,即:
			-----------------
			file_roots:
			  base:
			    - /srv/salt
			-------------------可以添加目录-----------
			file_roots:
			  base:
			    - /srv/salt
			  dev:
			    - /srv/salt/dev
			  prod:
			    - /srv/salt/prod
			--------------------------
			这样就可以实现了。
			这样<strong><span style="color:#cc66cc;">top.sls在写入内容的时候就可以引用多个环境</span></strong>。例如:
			-------------------------------
			vim top.sls
			base:
			  '192.168.60.101':
			    - date
			dev:
			  '192.168.60.102':
			    - webserver	
			------------------------
		<span style="color:#3333ff;"><strong>【注意】比如date或者webserver的这类文件因为是和top.sls文件是同级的,所以需要放在一个目录里面,如果要放在不同的目录
				里面,也要让目录与top.sls同级!这个时候top.sls文件里面的映射则需要加上目录名,然后以“.”号分隔加上sls的文件名,
				比如:nginx.sls位于gogo目录下面,就应该写成“- gogo.nginx”</strong></span>
		(5)pillar示例:
			更改top.sls
			---------------------
			vim top.sls
			base:
			  '*':
			    - data
			    - packages
			-----------------
			mkdir /srv/pillar/data/ && touch /srv/pillar/data/init.sls
			vim init.sls
			role: DB_master
			------------------------------------------------------------
			[root@localhost pillar]# vim packages.sls 
			{% if grains['id'] == '192.168.60.102' %}
			apache: httpd
			git: git
			{% elif grains['id'] == '192.168.60.101' %}
			vim: install
			gcc: install
			{% endif %}
			---------------------------------------------
			salt '*' saltutil.refresh_pillar   <span style="color:#3333ff;">//刷新定义未生效的数据</span>
			[root@localhost pillar]# salt '*' pillar.items   <span style="color:#3333ff;">//查看minion上面的所有pillar数据</span>
			192.168.60.101:
			    ----------
			    gcc:
			        install
			    role:
			        DB_master
			    vim:
			        install
			192.168.60.102:
			    ----------
			    apache:
			        httpd
			    git:
			        git
			    role:
			        DB_master
			--------------------------------
			[root@localhost pillar]# salt '*' pillar.raw
			192.168.60.102:
			    ----------
			    role:
			        DB_master
			192.168.60.101:
			    ----------
			    role:
			        DB_master
			----------------------------


   	[分组group]
   		为了便于主机的集中化管理,便需要分组来实现:
   		一:将分组的信息写入master的配置文件/etc/salt
   		二:将分组的信息写入一个单独的配置文件中,然后主配置文件来include包含这个分组的配置文件
   	那么第二种方式的做法:
   		1.进入master的配置文件找到
   			default_include: master.d/*.conf  去掉前面的注释
   			此句意思相当于只要是放到master.d的文件目录中的配置文件都生效,都可以被主配置文件master所承认。

   		2.master.d的文件默认情况下是没有的,需要手动建立:mkdir /etc/salt/master.d/
   			顺便建立group.conf的分组配置文件: touch /etc/salt/master.d/group.conf
   			--------------------------------
   			vim /etc/salt/master.d/group.conf
   			nodegroups:
			  group1: 'L@192.168.60.101'
			  group2: 'L@192.168.60.102'
			--------------------------------------
   			#L@ 表示minion列表,列表成员为每个minion的id,而这个ID在minion的配置文件中声明
			#G@ 表示匹配的是grains的属性  例如:group2: 'G@os:RedHat'

			最后重启master的服务:service salt-master restart 或者 /etc/init.d/salt-master restart

		3.用test.ping测试组
			[root@localhost master.d]# salt -N group1 test.ping
			192.168.60.101:
	    	True
			[root@localhost master.d]# salt -N group2 test.ping
			192.168.60.102:
	    	True

	    4.同样的,因为上面在做分组之前有同步date和webserver的属性,这里也可以通过组的方式来进行收集:
	    	[root@localhost salt]# salt -N group1 pillar.item date
			192.168.60.101:
			    -----------
			    date:
			        some date
			[root@localhost salt]# salt -N group2 pillar.item webserver
			192.168.60.102:
			    -----------
			    webserver:
			        test_dir
			-----------------------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值