未加星标

在salt state中使用判断、循环及变量

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!

出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/

上篇文章在state文件中使用了jinja模板,提高了书写state文件的灵活性。本篇继续学习state文件的编写。在state文件中可以使用判断、循环及变量,使大大提高了其灵活性,本篇来学习一下这些用法。

在salt state中使用判断

这个示例使用了两个minions,一个名称为stgdc1app01,另一个为stgdc2app01。在“salt的安装和配置”中介绍了如何安装和配置salt的master和minion,这里直接进入state文件的编写。本篇的目标是根据minion的fqdn名称,创建网络的配置文件,配置文件基于模板文件,在创建过程中使用了一些基于python的操作。下面就看一下具体的操作:

首先需要得到这两个minions的关于网络的grains数据,后面需要用到:

[[email protected] ~]# salt \* grains.item ip_interfaces hwaddr_interfaces stgdc2app01: ---------- hwaddr_interfaces: ---------- eno16777736: 00:0c:29:62:4d:63 lo: 00:00:00:00:00:00 ip_interfaces: ---------- eno16777736: - 192.168.71.169 - fe80::20c:29ff:fe62:4d63 lo: - 127.0.0.1 - ::1 stgdc1app01: ---------- hwaddr_interfaces: ---------- eno16777736: 00:0c:29:94:77:20 lo: 00:00:00:00:00:00 ip_interfaces: ---------- eno16777736: - 192.168.71.168 - fe80::20c:29ff:fe94:7720 lo: - 127.0.0.1 - ::1

接着在staging的环境下创建netconfig的state,就是在staging的基目录下创建netconfig文件夹,在此文件夹下继续创建一个名为files的文件夹,在files文件夹下创建名为ifcfg-eth0的文件,在netconfig文件夹下创建init.sls文件,最后文件夹的目录结构类似于如下这样:

[[email protected] staging]# tree . └── netconfig ├── files │ └── ifcfg-eth0 └── init.sls 2 directories, 2 files

init.sls文件和ifcfg-eth0文件的内容分别如下:

ifcfg-eth0

DEVICE=eth0 HWADDR={{ hwaddr }} TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=none IPADDR={{ ipaddr }} NETMASK={{ netmask }}

init.sls

{% if grains['id'].startswith('stgdc1') %} {% set netmask = '255.255.255.0' %} {% elif grains['id'].startswith('stgdc2') %} {% set netmask = '255.255.0.0' %} {% endif %} network_file: file.managed: - name: /etc/sysconfig/network-scripts/ifcfg-eth0 - source: salt://netconfig/files/ifcfg-eth0 - mode: 644 - template: jinja - context: ipaddr: {{ grains['ip_interfaces']['eno16777736'][0] }} netmask: {{ netmask }} hwaddr: {{ grains['hwaddr_interfaces']['eno16777736'].upper() }}

文件生成的大部分过程与上篇文章介绍的一致,这里我们主要关心init.sls文件中的第1行和第3行,它使用了判断语句,并且使用了Python的函数startswith,它根据minion名称的不同,设置不同的netmask。另外注意此文件的最后一行使用了Python的函数upper,它将字符串全部转换为大写。完成上述文件的编写后,便可以将state应用到minions上:

[[email protected] netconfig]# salt -L 'stgdc1app01,stgdc2app01' state.sls netconfig saltenv=staging

在应用state到minions上时,这里使用了-L命令行选项来指定应用到的minion。-L选项的意义是使用列表来指定minion,下篇会学习各种指定minions的方式。

在salt state中使用循环

仍然使用上面的minions,在staging环境中,编辑pillar文件/opt/salt/pillar/staging/user/init.sls,使其具有以下内容:

init.sls

dev_user_list: optimus: uid: 7001 passwd: '$1$Dw1TxMI7$pmeYTdmz.rlunqPd7JELR.' bumblebee: uid: 7002 passwd: '$1$ZHUeIAfq$6sJl9rHVDX2UjBH1KrPZP1' ironhide: uid: 7003 passwd: '$1$rcJAiq7y$bJzv3HzVTbeQlA3cIu1Gb1'

编辑user state的配置文件/opt/salt/staging/user/init.sls,使其具有如下内容:

init.sls

{% for user, details in pillar['dev_user_list'].iteritems() %} {{ user }}: user.present: - home: /home/{{ user }} - uid: {{ details['uid'] }} - password: {{ details['passwd'] }} - shell: /bin/bash {% endfor %} 上面文件的第一行和最后一行组成了for循环,pillar[‘dev_user_list’]中保存了一个Python字典,在使用了iteritems函数后,字典中的username保存在user变量中,其它数据保存在details变量中。可以通过和前面一样的方式来应用state到minions上。 在salt state中使用变量

其实在第一小节“在salt state中使用判断”里已经应用到了变量。在state的init.sls文件中,第2行为:

{% set netmask = '255.255.255.0' %},

这里set关键字用来设置变量,netmask作为变量名,变量值为等号后面的部分。

在使用变量时,一定不要在变量名外加引号,就像init.sls文件中第14行那样使用:

netmask: {{ netmask }}

这里前面的netmask是在context下,表示模板ifcfg-eth0中的netmask的值是从这里得到的。后面的netmask是state文件中的变量,由set关键字指定,值是等号后面的部分。

本篇学习了salt state中判断、循环及变量的使用。下篇看一下salt中指定minion的各种方式。

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

主题: 变量Python数据其实变量值
分页:12
转载请注明
本文标题:在salt state中使用判断、循环及变量
本站链接:http://www.codesec.net/view/484875.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(42)