[Saltstack]-{grains,pillar}[二]
2016-07-07 16:39
399 查看
[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: ---------- a 4000 pache: 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 -----------------------------------------------------------------
相关文章推荐
- Saltstack快速入门简单汇总
- 通过Python使用saltstack生成服务器资产清单
- SaltStack源码分析之:master端执行salt模块大致流程
- saltstack UI界面安装
- salt 常用模块介绍
- 显示salt进程具体名称
- Salt Master外部Job Cache配置
- saltstack 自动认证
- 配置SALT
- saltstack 配置文件详解
- saltstack 配置文件详解(二)
- salt-minion配置文件详解
- Saltstack部署
- saltstack安装以及简单的配置
- saltstack 管理
- SaltStack Job 管理 及 saltutil.signal_job 模块的问题
- saltstack[3]-关于EXECUTION 与STATE FUNCTION的思考
- saltstack[2]-命令行与state文件
- saltstack[4]-pillar用户变量自定义
- saltstack[5]-grains