簡體   English   中英

Chef-solo傳遞自定義json

[英]chef-solo passing custom json

我拼命試圖找出如何在Chef-Solo中應用一些節點變量 否則,我必須繼續進行調配。

步驟1 ,我登錄到預配置框:

$ vagrant ssh
$ sudo chef-solo -o virtualenv::addsite -j /vagrant/resources/attr_test.json 

第2步 ,我有一個JSON文件傳遞試圖在配方中運行的數據。 我相信這具有高於默認優先級的node.normal模式?

這是我目前在attr_test.json擁有的內容

{
    "username": "vagrant",
    "params": {
        "vhost": "fake"
    },
    "user": {
        "name": "vagrant"
    },
    "overwrite_attributes": {
        "username": "vagrant"
    }
}

這是食譜,但我無法獲取node.default數據進行填充。

virtualenv / recipes / addsite.rb

bash 'mkvirtualenv' do
    cwd "/home/#{node.default['username']}/projects/"
    user node.default['username']
    environment ({
        'HOME' => ::Dir.home(node.default['username']),
        'USER' => node.default['username']
    })
    code <<-EOH
        source /usr/local/bin/virtualenvwrapper.sh \
        mkvirtualenv --no-site-packages --distribute #{node.default['params']['vhost']}
    EOH
end

錯誤

Chef::Exceptions::ValidationFailed
----------------------------------
Option user must be a kind of [String, Integer]!  You passed {}.


Cookbook Trace:
---------------
  /var/chef/cookbooks/virtualenv/recipes/addsite.rb:8:in `block in from_file'
  /var/chef/cookbooks/virtualenv/recipes/addsite.rb:6:in `from_file'

有誰知道如何做到這一點? 我需要在JSON_中json_type傳遞Chef :: EnvironmentChef :: Role嗎?

更新

這是我用Chef :: Node,Chef :: Environment,Chef :: Role等嘗試過的另一件事。我仍然收到“ You Passed {}”,看不到用戶名或其他項目:(

{
   "json_class": "Chef::Node",
   "chef_type": "node",
   "name": "node_test",
   "normal": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
    "normal_attributes": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
   "override_attributes": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
    "override": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
   "default": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
    "default_attributes": {
        "username": "vagrant",
        "params": {
            "vhost": "fakeit"
        }
    },
   "automatic": {},
   "run_list": [
   ]
}

我勾選了正確的答案。 這是我的JSON,因此可以幫助任何人! 問題是RECIPE:

{“ json_class”:“ Chef :: Node”,“ chef_type”:“ node”,“ name”:“ node_test”,“ normal”:{“ username”:“ vagrant”,“ params”:{“ vhost”: “ fakeit”}},“ override”:{},“ default”:{},“ automatic”:{},“ run_list”:[]}

  • 要寫入/設置一個值,我只使用node.default["value"]
  • 要讀取值,我只使用node["value"]

僅在為配方中的屬性設置默認值時,才應使用node.default['whatever']

要使用atrtibute,只需使用node['whatever']

我認為錯誤是由於'USER'環境變量得到一個空值引起的。

此代碼應與您的第一個json文件一起正常工作。

bash 'mkvirtualenv' do
    cwd "/home/#{node['username']}/projects/"
    user node['username']
    environment ({
        'HOME' => ::Dir.home(node['username']),
        'USER' => node['username']
    })
    code <<-EOH
        source /usr/local/bin/virtualenvwrapper.sh \
        mkvirtualenv --no-site-packages --distribute node['params']['vhost']
    EOH
end

我認為不需要在node['params']['vhost']周圍使用#{} ,因為它不在需要內插的字符串中,但是如果HereDoc語法失敗,則可能會出錯,請讀取它。

您是否已設置“ node ['params'] ['vhost']”屬性?

如果沒有問題,請嘗試設置“ default_attributes”而不是“ overwrite_attributes”,因為沒有要覆蓋的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM