【问题标题】:Access JSON values using Chef and test-kitchen使用 Chef 和 test-kitchen 访问 JSON 值
【发布时间】:2017-09-27 02:21:40
【问题描述】:

我是 Chef 和 Test-kitchen 的新手,我正在尝试使用随机 JSON 文件作为属性或环境(最好是属性),但不幸的是我无法从食谱中访问 JSON 值。

我正在使用以下目录结构:

uat
├── attributes
│   ├── dev.json
│   ├── .kitchen
│   │   └── logs
│   │       └── kitchen.log
│   └── prod.json
├── Berksfile
├── Berksfile.lock
├── chefignore
├── environments
│   ├── dev.json
│   └── prod.json
├── Gemfile
├── Gemfile.lock
├── .kitchen
│   ├── default-windows.yml
│   └── logs
│       ├── default-windows.log
│       └── kitchen.log
├── .kitchen.yml
├── metadata.rb
└── recipes
    ├── default.rb
    ├── prep.rb
    └── service_install.rb

这是.kitchen.yml

---
driver:
  name: machine
  username: sample_user
  password: sample_pass
  hostname: 192.168.1.102
  port: 5985

provisioner:
  name: chef_zero
  json_attributes: true
  environments_path: 'environments/dev'

platforms:
  - name: windows

suites:
  - name: default
    run_list:
      - recipe[uat::default]

这是 dev.json

{
    "groupID": "Project-name",
    "directoryName": "sample_folder",
    "environmentType": "UAT",
}

这是配方prep.rb

directory "C:/Users/test/#{node['directoryName']}" do
  recursive true
  action :create
end

如果我在属性文件夹中创建 something.rb 并且内容为:default['directoryName'] = 'sample_folder',它就像一个魅力,但我需要使用一个 JSON 文件来在公司范围内存储参数。

请你帮我找出我做错了什么。

【问题讨论】:

    标签: json chef-infra test-kitchen


    【解决方案1】:

    所以有几个问题。首先,environments_path 指向一个文件夹,而不是特定文件,所以应该只是environments/。其次,它必须是一个实际的环境对象,有关模式的描述,请参阅https://docs.chef.io/environments.html#json。第三,您需要将环境实际应用到测试节点:

    provisioner:
      # Other stuff ...
      client_rb:
        chef_environment: dev
    

    【讨论】:

    • 谢谢,效果很好。有没有办法在不使用 default_argument 的情况下使用 JSON:{ "default_attributes": { } }
    • 不,你必须匹配环境对象的架构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2021-02-02
    • 2017-01-30
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多