2017-09-26 120 views
0

我是厨师和测试厨房的新手,我试图使用随机JSON文件作为属性或环境(最好是属性),但不幸的是我无法访问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在属性文件夹,并与内容:默认[ '目录名'] = 'sample_folder',它像魅力一样工作,但我需要使用JSON文件来存储公司范围内的参数。

你能帮我找到我做错了什么吗?

回答

0

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

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

谢谢,那很好用。 是否有使用JSON不使用default_argument道: '{ “default_attributes”:{} } ' – user3283749

+0

不,你一定要配合环境对象的架构。 – coderanger