STATES TUTORIAL, PART 4(第三部分)

STATES TUTORIAL, PART 4(第三部分)

使用file_roots配置state文件环境


SALT FILESERVER PATH INHERITANCE

salt文件服务器路径解密

示例:

1 # In the master config file (/etc/salt/master)
2 file_roots:
3   base:
4     - /srv/salt
5     - /mnt/salt-nfs/base

注意:
  当定义的多路径之中存在相同的文件引用路径,则以先匹配到的为准。

############################################################

这里有一个值得挖掘和探讨的东西,FILESERVER_BACKEND选项,这个选项的具体配置说明在介绍master配置文件选项就有所说明,这里结合当前的教程内容进行一下挖掘。

FILESERVER_BACKEND

用于设置文件服务器后端配置的,支持roots(本地环境),git(git环境),以及二者结合的方式,文件的查找使用从上到下进行匹配的方式,先到先得。

示例:

1 fileserver_backend:
2   - roots
3   - git

############################################################

ENVIRONMENT CONFIGURATION

配置一个多环境,下例就是一个类似开发测试线上的例子,利用文件查找机制,将处于开发的环境放置在dev目录。

示例:

 1 file_roots:
 2   base:
 3     - /srv/salt/prod
 4   qa:
 5     - /srv/salt/qa
 6     - /srv/salt/prod
 7   dev:
 8     - /srv/salt/dev
 9     - /srv/salt/qa
10     - /srv/salt/prod


REQUESTING FILES FROM SPECIFIC FILESERVER ENVIRONMENTS

从指定的文件服务器环境获取文件

具体的使用方法参考前面的文件服务器章节的讲解:

  https://docs.saltstack.com/en/2016.11/ref/file_server/environments.html#file-server-environments

PRACTICAL EXAMPLE

示例:

/srv/salt/prod/top.sls:

1 base:
2   ‘web*prod*‘:
3     - webserver.foobarcom
4 qa:
5   ‘web*qa*‘:
6     - webserver.foobarcom
7 dev:
8   ‘web*dev*‘:
9     - webserver.foobarcom

/srv/pillar/top.sls:

1 base:
2   ‘web*prod*‘:
3     - webserver.prod
4   ‘web*qa*‘:
5     - webserver.qa
6   ‘web*dev*‘:
7     - webserver.dev

/srv/pillar/webserver/prod.sls:

1 webserver_role: prod

/srv/pillar/webserver/qa.sls:

1 webserver_role: qa

/srv/pillar/webserver/dev.sls:

1 webserver_role: dev

/srv/salt/prod/webserver/foobarcom.sls:

 1 {% if pillar.get(‘webserver_role‘, ‘‘) %}
 2 /var/www/foobarcom:
 3   file.recurse:
 4     - source: salt://webserver/src/foobarcom
 5     - env: {{ pillar[‘webserver_role‘] }}
 6     - user: www
 7     - group: www
 8     - dir_mode: 755
 9     - file_mode: 644
10 {% endif %}

以上示例包含一下几个重要的内容:

  (1)sls文件环境的配置问题,将开发,测试,上线三个环境利用file_roots进行配置,不同的环境关联的目录结构不同。
  (2)具体环境中对minion角色的匹配问题,这里得结合grains和minion id做适当的匹配。
  (3)pillar环境与state环境的关联以及与minion的关联问题,控制pillar变量在环境中的使用范围问题。
  (4)sls文件分布问题,当一个sls文件需要经历开发环境,测试环境,线上环境的时候,sls文件最先应放置在相当于示例的/srv/salt/dev/webserver/src/foobarcom位置,

      这个位置只有处于dev环境中的minion能被匹配到。



使用指定的pillar变量环境部署一个top环境,相当于执行一个highstate:

  salt --pillar ‘webserver_role:dev‘ state.apply

如果只是仅仅的想只部署这一个环境的换,需要指定state.apply的参数sls文件
  salt --pillar ‘webserver_role:dev‘ state.apply webserver.foobarcom

当完成开发阶段,需要进入测试环境的时候,需要将sls文件移动到qa目录下,指定以下命令:
  salt --pillar ‘webserver_role:qa‘ state.apply webserver.foobarcom

如果已经完成测试需要部署到正式环境中的话,可以使用以下命令:
  salt --pillar ‘webserver_role:prod‘ state.apply webserver.foobarcom

注意:

  当你把文件移动到base中的prod目录中,属于正式环境的一部分,但是在qa和dev环境中仍然是可用的,这是由于salt使用了继承的功能,在开发环境中,base目录环境也在dev环境的搜索范围里面,这是面向对象的一个特点。


CONTINUE LEARNING

接下来你可以学习关于state的系统性详细介绍



思考:
(1)部署的时候需要指定类似--pillar ‘webserver_role:prod‘这样的变量指定,为什么?
    因为在sls文件中有一个pillar[‘webserver_role‘]获取变量的内容,且使用了env参数,譬如你设置为dev环境的时候,pillar需要为sls提供在dev环境中指定的变量内容,这段内容实际上就是将sls文件与pillar变量环境连接起来。

(2)如果不指定上一个问题中pillar的变量环境,我们可以怎么做实现相同的目的呢?
    在上面的例子送,执行前指定pillar环境显得不那么友好,所以建议在pillar设置与file_roots类似的配置结构,虽然看起来配置相对冗杂,但是结构关联关系会比较严谨,不易出现误操作的情况。

示例:

 1 pillar_roots:
 2   base:
 3     - /srv/salt/pillar/prod
 4   qa:
 5     - /srv/salt/pillar/qa
 6     - /srv/salt/pillar/prod
 7   dev:
 8     - /srv/salt/pillar/dev
 9     - /srv/salt/pillar/qa
10     - /srv/salt/pillar/prod

可以通过pillarenv=testing的方式指定pillar的变量环境。

时间: 2024-09-30 19:21:18

STATES TUTORIAL, PART 4(第三部分)的相关文章

STATES TUTORIAL, PART 1 - BASIC USAGE(第二部分)

STATES TUTORIAL, PART 1 - BASIC USAGE(第二部分) SETTING UP THE SALT STATE TREE在master设置file_roots 示例: 1 file_roots: 2 base: 3 - /srv/salt 重启master pkill salt-master salt-master -d PREPARING THE TOP FILE 配置top入口文件 1 base: 2 '*': 3 - webserver 说明:top文件可以起到

STATES TUTORIAL(第四部分)

MOD AGGREGATE STATE RUNTIME MODIFICATIONS 略 ALTERING STATES 略 FILE STATE BACKUPS 可以在多个地方设置minion端的文件备份.示例: backup_mode: minion 或 1 /etc/ssh/sshd_config: 2 file.managed: 3 - source: salt://ssh/sshd_config 4 - backup: minion BACKED-UP FILES 备份文件的位置位于mi

STATES TUTORIAL(第五部分)

EXTENDING EXTERNAL SLS DATA 扩展额外的sls数据,当一个sls文件需要被局部修改的时候,譬如当一个state文件需要添加watch条件的时候. THE EXTEND DECLARATION 通过extend扩展sls数据,一般通过include导入一个ID declaration.示例: 1 include: 2 - http 3 - ssh 4 5 extend: 6 apache: 7 file: 8 - name: /etc/httpd/conf/httpd.c

Android Application Fundamentals——Android应用程序基础知识

Application Fundamentals--应用程序基础知识 Key classes--关键类 Activity Service BroadcastReceiver ContentProvider Intent In this document--在这篇文章中 Application Components--应用程序组件 Activating components: intents--激活组件:意图 Shutting down components--关闭组件 The manifest

【Linux探索之旅】第四部分第一课:压缩文件,解压无压力

内容简介 1.第四部分第一课:压缩文件,解压无压力 2.第四部分第二课:SSH连接,安全快捷 压缩文件,解压无压力 最近小编因为换工作,从南法搬到巴黎.折腾了很久. 网络一直用的是公共的无线网,信号不行.无线上网的box盒子已经说通网了,但我觉得墙上的线有问题.反正就是用不了自己的告诉WiFI盒子. 而且还要继续找房子,刚上班第一周,诸多事情,所以最近停更了很久.不好意思. 不过,现在又重新开始啦.木啊哈哈哈~ 百足之虫,死而不僵... 第四部分我们会讲Linux网络方面的一些知识点.既然讲到网

Android API 中文 ListView

正文 一.结构 public class RatingBar extends AbsSeekBar java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView android.widget.ListView 直接子类 ExpandableListView(使用竖滚动

写好英语科技论文的诀窍: 主动迎合读者期望,预先回答专家可能质疑--周耀旗教授

写好英语科技论文的诀窍:主动迎合读者期望,预先回答专家可能质疑 周 耀 旗印地安那大学信息学院印地安那大学医学院计算生物学和生物信息中心 以此文献给母校中国科技大学五十周年校庆 前  言 我的第一篇英语科技论文写作是把在科大的学士毕业论文翻译成英文.当我一九九零年从纽约州立大学博士毕业时,发表了20多篇英语论文. 但是,我对怎样写高质量科技论文的理解仍旧处于初级阶段,仅知道尽量减少语法错误.这是因为大多数时间我都欣然接受我的博士指导老师Dr. George Stell和Dr. Harold Fr

Cocos2dx-lua开发之c++绑定到lua

一. 简单介绍 文章介绍是在实际的游戏开发项目中,将自定义的C++类绑定到lua中,能够让lua调用c++类.会创建一个python脚本,执行python脚本会让自动将我们的c++类绑定到lua.生成我们要的代码.文章会介绍配置环境.编写脚本.测试类.实际项目中调用,以及一些遇到的问题 二.兵马未动粮草先行 当前我用的是quicklua 3.3 win7系统.下载需要的工具 可以先看一下 \tools\tolua \README.mdown里面有详细介绍,而且都有下载地址 我现在是win系统,翻

Promise的源码实现(完美符合Promise/A+规范)

Promise是前端面试中的高频问题,我作为面试官的时候,问Promise的概率超过90%,据我所知,大多数公司,都会问一些关于Promise的问题.如果你能根据PromiseA+的规范,写出符合规范的源码,那么我想,对于面试中的Promise相关的问题,都能够给出比较完美的答案. 我的建议是,对照规范多写几次实现,也许第一遍的时候,是改了多次,才能通过测试,那么需要反复的写,我已经将Promise的源码实现写了不下七遍. Promise的源码实现 /** * 1. new Promise时,需