1

我们的一个应用程序使用 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'
    }
  }
)

鉴于角色属性优先于说明书属性,这应该有效。对??

现在我想用厨房来测试一下。在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角色的一部分的事实......

任何帮助表示赞赏。

最好的。

4

2 回答 2

2

将你的角色放在 test/integration 目录下,它会被 chef-zero 自动拾取:

├── .kitchen.yml
└── test
    └── integration
        └── roles
            └── myrole.json

然后在你的厨房文件中创建两个测试套件,一个使用食谱食谱,另一个使用角色:

suites:
  - name: default
    run_list:
      - recipe[mycookbook::default]
  - name: withrole
    run_list:
      - role[myrole]

使用角色管理 tomcat 属性的示例:

于 2015-08-27T00:15:20.857 回答
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。谢谢!

于 2015-08-27T12:42:49.487 回答