SaltStack的Grains主要是收集了minion的一些配置信息,如CPU、内存、硬盘、网络、操作系统等很少发生变化的静态数据,我们也可以在minion自定义Grains项和相应的值,Grains也可以用来匹配目标minion。SaltStack的state通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等通过sls文件定义好要达到的状态实现批量对minion进行自动化配置。本文的主要内容是对Grains和State的基本使用与测试。

一、Grains测试

1、使用命令salt 'salt-minion01' grains.ls可以列出所有的Grains项

01.png

2、使用命令 salt 'salt-minion01' grains.items可以查看所有Grains项的值

[root@salt-master
~]# salt 'salt-minion01' grains.items
salt-minion01:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
    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
        - ht
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - 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
        - 3dnowprefetch
        - ida
        - arat
        - epb
        - xsaveopt
        - pln
        - pts
        - dts
        - fsgsbase
        - bmi1
        - hle
        - avx2
        - smep
        - bmi2
        - invpcid
        - rtm
    cpu_model:
        Intel(R) Core(TM) i7-6700HQ CPU @2.60GHz
    cpuarch:
        x86_64
    disks:
        - ram0
        - ram1
        - ram2
        - ram3
        - ram4
        - ram5
        - ram6
        - ram7
        - ram8
        - ram9
        - ram10
        - ram11
        - ram12
        - ram13
        - ram14
        - ram15
        - loop0
        - loop1
        - loop2
        - loop3
        - loop4
        - loop5
        - loop6
        - loop7
        - sda
        - sr0
        - dm-0
        - dm-1
        - dm-2
        - dm-3
        - dm-4
        - dm-5
        - dm-6
        - dm-7
        - dm-8
    dns:
        ----------
        domain:
        ip4_nameservers:
        ip6_nameservers:
        nameservers:
        options:
        search:
        sortlist:
    domain:
    fqdn:
        salt-minion01
    fqdn_ip4:
        - 192.168.10.121
    fqdn_ip6:
    gid:
        0
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    groupname:
        root
    host:
        salt-minion01
    hwaddr_interfaces:
        ----------
        eth0:
            00:0c:29:49:e9:93
        lo:
            00:00:00:00:00:00
    id:
        salt-minion01
    init:
        upstart
    ip4_interfaces:
        ----------
        eth0:
            - 192.168.10.121
        lo:
            - 127.0.0.1
    ip6_interfaces:
        ----------
        eth0:
            - fe80::20c:29ff:fe49:e993
        lo:
            - ::1
    ip_interfaces:
        ----------
        eth0:
            - 192.168.10.121
            - fe80::20c:29ff:fe49:e993
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 127.0.0.1
        - 192.168.10.121
    ipv6:
        - ::1
        - fe80::20c:29ff:fe49:e993
    kernel:
        Linux
    kernelrelease:
        2.6.32-431.el6.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
    localhost:
        salt-minion01
    machine_id:
        7a2aeb71ad0121118ab9fcad00000025
    manufacturer:
        VMware, Inc.
    master:
        192.168.10.120
    mdadm:
    mem_total:
        980
    nodename:
        salt-minion01
    num_cpus:
        2
    num_gpus:
        1
    os:
        RedHat
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Santiago
    osfinger:
        Red Hat Enterprise Linux Server-6
    osfullname:
        Red Hat Enterprise Linux Server
    osmajorrelease:
        6
    osrelease:
        6.5
    osrelease_info:
        - 6
        - 5
    path:
       /sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
    pid:
        1820
    productname:
        VMware Virtual Platform
    ps:
        ps -efHww
    pythonexecutable:
        /usr/bin/python2.7
    pythonpath:
        - /usr/bin
        - /usr/lib/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 14
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2017.7.4
    saltversioninfo:
        - 2017
        - 7
        - 4
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        VMware-56 4d b2 aa b6 10 89 96-a1 45 63  bc 92 49 e9 93
    server_id:
        1399817943
    shell:
        /bin/sh
    uid:
        0
    username:
        root
    uuid:
        aab24d56-10b6-9689-a145-63bc9249e993
    virtual:
        VMware
    zmqversion:
        4.0.5
[root@salt-master
~]#

3、使用salt '*' grains.item os或salt '*' grains.get os都可以单独查看minion的具体grains项的值(如OS),区别是后者可以只显示值

02.png 

4、下面我们来自定义minions的Grains项和值,将salt-minion01标记为role: webserver和type: apache,将salt-minion02标记为role: dbserver和type: mysql。先在master的文件根目录/srv/salt编辑两个文件,分别是web_grains.conf和db_grains.conf,内容如下:

03.png

5、使用cp.get_file将web_grains.conf文件推送到salt-minion01的/etc/salt /minion.d目录,将db_grains.conf文件推送到salt-minion02的/etc/salt/minion.d目录,然后使用saltutil.sync_grains刷新下minion的Grains信息,就完成了Grains项和值的自定义了

04.png


二、State测试

1、现在想将salt-minion01配置成Apache服务器,并推送index.html文件到/var/www/html目录,还要启动httpd服务并设置开机启动,这一系列操作我们当然可以写成shell脚本,但用SaltStack的sls文件来定义这些操作则能够更简单地实现,首先确认目标minion没有安装httpd的包,然后在/srv/salt中编写好index.html文件和http.sls文件,如下:

05.png

[root@salt-master ~]# cat /srv/salt/http.sls 
httpd:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
index-html:
  file.managed:
    - name: /var/www/html/index.html
    - source: salt://index.html
    - user: root
    - group: root
    - mode: 644
    - require:
      - pkg: httpd
httpd-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - require:
      - pkg: httpd

[root@salt-master ~]#

2、执行命令 salt -G 'role: webserver' state.sls http调用/srv/salt/http.sls文件,并匹配上文自定义的Grains为"role: webserver"的目标minion,即salt-minion01,如果匹配的目标是多台minion,那就是批量操作了,执行的结果如下:

06.png

3、使用curl测试一下是否能访问,访问正常

07.png

4、检查一下http.sls文件所定义的操作,Grains为“role:webserver”的minion是否都执行了,如装httpd和httpd-devel包、推送index.html文件到/var/www/html目录,开机启动httpd服务,经检查,确实都按预期执行了

08.png

本文出自江健龙的技术博客jiangjianlong.blog.51cto.com,转载请注明出处。