SaltStack 应用grains与jinja模板 [四]

2017年11月25日16:20:46 发表评论 4,645 views
摘要

SaltStack 应用grains与jinja模板的使用方法

广告也精彩

不知不觉SaltStack系列写到第四篇,一同陪我走到这的同学,请坚持住,因为您本章非常重要,本章重点如下:

一、grains与jinja简介

1.jinja模板是什么?

SaltStack 应用grains与jinja模板 [四]
Jinja2 是一个 Python 的功能齐全的模板引擎。它有完整的 unicode 支持,一个可选 的集成沙箱执行环境,被广泛使用,以 BSD 许可证授权

2.为什么叫做 Jinja ?

选择 Jinja 作为名字是因为 Jinja 是日本寺庙的名称,并且 temple 和 template 的发音类似。它并不是以乌干达的金贾市(Jinja)命名的。
jinja官网:jinja模板做什么用的

3.grains是什么?做什么用的?

RAINS 组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者 重新同步下 grains。除此之外我们还可以自定义Grains的一些信息。
自定义的方法有三种:

通过Minion配置文件定义;
通过Grains相关模块定义;
通过python脚本定义;

二、Saltstack的jinja用法

1.使用grains获取ip地址信息

使用fqdn_ip4获取,获取下来是一个列表元素,在jinja模板里面使用IPADDR: {{ grains [ 'fqdn_ip4'][0] }}表示

[root@node01 ~]# salt "node02*" grains.item fqdn_ip4 
node02:
    ----------
    fqdn_ip4:
        - 192.168.56.12

修改lamp.sls文件
绿色部分为新添加

[root@node01 ~]# cd /srv/salt/base/web/
[root@node01 web]# cat lamp.sls
lamp-install:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-pdo
      - php-mysql

apache-config:
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://web/files/httpd.conf
    - user: root
    - group: root
    - mode: 644
   "- template: jinja
    - defaults:
      PORT: 8080                             #变量PORT和模板文件的PORT变量要对应
      IPADDR: {{ grains [ 'fqdn_ip4'][0] }}  #支持python语法  可以把花括号的内容直接写在模板里面 但是不建议 结构不清晰 #变量很强大 支持cmd.run 返回结果等等"
    - require:
      - pkg: lamp-install

php-config:
  file.managed:
    - name: /etc/php.ini
    - source: salt://web/files/php.ini
    - user: root
    - group: root
    - mode: 644

lamp-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
       - file: apache-config

apache-conf:
  file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d

apache-auth:
  pkg.installed:
    - name: httpd-tools
    - require_in:
      - cmd: apache-auth   #如果没有这个rpm包下面的cmd.run就不运行,解决依赖关系
  cmd.run:
    - name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
    - unless: test -f /etc/httpd/conf/htpasswd_file

2.执行状态模块

因为在top.sls里面已经编排好了任务可以使用高级方法执行

[root@linux-node1 web]# salt "linux-node2*" grains.item fqdn_ip4 
linux-node2.example.com:
    ----------
    fqdn_ip4:
        - 192.168.56.12
[root@linux-node1 web]# salt "*" state.highstate
linux-node2.example.com:
----------
          ID: lamp-install
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed.
     Started: 03:14:57.069948
    Duration: 702.264 ms
     Changes:   
----------
          ID: apache-config
    Function: file.managed
        Name: /etc/httpd/conf/httpd.conf
      Result: True
     Comment: File /etc/httpd/conf/httpd.conf updated
     Started: 03:14:57.774499
    Duration: 20.62 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -41,7 +41,7 @@
                   # prevent Apache from glomming onto all bound IP addresses.
                   #
                   #Listen 12.34.56.78:80
                  -Listen 80
                  +Listen 192.168.56.12:8080

                   #
                   # Dynamic Shared Object (DSO) Support
----------
          ID: php-config
    Function: file.managed
        Name: /etc/php.ini
      Result: True
     Comment: File /etc/php.ini is in the correct state
     Started: 03:14:57.795215
    Duration: 5.237 ms
     Changes:   
----------
          ID: lamp-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: Service reloaded
     Started: 03:14:58.015811
    Duration: 232.47 ms
     Changes:   
              ----------
              httpd:
                  True
----------
          ID: apache-conf
    Function: file.recurse
        Name: /etc/httpd/conf.d
      Result: True
     Comment: The directory /etc/httpd/conf.d is in the correct state
     Started: 03:14:58.248535
    Duration: 36.039 ms
     Changes:   
----------
          ID: apache-auth
    Function: pkg.installed
        Name: httpd-tools
      Result: True
     Comment: Package httpd-tools is already installed.
     Started: 03:14:58.284678
    Duration: 0.477 ms
     Changes:   
----------
          ID: apache-auth
    Function: cmd.run
        Name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
      Result: True
     Comment: unless execution succeeded
     Started: 03:14:58.286230
    Duration: 6.097 ms
     Changes:   

Summary
------------
Succeeded: 7 (changed=2)
Failed:    0
------------
Total states run:     7

3.此时在查看node2节点 http监听的ip和端口已改变

[root@linux-node2 ~]# netstat -an |more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 192.168.56.12:8080      0.0.0.0:*               LISTEN    

三、Salt的grains用法

[root@linux-node1 web]# salt 'linux-node2*' grains.items   #获取node2主机所有grains信息
[root@linux-node1 web]# salt 'linux-node2*' grains.ls      #查看grains可以调用的模块

1,使用grains获取信息(内存)

[root@linux-node1 web]# salt 'linux-node2*' grains.item mem_total
linux-node2.example.com:
    ----------
    mem_total:
        1823

注意:grains获取的信息是静态的,因为是在minion启动的时候收集上来的,比如热插拔磁盘grains数据默认是不会发生变化

2.使用grains筛选特定的minion执行任务

比如筛选集群中 系统是:CentOS系统的执行uptime命令

[root@node01 base]# salt -G 'os:CentOS' cmd.run "uptime"
node01:
     18:21:34 up 13:20,  2 users,  load average: 0.00, 0.01, 0.05
node02:
     18:21:34 up 14:49,  1 user,  load average: 0.00, 0.01, 0.05

3.grains的使用场景有很多

  • 1.过滤信息用于jinja模板
  • 2.salt筛选指定的minion执行任务
  • 3.可以收集服务器硬件信息然后格式化数据入库,再进行web展示百度有相关的开源产品
  • 4.做监控数据采集
  • 5.CMDB

至此将grains与jinja模板的使用介绍完。更多精彩文章:Saltstack相关文章

  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
广告也精彩
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: