saltstack-配置管理-yaml与jinja

前面我们研究了远程执行现在我们就来看看配置管理方面的东西,以前研究saltstatck研究完远程执行就完了。现在我们来看看配置管理,当然配置管理也是saltstack的核心系统
以下是官网翻译介绍:
Salt包含了一个强壮且灵活的配置管理框架,它建立在远程执行的核心功能之上。这个框架在minion上执行,通过渲染语言(rendering language)指定states文件,可轻松配置上万台主机。
states文件?这是什么鬼

OK,其它states是saltstack当中的配置语言,我们如果需要实现一些功能的话就需要去编写states sls文件,(states sls 描述状态配置的文件)。辨析sls文件都是YAML语法也支持python语法。

查看所有的states列表
[root@localhost salt]# salt '*' sys.list_state_modules
client1.roddypy.com:
    - acl
    - alias
    - alternatives
    - archive
    - artifactory
    - at
    - blockdev
    - buildout
    - cloud
    - cmd
    - composer
    - cron
    - disk
    - environ
    - event
    - file
查看具体的function用法
[root@localhost salt]# salt '*' sys.list_state_functions iptables
client1.roddypy.com:
    - iptables.append
    - iptables.chain_absent
    - iptables.chain_present
    - iptables.delete
    - iptables.flush
    - iptables.insert
    - iptables.mod_aggregate
    - iptables.set_policy
[root@localhost salt]#
查看具体function配置方法

这个就是一个好的样例,我们编写states文件可以参考这个来操作

[root@localhost salt]# salt '*' sys.state_doc iptables
client1.roddypy.com:
    ----------
    iptables:
         
        Management of iptables
        ======================
         
        This is an iptables-specific module designed to manage Linux firewalls. It is
        expected that this state module, and other system-specific firewall states, may
        at some point be deprecated in favor of a more generic `firewall` state.
         
            httpd:
              iptables.append:
                - table: filter
                - chain: INPUT
                - jump: ACCEPT
                - match: state
                - connstate: NEW
                - dport: 80
                - proto: tcp
                - sport: 1025:65535
                - save: True
配置主机hosts并分发到所有的minion
[root@localhost salt]# mkdir /etc/salt/states
[root@localhost salt]#cd  /etc/salt/states
[root@localhost states]# cp /etc/hosts ./
[root@localhost states]# vim  hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.22  www.baidu.com
192.168.2.22  www.roddypy.com
[root@localhost states]# vim hosts_file.sls 
  /etc/hosts:
    file.managed:
      - source: salt://states/hosts
      - user: root
      - group: root
      - mode: 644
      - backup: minion       是否备份\不写就不备份
[root@localhost states]#
[root@localhost states]# salt '*' state.sls states.hosts_file
client1.roddypy.com:
----------
          ID: /etc/hosts
    Function: file.managed
      Result: True
     Comment: File /etc/hosts updated
     Started: 22:25:48.197580
    Duration: 11.568 ms
     Changes:   
              ----------
              diff:
                  ---  
                  +++  
                  @@ -1,2 +1,4 @@
                   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
                   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
                  +192.168.1.22  www.baidu.com
                  +192.168.2.22  www.roddypy.com
 
Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

在minion上查看hosts文件及备份情况

1
2
3
4
5
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.22  www.baidu.com
192.168.2.22  www.roddypy.com
[root@localhost etc]# pwd
/var/cache/salt/minion/file_backup/etc        备份的默认路径,备份会以文件名+时间的方式进行备份
[root@localhost etc]# ll
总用量 8
-rw-r--r-- 1 root root 158 12月  8 22:25 hosts_Tue_Dec_08_22:25:48_208084_2015
-rw-r--r-- 1 root root 216 12月  8 22:29 hosts_Tue_Dec_08_22:29:26_774690_2015
[root@localhost etc]#

Ok,我们的最步就先了解到这边,当然还可以通过前面我们了解到的模块 salt的cp模块也可以完成文件传输。但是我们现在是基于states来传递的
好了,再来看看YAML,我们前面也多次提到了YAML。MD,我以前就是搞不懂这YAML是什么玩意,然后就写不来。后来发现,其实挺简单的。

什么是YAML?

维基上第一句话说的是“是一个可读性高,用来表达资料序列的格式。” OH ,其实就是一种格式,说白一点就像你写一个配置文件一样如"file:/etc/passwd"类似
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递回缩写。这点和GNU一样

编写YAML

初期对于新手来说,这个最要命。不注意以下操作就要出错,本人以前是经常犯错。

  • 1.缩进要用2个空格,不能用tab,更不能tab和空格混用。以前写Python tab顺手了,就常犯错。

  • 2.YAML是用空格来表示分层结构的,如第一层,(前面2个空格) 第二层,(前面4个空格)

  • 3.YAML的冒号是用来表示一个K/V的字典的。

例: file: roddyname 就表示 {'file':'roddyname'}

还可以写成

file:
roddyname

4.YAML使用短横线表示列表。

例:

  • -user1
  • -user1
  • -user3

对应的表示就是['user1','user2','user3']
如果看到这种表达方式

username:

  • -user1
  • -user1
  • -user3

对应的表示就是{'username':['user1','user2','user3']}

我靠,好清晰,对了撒。这下子搞懂了,唉,以前不晓得杂个写。呵呵

什么是jinja?

尼玛,我就觉得这个名字有点日怪,以前读的时候扭捏了半天。这又是个什么鬼?
jinja是一种模板引擎,是基于Python的,相当于php 的 smarty。哦,基本上了解了。可以基于这个引擎提前做一些操作嘛

salt默认是用的yaml_jinja的渲染器。

工作流程:
  • 1.通过jinjia2模板引擎处理SLS
  • 2.调用YAML解析器
如何使用:

在salt中 ,files和templates都使用了file这个states模块。但是是通过template这个标识来指明是模板还是普通文件。
OK。看个他的样例

[root@localhost states]# salt '*' sys.state_doc file | more
        client1.roddypy.com:
            ----------
            file:
             
            Operations on regular files, special files, directories, and symlinks
            =====================================================================
             
            Salt States can aggressively manipulate files on a system. There are a number
            of ways in which files can be managed.
             
            Regular files can be enforced with the :mod:`file.managed
            <salt.states.file.managed>` state. This state downloads files from the salt
            master and places them on the target system. Managed files can be rendered as a
            jinja, mako, or wempy template, adding a dynamic component to file management.
            An example of :mod:`file.managed <salt.states.file.managed>` which makes use of
            the jinja templating system would look like this:
             
                /etc/http/conf/http.conf:
                  file.managed:
                - source: salt://apache/http.conf
                - user: root
                - group: root
                - mode: 644
                - template: jinja
                - defaults:                       指定变量
                    custom_var: "default value"
                    other_var: 123
                {% if grains['os'] == 'Ubuntu' %}     就是jinja的if判断方法
                - context:
                    custom_var: "override"
                {% endif %}
jinja的使用方法:
  • 1.在file模块sls文件中使用template :- template: jinja
  • 2.在模板文件里面使用变量{{变量名}}
  • 3.指定变量列表:

"- defaults:
SERVER:'192.168.1.2'
PORT: '22'
"

使用grains: {{grains['hostname']}}

使用模块: {{ salt'network.hw_addr' }}

使用pillar: {{ pillar['apache']['port'] }} 两边有空格

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容