THE TOP FILE(top文件详解)
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文件详解)相关推荐
- top与free命令详解
top与free命令详解 top命令 top命令第一行 top命令第二行 top命令第三行 top命令第四行 top命令第五行 top命令第六行 free命令 top命令 在运维面试中top命令被问到 ...
- Redis配置文件redis.conf文件详解
Redis配置文件redis.conf文件详解 唠嗑 这里面的意思只要看得差不多其实就是已经对redis有熟悉的感觉,就比如 推塔已经推到别人家的大门~~~~~~~~废话不多说直接开始了 知道大家都不 ...
- STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解
一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...
- Linux配置启动挂载:fstab文件详解
Linux配置启动挂载:fstab文件详解 [日期:2014-12-23] 来源:Linux社区 作者:aceking10 [字体:大 中 小] fstab文件介绍 fstab文件包含了你的电脑上的存 ...
- PE文件详解(教程1-7)
PE文件详解(教程1-7) ========================================= PE教程1: PE文件格式一览 PE 的意思就是 Portable Executable ...
- Delphi的单元文件详解
Delphi的单元文件详解 Delphi单元文件 1.库单元文件头:其中声明了库单元的名字. 2.Interface部分: 由保留字interface开始,结束于保留字implementation ...
- Maven的pom.xml文件详解------Environment Settings
转载自 Maven的pom.xml文件详解------Environment Settings Issue Management 使用的缺陷跟踪系统(Bugzilla,TestTrack,Clear ...
- 附005.Docker Compose文件详解
一 Docker Compose文件简介 compose文件使用yml格式,主要分为了四个区域: version:用于指定当前docker-compose.yml语法遵循哪个版本 services:服 ...
- file java详解_Java中File的实例详解
Java中File的实例详解 File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(Stri ...
- laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
<PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...
最新文章
- js 正则之检测素数
- UNIX中的Poll函数
- MPLS、SD-WAN孰优孰劣?
- 输入对5层网络迭代次数的影响
- 如何获取元素与当前可视区域顶部的距离
- 电脑吃鸡按键详细_一秒八连击的即装即用吃鸡神器-飞智蜂刺手游按键体验
- 【随笔】4.上海上港
- Mysql之子父级查询
- BAT中for循环处理某目录下的文件
- Go黑魔法之导出私有函数与私有变量
- php excel导出pdf文件,如何修复“无法加载PDF呈现库”使用PHPExcel TCPDF将Excel导出为PDF...
- pyspark 读mysql数据_spark读mysql数据
- 使用Graham扫描法获取一个平面点集的凸包
- 提高linux上socket的性能(linux优化),提高 Linux 上 socket 性能
- 【NOI2005】 瑰丽华尔兹
- 科大讯飞全球首发远场识别:智能硬件迎来新风口(此处应有掌声)
- 维度解析(第一章)- 一维
- 2023年过去一半了,Python的红利期已经过去了?
- VC++ 修改计算机名称 SetComputerName
- c语言vc6.0界面设计实例,vc6.0使用简介及C语言在6.0平台上的编程实例.ppt
热门文章
- Eclipse的正确安装使用姿势
- 【深度学习】神经网络结构搜索(NAS)与多模态
- 【机器学习】支持向量机和ensemble method的解析应用
- 【深度学习】图像数据集处理常用方法合集(部分基于pytorch)
- Python中的排序sorted(d.items(), key=lambda x: x[1])
- 幼儿园课程体系结构图_全人教育、均衡发展课程体系介绍
- java.exe闪退_tomcat7.exe闪退 解决点击startup.bat后闪退的情况 - 电脑常识 - 服务器之家...
- maven 安装_Maven的下载、安装、配置以及验证操作
- 2016年4月计算机组成原理试题答案,年4月自考计算机组成原理试题及答案.doc
- PHP 实现一个可用的redis 事务锁, 解决并发问题