962148150 发表于 2018-7-31 09:29:40

saltstack2 grains模块

  
  ###Grains模块:###
  
  grains的应用场景:
  1、信息查询
  2、在远程执行里面匹配minion
  比如我想要在所有centos的机器上执行一个命令
  3、在top.sls里面匹配minion
  4、在配置文件的模板里使用
  1、信息查询
  ###把所有grains的key列出来,grains支持的所有模块
  # salt 'minion.saltstack.com' grains.ls
  minion.saltstack.com:
  - SSDs
  - cpu_flags
  - cpu_model
  - cpuarch
  - domain
  - fqdn
  - fqdn_ip4
  - fqdn_ip6
  - gpus
  - host
  - hwaddr_interfaces

  ->  - init
  - ip4_interfaces
  - ip6_interfaces
  - ip_interfaces
  - ipv4
  - ipv6
  - kernel
  - kernelrelease
  - locale_info
  - localhost
  - lsb_distrib_codename
  - lsb_distrib_id
  - lsb_distrib_release
  - master
  - mdadm
  - mem_total
  - nodename
  - num_cpus
  - num_gpus
  - os
  - os_family
  - osarch
  - oscodename
  - osfinger
  - osfullname
  - osmajorrelease
  - osrelease
  - osrelease_info
  - path
  - ps
  - pythonexecutable
  - pythonpath
  - pythonversion
  - saltpath
  - saltversion
  - saltversioninfo
  - selinux
  - server_id
  - shell
  - virtual
  - zmqversion
  ##把所有grains的内容显示出来
  # salt 'minion.saltstack.com' grains.items
  minion.saltstack.com:
  ----------
  SSDs:
  cpu_flags:
  - fpu
  - vme
  - de
  - pse
  - tsc
  - msr
  - pae
  - mce
  - cx8
  - apic
  - sep
  - mtrr
  - pge
  - mca
  - cmov
  - pat
  - pse36
  - clflush
  - dts
  - mmx
  - fxsr
  - sse
  - sse2
  - ss
  - syscall
  - nx
  - pdpe1gb
  - rdtscp
  - lm
  - constant_tsc
  - up
  - arch_perfmon
  - pebs
  - bts
  - xtopology
  - tsc_reliable
  - nonstop_tsc
  - aperfmperf
  - unfair_spinlock
  - pni
  - pclmulqdq
  - ssse3
  - fma
  - cx16
  - pcid
  - sse4_1
  - sse4_2
  - x2apic
  - movbe
  - popcnt
  - tsc_deadline_timer
  - aes
  - xsave
  - avx
  - f16c
  - rdrand
  - hypervisor
  - lahf_lm
  - abm

  ->  - arat
  - epb
  - xsaveopt
  - pln
  - pts
  - dts
  - fsgsbase
  - bmi1
  - avx2
  - smep
  - bmi2
  - invpcid
  cpu_model:
  Intel(R) Core(TM) i5-4460CPU @ 3.20GHz
  cpuarch:
  x86_64
  domain:
  saltstack.com
  fqdn:
  minion.saltstack.com
  fqdn_ip4:
  - 10.20.23.124
  fqdn_ip6:
  gpus:
  |_
  ----------
  model:
  SVGA II Adapter
  vendor:
  unknown
  host:
  minion
  hwaddr_interfaces:
  ----------
  eth1:
  00:0c:29:6e:29:0d
  lo:
  00:00:00:00:00:00

  >  minion.saltstack.com
  init:
  upstart
  ip4_interfaces:
  ----------
  eth1:
  - 10.20.23.124
  lo:
  - 127.0.0.1
  ip6_interfaces:
  ----------
  eth1:
  - fe80::20c:29ff:fe6e:290d
  lo:
  - ::1
  ip_interfaces:
  ----------
  eth1:
  - 10.20.23.124
  - fe80::20c:29ff:fe6e:290d
  lo:
  - 127.0.0.1
  - ::1
  ipv4:
  - 10.20.23.124
  - 127.0.0.1
  ipv6:
  - ::1
  - fe80::20c:29ff:fe6e:290d
  kernel:
  Linux
  kernelrelease:
  2.6.32-431.el6.x86_64
  locale_info:
  ----------
  defaultencoding:
  UTF8
  defaultlanguage:
  zh_CN
  detectedencoding:
  UTF-8
  localhost:
  salt_minion
  lsb_distrib_codename:
  Final
  lsb_distrib_id:
  CentOS
  lsb_distrib_release:
  6.5
  master:
  salt_master
  mdadm:
  mem_total:
  474
  nodename:
  salt_minion
  num_cpus:
  1
  num_gpus:
  1
  os:
  CentOS
  os_family:
  RedHat
  osarch:
  x86_64
  oscodename:
  Final
  osfinger:
  CentOS-6
  osfullname:
  CentOS
  osmajorrelease:
  6
  osrelease:
  6.5
  osrelease_info:
  - 6
  - 5
  path:
  /sbin:/usr/sbin:/bin:/usr/bin
  ps:
  ps -efH
  pythonexecutable:
  /usr/bin/python2.6
  pythonpath:
  - /usr/bin
  - /usr/lib64/python26.zip
  - /usr/lib64/python2.6
  - /usr/lib64/python2.6/plat-linux2
  - /usr/lib64/python2.6/lib-tk
  - /usr/lib64/python2.6/lib-old
  - /usr/lib64/python2.6/lib-dynload
  - /usr/lib64/python2.6/site-packages
  - /usr/lib/python2.6/site-packages
  pythonversion:
  - 2
  - 6
  - 6
  - final
  - 0
  saltpath:
  /usr/lib/python2.6/site-packages/salt
  saltversion:
  2015.5.10
  saltversioninfo:
  - 2015
  - 5
  - 10
  - 0
  selinux:
  ----------
  enabled:
  True
  enforced:
  Permissive
  server_id:
  748666745
  shell:
  /bin/bash
  virtual:
  VMware
  zmqversion:
  3.2.5
  ####想查看某一项的,把items改为单数item,并在后面加上某一项的名称:
  # salt 'minion.saltstack.com' grains.item os
  minion.saltstack.com:
  ----------
  os:
  CentOS
  ####get参数:相对于items,get只显示值的内容
  # salt 'minion.saltstack.com' grains.get os
  minion.saltstack.com:
  CentOS
  2、在远程执行里面匹配minion
  比如我想要在所有centos的机器上执行一个命令
  # salt --help |grep grain
  -G, --grain         Instead of using shell globs to evaluate the target

  use a grain value to>  the target is the grain key followed by a
  --grain-pcre      Instead of using shell globs to evaluate the target

  use a grain value to>  the target is the grain key followed by a pcre regular
  # salt -G 'os:CentOS' test.ping         ##-G表示使用grains进行匹配,,参数必须紧跟salt
  minion.saltstack.com:
  True
  minion1.saltstack.com:
  True
  # salt -G 'fqdn:minion.saltstack.com' test.ping
  minion.saltstack.com:
  True
  # salt 'minion.saltstack.com' grains.get fqdn   ###反查minion.saltstack.com的fqdn,用来定位
  minion.saltstack.com:
  minion.saltstack.com
  所以通过grains插件可以实现在什么条件的机器侠执行一条相同的命令,都可以通过grains进行匹配。
  若是内置的grains满足不了我们的需求,,我们也可以自定义grains,,通过在minion端修改配置文件的方式来自定义grains
  ###minion端###
  # vim /etc/salt/minion    ####切到文件结尾
  grains:
  roles: nginx
  env: prod
  # /etc/init.d/salt-minion restart
  Stopping salt-minion daemon:                               [确定]
  Starting salt-minion daemon:                               [确定]
  # salt -G 'env:prod' test.ping
  minion.saltstack.com:
  True                        ###成功匹配
  # salt -G 'roles:nginx' test.ping
  minion.saltstack.com:
  True
  若是感觉grains写在minion配置文件里不方便,,也可以写在/etc/salt/grains文件下
  前提是和配置文件里的不能冲突
  ###区别:加入到配置文件/etc/salt/minion上面必须指明为grains,,第二种方法为在/etc/salt/下创建一个名为grains的文件,不指明grains,直接写就好###
  # vim /etc/salt/grains
  cloud: openstack
  # /etc/init.d/salt-minion restart            #####添加完后必须重启
  Stopping salt-minion daemon:                               [确定]
  Starting salt-minion daemon:                               [确定]
  # cat /etc/salt/grains
  cloud: openstack
  # tail /etc/salt/minion
  #
  mysql.host: '10.20.23.209'
  mysql.user: 'salt'
  mysql.pass: 'salt'
  mysql.db: 'salt'
  mysql.port: 3306
  grains:
  role: nginx
  env: prod
  ###匹配一下:
  # salt -G 'cloud:openstack' test.ping
  minion.saltstack.com:
  True
  ###使用salt '*' saltutil.sync_grains刷新grains,就不需要minion端重启,测试:####
  # vim /etc/salt/grains
  cloud: openstack
  test: salt            ###添加了这一行,保存退出,不重启minion端
  ###切到master端###
  # salt '*' saltutil.sync_grains
  minion.saltstack.com:
  minion1.saltstack.com:
  # salt -G 'test:salt' test.ping
  minion.saltstack.com:
  True
  3、在top.sls里面匹配minion
  # vim /srv/salt/top.sls    ###切到最后,添加如下内容:
  'role:nginx':
  - match: grain
  - init.pkg
  # cat /srv/salt/top.sls
  base:
  '(minion|minion1).saltstack.com':
  - match: pcre
  - init.pkg
  - init.limit
  #'role:nginx':
  #    - match: grain
  #    - init.pkg            ###先注释掉,注释用#号,知道写法即可
页: [1]
查看完整版本: saltstack2 grains模块