Usando gli attributi nello chef Solo JSON
Domanda
È possibile specificare i valori degli attributi nello chef Solo's JSON?Ho un solista.json con una lista di esecuzione e vorrei specificare gli attributi lì.La documentazione del cuoco unico sembra indicare che dovrebbe essere possibile per me fare qualcosa come:
{
"hostname": {
"test": "value2"
},
"default_attributes": {
"hostname": {
"test": "value3"
}
},
"override_attributes": {
"hostname": {
"test": "value4"
}
},
"default": {
"hostname": {
"test": "value5"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
.
Tuttavia, ogni volta che provo ad accedere al valore nella mia ricetta:
p node['hostname']['test']
.
Ottenere il valore definito in Attributi / Default.rb, e se non lo definisco lì, ottengo un valore NIL indietro.
C'è un modo per fare riferimento a questi valori?
Soluzione
L'unico livello di attributi che è possibile memorizzare nei dati del nodo è normal
, tutto il resto viene ripristinato all'inizio della convergenza e ricostruita da ruoli, ambienti e libri di cucina.Vuoi qualcosa di simile a questo:
{
"normal": {
"hostname": {
"test": "something"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
. Altri suggerimenti
Ho provato a utilizzare l'esempio sopra per impostare gli attributi in un file JSON per lo chef-Solo, e il blocco "normal": {...}
è stato completamente ignorato.L'elenco di esecuzione è stato letto, ma gli attributi non sembrano mai funzionare.
Il mio comando è:
chef-solo -c /path/to/config_file.rb -j /path/to/file.json
.
Il mio file JSON:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"normal": {
"my_cookbook": {
"git_branch": "staging"
}
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
.
Durante i converge, lo chef è andato dritto ai valori predefiniti all'interno del attributes/default.rb
.I valori JSON sono inseriti correttamente?Finora, la mia unica soluzione alternativa è stata quella di creare una nuova ricetta per ogni attributo "git_branch":
che voglio testato con Chef-Solo e aggiungendo quella lista di esecuzione aggiornata a un diverso file JSON.Essenzialmente, copiando un'intera ricetta per modificare un singolo valore node.normal['my_cookbook']['git_branch']
.Inutile dire che questa non dovrebbe essere una soluzione.
Utilizzo chef 14.0.202
Follow up:
Non impostare il livello di precedenza dell'attributo all'interno del file JSON con i lavori Solo Chef.Il JSON dovrebbe sembrare simile a questo:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"my_cookbook": {
"git_branch": "staging"
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
.
Non incluso il "normal": {...}
o "default_attributes": {...}
, ecc., passerà gli attributi per lo chef-solato da utilizzare.