一个基于配置编译/管理工具(http://yaml.org)和模板引擎(http://jinja.pocoo.org)的配置文件,用于生成devop任务。

agile_conf的Python项目详细描述


##agile conf文档(wip)

[agile_conf](https://github.com/tly1980/agile_conf)-一个基于配置文件(以[yaml]格式(http://yaml.org)和模板引擎(以[jinja2]格式(http://jinja.pocoo.org))的配置编译/管理工具,用于生成devop任务(或者1,其他的事情)更简单。


["sed"](http://en.wikipedia.org/wiki/sed)当你想要做一些稍微复杂的查找/替换时,离完美的工具还很远。现代的[模板处理器](http://en.wikipedia.org/wiki/template_processor)在以下方面做得更好:

**将变量转换为任何形式的基于文本的输出**(html、xml、json、yaml、ini等等)。


由([jinja2](http://jinja.pocoo.org)提供支持,[敏捷配置](https://github.com/tly1980/agile_conf)支持所有内置的([jinja2](http://jinja.pocoo.org)模板功能,例如:
模板inheritance、include等。[agile_conf](https://github.com/tly1980/agile_conf)为devops提供了一些有用的过滤器:

1。仅限于
2。aws_user data
(它可以将[aws userdata](http://docs.aws.amazon.com/awsec2/latest/userguide/user-data.html)转换为[cloudformation stack template](http://aws.amazon.com/cloudformation/aws cloudformation templates/)
3。除此之外,我认为我们应该认真对待配置/部署脚本。与其在运行时一起执行脚本/配置生成,我更希望在**执行之前,我们可以手动**编译脚本/配置。

这样我们可以在运行部署脚本/配置之前查看它们,为了清楚地了解将要发生的事情并避免出现您不想要的意外。

我还认为我们应该在[git](http://git-scm.com)或任何其他scm中管理这些编译的部署脚本/配置,因此,我们可以像对待代码一样认真对待它们。
并且因为它们是由scm管理的,我们将拥有完整的历史记录、更改之间的差异和权限控制。



创建一个项目,并使用[git](http://git-scm.com)或其他scm来管理它。
1.定义变量和模板。
2。编译工件:任何基于文本的配置/脚本。
3.将您的更改(变量、模板以及编译的脚本和配置)提交到[git](http://git-scm.com)或其他scm存储库。
4.使用bamboo或jenkins签出已编译的脚本,并对其进行配置和执行。
或者,只要您有权限,就可以在本地运行这些脚本。
5。使编译的脚本失效,如果不需要,则进行配置(应相应地销毁资源,使用预编译的销毁脚本。)

\请先[安装](https://pip.pypa.io/en/latest/installing.html)它。

在本地克隆Boilplate。
```
Git克隆https://github.com/tly1980/agile_conf_boilplate.git~/workspace/agile_conf_boilplate
```

您可以使用相同的目录结构创建自己的boilplate存储库。使用boilplate创建一个新项目。

````
$AGC C创建single_ec2 my_ec2--bo_repo=~/workspace/agile_conf_boilplate/
创建项目:my_ec2
使用样板文件/users/mindriven/workspace/agile_conf_boilplate/single_ec2
```

注意:您可以用```--bo u repo``指定boilplate_repo,或者在environment变量中设置它:``agc\u boil``.

在项目中穿行。

``我的ec2``项目(从单个ec2 boilplate构建)具有以下结构。


请阅读注释。

`````
我的ec2
/u脚本
/cfn
module.yaml#cloudformation脚本模板
"渲染"按字母顺序进行
"0"前缀使其成为第一个要渲染的前缀。
"perf"性能测试生成的conf-perf.yaml配置。
"prod"生产生成的conf-prod.yaml配置。
"uat"用户用户用户的conf-uat.yaml配置验收生成。
makefile
project.yaml;可以跨不同模块使用的公共变量
readme.md
```


每个模块都可以有自己的模板。
在模块内部,将呈现名称中包含".tpl"后缀的任何文件。

这是避免循环依赖关系的简单方法。

project.yaml``,``conf.yaml```.

module.yaml```中定义了模块特定变量。


conf.yaml```中定义的变量,可以在"projects.yaml``和"module.yaml``和templates"中引用。

运行命令时,要用`````````````````````````````````````````````yaml






名字}}-{conf.number}
```

模板:
使用`` inspect``命令。

```
:m3.大
产品:m3.medium
uat:t2.micro
产品全名:hello-ec2-uat-1


[cfn]
映像ID:ami-d50773ef
实例类型:t2.micro
密钥名称:my key
netenv:uat
子网ID:
产品:子网产品子网
uat:subnet uatsubnet
子网安全组:
产品:
-sg-prod1
-sg-prod2
uat:
-sg-uat1
-sg-uat2
子网sg组:前端
标记:
-键:名称
值:hello-ec2-uat-1
-键:环境
值:uat
``````

3。创建配置生成。


run follow命令将生成生成。
必须为conf文件提供``--conf````,这样命令工具就知道要使用哪个conf文件。

````
agc build--conf conf uat.yaml
````


如下:

``yaml
name:uat
netenv:uat将部署到uat子网
number:1
````

n/*.tpl
0廑userdata.sh
ec2.json
module.yaml
create廑stack.sh廑compiled from廑script/create廑stack.sh.tpl
kill廑stack.sh廑compiled from廑script/kill廑stack.sh.tpl
`````

filters

[敏捷配置](https://github.com/tly1980/agile-conf)内置jinja2过滤器。



这里是来自"single-ec2"boilplate项目的"aws-userdata"过滤器的示例。

``bash
echo"hello world"
echo"这是{{conf.name}-{conf.number}project:{project.product恚fullname}"
```


它将被呈现为:
``bash
echo"hello world"
echo"这是项目的[uat-1]:hello-ec2-uat-1"
```

``````````ec2.json.tpl``中的代码如下。

```
"userdata":{{[[u build`dst`u folder,"0`u userdata.sh"]`aws`u userdata},
````


它使用一个``aws`u userdata```过滤器将``0`u userdata.sh``转换为以下代码。

``````u build`dst`folder``是模块的输出目标文件夹,就在``0userdata.sh``所处的位置。

您可以看到shell脚本被转换成cloudformation json结构:

```
"userdata":{
"fn::base64":{
"fn::join":[
",
[
"echo""hello world"\n",
"echo"这是项目的[uat-1]:hello-ec2-uat-1"\n"
]
]
}
}
}
``````

<另一个过滤器是``jsonify```.

标记的定义如下:

``yaml
标记:
-key:name
值:{{project.product_fullname}
-key:environment
值:{{conf.netenv}
````

它是如何使用``标记``的:

```
"标记":{{tags jsonify}
```


"value":"uat"}
]
```

对于调试

```
agc inspect--conf conf-xxx.yaml
````

**命令:inspect**

`````
````
agc inspect--conf conf-xxx.yaml
```
**快捷方式:如果在bash rc文件中放入以下shell脚本,则使用**



``bash
using(){
env cmd="env agc_conf=conf$1.yaml"
shift
actual_cmd="$@"
$envcmd$actual_cmd
}
````

检查
````

```
conf-prod.yaml

build-perf:
agc-build——conf-conf-prod.yaml

````

您可以使用如下生成文件:

`` makefile
生成单元:
agc build
```

,这样您可以在不同的conf xxx.yaml之间切换:



1。```使用uat使build``
2。```使用prod make build``
3。```使用perf-make-build```

**ps**:````使用```可以使用所有带有``--conf``选项的命令。

**命令:create**


>从样板存储库创建项目。

````
agc在运行此命令之前创建${bo-name}${project}
```

您应该设置环境变量``agc\u boil``,
或将其与``--bo-repo``一起使用。

>;--bo-repo或agc-boil只能设置为指向本地路径。
>;您不能将其设置为git/http url,但是…(<)>
**命令:id**

``agc id--conf-conf-uau-uat.yaml````或````使用uat agc id`````



` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `输出构建将是。

例如:
````
$使用uat agc,其中
/用户/思维驱动/工作区/游戏敏捷配置/我的ec2/\u构建/uat/1
```

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量