INTRODUCTION

(1)top能实现一组机器部署不同业务环境,达到相互协调配合的工作。
(2)top文件包含了计算机之间的映射关系以及配置文件角色的文件。
(3)默认top文件被命名为top.sls,总是存在于包含state文件的目录层顶部,这种目录结构被称为目录树。


A BASIC EXAMPLE

Top文件包含3个组件:
  Environment:包含一组状态文件的状态树目录配置系统
  Target:一组机器将有一组状态适用于他们。
  State files:应用于target匹配机器的一组state文件列表,
上面3个组件之间的关系;
  Environment包含Target,Target包含state files
示例场景:
  base: #从定义好的base环境的根目录里面加载sls文件
   'web*': #从所有minion里面匹配到minion_id以web开头的minion
    - apache #应用apache.sls文件里面定义的状态配置


ENVIRONMENTS

包含一组sls文件的目录结构,通常只使用一个base环境,如果你需要使用多个版本的状态树的话建议你使用多环境


GETTING STARTED WITH TOP FILES

开始使用top文件,每一个environment环境被定义在file_roots这个配置项里面
示例:

1 file_roots:
2   base:
3     - /srv/salt
4 top文件内容定义:
5 base:
6   '*':
7     - core
8     - edit

View Code

top文件定义的路径在/srv/salt下面,core和edit也应当位于该目录下


MULTIPLE ENVIRONMENTS

在一些生产环境中,它需要不同版本的state状态文件,实现分级部署,譬如测试,预发布,线上等
示例:

file_roots:

1   dev:
2     - /srv/salt/dev
3   qa:
4     - /srv/salt/qa
5   prod:
6     - /srv/salt/prod

View Code

top文件内容示例:

 1 dev:
 2   'webserver*':
 3     - webserver
 4   'db*':
 5     - db
 6 qa:
 7   'webserver*':
 8     - webserver
 9   'db*':
10     - db
11 prod:
12   'webserver*':
13     - webserver
14   'db*':
15     - db

View Code

在上面的例子中,每一个environment都需要配置一个目录,里面都包含一个top文件,里面配置有target与sls的映射关系。
如果需要从dev环境逐步配置到prod环境,只需要将sls文件逐级进行拷贝到对应的环境目录中即可。


CHOOSING AN ENVIRONMENT TO TARGET

为environment指定匹配一个或一组有效的minion,设置合理的match规则,确保指定的minion应用指定的sls配置,使用state.show_top可以查看minion上的environment适配情况
在salt, salt-call or salt-ssh命令行中,可以在运行时指定salt environment,利用saltenv参数来指定,如果只是在单一环境中运行可以使用这样的运行方式:salt '*' state.highstate saltenv=prod。
注意:不是所有的函数都接收saltenv作为参数


SHORTHAND

如果在一组target中只分配了一个sls文件,可以使用如下简洁的配置方法

 1 base:
 2   '*': global
 3 dev:
 4   'webserver*': webserver
 5   'db*':        db
 6 qa:
 7   'webserver*': webserver
 8   'db*':        db
 9 prod:
10   'webserver*': webserver
11   'db*':        db

View Code


ADVANCED MINION TARGETING

minion target进阶使用
上面的例子中minion的匹配上是使用glob的,top文件中默认的匹配是复合类型匹配的,大多数情况下二者是不可区分的,但有一种minion ID中包含空格的时候,由于复合表达式是逐字进行匹配的,所以会匹配异常,这种情况下需要声明glob
示例:

1 base:
2   'minion 1':
3     - match: glob
4     - foo  

View Code

以下是target可设置的匹配类型:
  glob 通配符,glob表示式匹配一个或多个minion,根据minion ID匹配,例如minion123或minion*。
  pcre perl正则表达式匹配,例如web[0-3].domain.com
  grain 匹配grains变量,使用通配符的方式,例如kernel:Linux or kernel:*BSD
  grain_pcre 使用pcre的方式匹配grains变量,kernel:(Free|Open)BSD
  list 使用逗号分隔的minion列表清单,minion1,minion2,minion3
  pillar 使用通配符的方式匹配pillar变量,role:webserver or role:web*
  pillar_pcre 使用pcre的方式匹配pillar变量,role:web(server|proxy
  pillar_exact不使用pcre和通配的方式匹配pillar,例如:role:webserver
  ipcidr 根据子网或IP地址进行匹配,例如172.17.0.0/16 or 10.2.9.80
  data 匹配值保持在目标数据库里面,需要创建和使用data执行模块
  range 使用范围值匹配,依赖额外的模块
  compound 使用复合类型匹配模式
  nodegroup 定义在master配置文件中的复合表达式组

示例:

 1 base:
 2     'nag1* or G@role:monitoring':    #glob匹配以nag1开头的minion和grains role设置为monitoring的minion
 3         - nagios.server
 4
 5     '*':                            #匹配所有minion
 6         - ldap-client
 7         - networking
 8         - salt.minion
 9
10     '^(memcache|web).(qa|prod).loc$':    #使用正则方式匹配,以memcache或web开头,中间qa|prod,以loc结尾的minion ID匹配
11         - match: pcre
12         - nagios.mon.web
13         - apache.server
14
15     'os:Ubuntu':                    #使用grains的变量匹配方法
16         - match: grain
17         - repos.ubuntu
18
19     'os:(RedHat|CentOS)':            #使用grains正则的匹配方式
20         - match: grain_pcre
21         - repos.epel
22
23     'foo,bar,baz':                    #使用列表的方式
24         - match: list
25         - database
26
27     'somekey:abc':                    #使用pillar变量的方式
28         - match: pillar
29         - xyz

View Code


HOW TOP FILES ARE COMPILED

运行指定salt environment的highstate时,master会从top文件中分配指定的minion配置数据,minion再负责具体执行。
当不指定salt运行环境的时候,minion会遍历每一个environment,每一个顶层文件都会被处理以确定哪些sls将要运行在哪些minion上,默认情况下每个环境中的sls配置都会被合并在一起。
当时用gitfs的时候,利用分支作为环境目录,可能会导致意外的情况发生,这时候可以使用top_file_merging_strategy置same强制每一个环境使用自己使用自己的top文件,而不是合并掉。
参考链接:http://hxzqlh.com/2016/05/07/Salt-States-%E5%9F%BA%E6%9C%AC%E6%B3%95-%E5%9B%9B/

当使用多个环境时,不必为每个环境创建一个顶级文件。最容易维护的方法是将一个单独的top文件放在基本环境中。下面的minion配置选项如何影响top文件编译时没有环境指定,建议遵循以下四个环节来了解这些选项的工作:

  state_top_saltenv
  top_file_merging_strategy
  env_order
  default_top


TOP FILE COMPILATION EXAMPLES

/etc/salt/master:

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

View Code

/srv/salt/base/top.sls:

1 base:
2   '*':
3     - base1
4 dev:
5   '*':
6     - dev1
7 qa:
8   '*':
9     - qa1

View Code

/srv/salt/dev/top.sls:

 1 base:
 2   'minion1':
 3     - base2
 4 dev:
 5   'minion2':
 6     - dev2
 7 qa:
 8   '*':
 9     - qa1
10     - qa2

View Code

注意:qa环境没有配置top文件

SCENARIO 1 - 指定dev环境
  指定dev环境运行,仅dev2 sls文件运行在minion2上,minion1无sls文件应用
  指定base环境运行,base2 sls文件将运行在所有minion上
  如果指定qa环境运行,执行high将会出现错误

SCENARIO 2 - 不指定环境运行,TOP_FILE_MERGING_STRATEGY设置为merge
  base1, dev1, and qa1 state状态文件将会被应用到所有的minion中,如果qa环境没有被定义在/srv/salt/base/top.sls中,那么qa环境中将不会有任何state文件被应用

SCENARIO 3 - 不指定环境运行,TOP_FILE_MERGING_STRATEGY设置为same
  在2016.11.0这一版中,same没有描述中的那么有效,新的版本已经修复
  base1将应用于所有minion中,相应的dev2将应用于minion2
  如果不设置default_top或设置为base,那么qa1 sls将应用在所有minion上,如果default_top设置为dev,那么qa1和qa2将应用到所有minion中

SCENARIO 4 - 不指定环境运行,TOP_FILE_MERGING_STRATEGY设置为MERGE_ALL
  那么所有环境中的top都会被应用,base1被应用在所有minion上,base2将被应用在minion1上,对于dev环境,dev1会被应用在所有minion中,dev2将被应用在minion2中,qa1和qa2将被应用在所有minion中,注意qa1不会被应用两次

转载于:https://www.cnblogs.com/solitarywares/p/7638013.html

THE TOP FILE(top文件详解)相关推荐

  1. top与free命令详解

    top与free命令详解 top命令 top命令第一行 top命令第二行 top命令第三行 top命令第四行 top命令第五行 top命令第六行 free命令 top命令 在运维面试中top命令被问到 ...

  2. Redis配置文件redis.conf文件详解

    Redis配置文件redis.conf文件详解 唠嗑 这里面的意思只要看得差不多其实就是已经对redis有熟悉的感觉,就比如 推塔已经推到别人家的大门~~~~~~~~废话不多说直接开始了 知道大家都不 ...

  3. STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解

    一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...

  4. Linux配置启动挂载:fstab文件详解

    Linux配置启动挂载:fstab文件详解 [日期:2014-12-23] 来源:Linux社区 作者:aceking10 [字体:大 中 小] fstab文件介绍 fstab文件包含了你的电脑上的存 ...

  5. PE文件详解(教程1-7)

    PE文件详解(教程1-7) ========================================= PE教程1: PE文件格式一览 PE 的意思就是 Portable Executable ...

  6. Delphi的单元文件详解

    Delphi的单元文件详解 Delphi单元文件 1.库单元文件头:其中声明了库单元的名字. 2.Interface部分:   由保留字interface开始,结束于保留字implementation ...

  7. Maven的pom.xml文件详解------Environment Settings

    转载自  Maven的pom.xml文件详解------Environment Settings Issue Management 使用的缺陷跟踪系统(Bugzilla,TestTrack,Clear ...

  8. 附005.Docker Compose文件详解

    一 Docker Compose文件简介 compose文件使用yml格式,主要分为了四个区域: version:用于指定当前docker-compose.yml语法遵循哪个版本 services:服 ...

  9. file java详解_Java中File的实例详解

    Java中File的实例详解 File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(Stri ...

  10. laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...

    <PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...

最新文章

  1. js 正则之检测素数
  2. UNIX中的Poll函数
  3. MPLS、SD-WAN孰优孰劣?
  4. 输入对5层网络迭代次数的影响
  5. 如何获取元素与当前可视区域顶部的距离
  6. 电脑吃鸡按键详细_一秒八连击的即装即用吃鸡神器-飞智蜂刺手游按键体验
  7. 【随笔】4.上海上港
  8. Mysql之子父级查询
  9. BAT中for循环处理某目录下的文件
  10. Go黑魔法之导出私有函数与私有变量
  11. php excel导出pdf文件,如何修复“无法加载PDF呈现库”使用PHPExcel TCPDF将Excel导出为PDF...
  12. pyspark 读mysql数据_spark读mysql数据
  13. 使用Graham扫描法获取一个平面点集的凸包
  14. 提高linux上socket的性能(linux优化),提高 Linux 上 socket 性能
  15. 【NOI2005】 瑰丽华尔兹
  16. 科大讯飞全球首发远场识别:智能硬件迎来新风口(此处应有掌声)
  17. 维度解析(第一章)- 一维
  18. 2023年过去一半了,Python的红利期已经过去了?
  19. VC++ 修改计算机名称 SetComputerName
  20. c语言vc6.0界面设计实例,vc6.0使用简介及C语言在6.0平台上的编程实例.ppt

热门文章

  1. Eclipse的正确安装使用姿势
  2. 【深度学习】神经网络结构搜索(NAS)与多模态
  3. 【机器学习】支持向量机和ensemble method的解析应用
  4. 【深度学习】图像数据集处理常用方法合集(部分基于pytorch)
  5. Python中的排序sorted(d.items(), key=lambda x: x[1])
  6. 幼儿园课程体系结构图_全人教育、均衡发展课程体系介绍
  7. java.exe闪退_tomcat7.exe闪退 解决点击startup.bat后闪退的情况 - 电脑常识 - 服务器之家...
  8. maven 安装_Maven的下载、安装、配置以及验证操作
  9. 2016年4月计算机组成原理试题答案,年4月自考计算机组成原理试题及答案.doc
  10. PHP 实现一个可用的redis 事务锁, 解决并发问题