我们的一个应用程序使用gunicorn,并通过厨师食谱配置。
这本食谱有一些属性,其中一个属于gunicorn版本:
grep 'version' attributes/default.rb
default['myapp']['gunicorn']['version'] = '19.1.1'
仅当节点是特定角色的一部分时,我才想使用版本19.3.0
。我创建了一个角色并给它一个属性:
cat ../../roles/gunicorn-19.3.0.rb
name 'gunicorn-19.3.0'
default_attributes(
'mcnulty' => {
'gunicorn' => {
'version' => '19.3.0'
}
}
)
鉴于roles属性优先于cookbook属性,此应工作。右??
现在我想用厨房测试一下。在我们的kichen.yml
我们已经有default
套件,我复制并创建了gunicorn-19.3.0
套件:
- name: gunicorn-19.3.0
roles_path: '../../roles'
run_list:
- recipe[apt]
- recipe[build-essential]
- recipe[myapp]
attributes: &attributes
myapp:
gunicorn:
query:
timeout: 5
workers: 2
sockdir: /var/run/myapp
web:
timeout: 5
workers: 2
sockdir: /var/run/myapp
现在我无法弄清楚如何模仿这个主机是gunicorn-19.3.0
角色的一部分......
感谢任何帮助。
最佳。
答案 0 :(得分:2)
将您的角色放在test / integration目录下,它将由chef-zero自动选取:
├── .kitchen.yml
└── test
└── integration
└── roles
└── myrole.json
然后在你的厨房文件中创建两个测试套件,一个使用cookbook配方,另一个使用角色:
suites:
- name: default
run_list:
- recipe[mycookbook::default]
- name: withrole
run_list:
- role[myrole]
使用角色管理tomcat属性的示例:
答案 1 :(得分:0)
谢谢马克,这就是现场:
cat test/integration/roles/gunicorn-19-3-0.json
{
"name": "gunicorn-19-3-0",
"override_attributes": {
"myapp": {
"gunicorn": {
"version": "19.3.0"
}
}
}
}
cat .kitchen.yml
- name: gunicorn-19.3.0
#roles_path: '../../roles'
run_list:
- recipe[apt]
- recipe[build-essential]
- recipe[python]
- recipe[myapp::default]
- role[gunicorn-19-3-0]
attributes: &attributes
myapp:
gunicorn:
query:
timeout: 5
workers: 2
sockdir: /var/run/myapp
web:
timeout: 5
workers: 2
sockdir: /var/run/myapp
安装kitchen converge
之后,安装了gunicorn 19.3.0。
谢谢!