2017-09-26 20 views
0

Je suis nouveau à Chef et Test-cuisine et j'essaye d'utiliser le fichier JSON aléatoire comme attribut ou environnement (de préférence l'attribut), mais malheureusement je ne peux pas accéder au JSON les valeurs des recettes.Accéder aux valeurs JSON en utilisant Chef et test-cuisine

J'utilise la structure de répertoire suivant:

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 

C'est le .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] 

C'est le dev.json:

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

C'est la recette prep.rb:

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

Si je crée something.rb dans les attributs dossier et contenu: default [ 'directoryName'] = 'sample_folder', il fonctionne comme un charme, mais je dois utiliser un fichier JSON qui permet de stocker les paramètres à l'échelle de l'entreprise.

Pourriez-vous m'aider s'il vous plaît à trouver ce que je fais mal.

Répondre

0

Donc, quelques problèmes. Tout d'abord, les points environments_path dans un dossier, pas le fichier spécifique, alors cela devrait être environments/. Deuxièmement, il doit s'agir d'un objet d'environnement réel, voir https://docs.chef.io/environments.html#json pour une description du schéma. Troisièmement, vous devez appliquer l'environnement au nœud de test:

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

Merci, cela a bien fonctionné. Est-il possible d'utiliser le JSON sans utiliser le default_argument: '{ « default_attributes »: {} }' – user3283749

+0

Non, vous devez faire correspondre le schéma de l'objet de l'environnement. – coderanger