[chef] trouble configuring and running chef-zero


Chronological Thread 
  • From:
  • To: chef < >
  • Subject: [chef] trouble configuring and running chef-zero
  • Date: Tue, 28 Jan 2014 23:49:33 +0000


Hello chefizens,

I'm having some difficulty configuring and running chef-zero.

I'm not using vagrant in this case. What I want to do is to clone my chef git
repo on a test host, and run chef-zero locally on that host against a 
cookbook.
I have 2 directories that contain cookbooks in my chef-repo. Thus I want to
configure a cookbook_path in a config file.

I'm pointing chef-client (in local mode / "chef-zero" ) to a config file that
I think is correct (based on chef-solo experience), but I'm having problems. 
The
first problem occurs when chef-zero can't find a "nodes" directory. The second
problem occurs when I work-around this "missing" nodes directory, and 
chef-zero
can't find the cookbook.


Here's the "solo.rb" config file I'm using:

$ cat ~/solo.rb
root = File.absolute_path(File.dirname(__FILE__))
cookbook_path [ root + '/chef-repo/cookbooks', root + 
'/chef-repo/site-cookbooks' ]
environment_path          root + "/chef-repo/environments"
data_bag_path             root + "/chef-repo/data_bags"
encrypted_data_bag_secret "/home/kallen/.chef/encrypted_data_bag_secret"
role_path                 root + "/chef-repo/roles"


(Yes, we have "site-cookbooks". A pattern that got established early on. We're
working to redesign our workflow :)


$ cd ~/dev/git

The cookbook is in fact here:

$ $ ls -ld chef-repo/site-cookbooks/zero-test
drwxrwxr-x 5 kallen kallen 106 Jan 28 23:34 chef-repo/site-cookbooks/zero-test

$ chef-client -l debug -c ~/solo.rb -z -o "recipe[zero-test]"
..snip
[2014-01-28T23:11:46+00:00] DEBUG: Client key is unspecified - skipping 
registration
[2014-01-28T23:11:46+00:00] DEBUG: Building node object for 
dev-kallen.foobarbaz.net
[2014-01-28T23:11:46+00:00] DEBUG: Initiating GET to 
http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:11:46+00:00] DEBUG: ---- HTTP Request Header Data: ----
[2014-01-28T23:11:46+00:00] DEBUG: Accept: application/json
[2014-01-28T23:11:46+00:00] DEBUG: Accept-Encoding: 
gzip;q=1.0,deflate;q=0.6,identity;q=0.3
[2014-01-28T23:11:46+00:00] DEBUG: GET nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:11:46+00:00] DEBUG:
--- RESPONSE (404) ---
{
  "error": [
    "Object not found: http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net";
  ]
}
--- END RESPONSE ---
[2014-01-28T23:11:46+00:00] DEBUG: ---- HTTP Status and Header Data: ----
[2014-01-28T23:11:46+00:00] DEBUG: HTTP 1.1 404 Not Found
[2014-01-28T23:11:46+00:00] DEBUG: content-type: application/json
[2014-01-28T23:11:46+00:00] DEBUG: server: chef-zero
[2014-01-28T23:11:46+00:00] DEBUG: connection: close
[2014-01-28T23:11:46+00:00] DEBUG: content-length: 100
[2014-01-28T23:11:46+00:00] DEBUG: ---- End HTTP Status/Header Data ----
[2014-01-28T23:11:46+00:00] INFO: HTTP Request Returned 404 Not Found: Object 
not found: http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:11:46+00:00] DEBUG: Initiating POST to 
http://127.0.0.1:8889/nodes
[2014-01-28T23:11:46+00:00] DEBUG: ---- HTTP Request Header Data: ----
[2014-01-28T23:11:46+00:00] DEBUG: Content-Type: application/json
[2014-01-28T23:11:46+00:00] DEBUG: Accept: application/json
[2014-01-28T23:11:46+00:00] DEBUG: Accept-Encoding: 
gzip;q=1.0,deflate;q=0.6,identity;q=0.3
[2014-01-28T23:11:46+00:00] DEBUG: Content-Length: 181
[2014-01-28T23:11:46+00:00] DEBUG: POST nodes
--- POST BODY ---
{"name":"dev-kallen.foobarbaz.net","chef_environment":"_default","json_class":"Chef::Node","automatic":{},"normal":{},"chef_type":"node","default":
{},"override":{},"run_list":[]}
--- END POST BODY ---
[2014-01-28T23:11:46+00:00] ERROR: #<Errno::ENOENT: No such file or directory 
- /home/kallen/chef-repo/nodes>



So, for fun I create the dir /home/kallen/chef-repo/ and make a symlink from
/home/kallen/dev/chef-repo/nodes to /home/kallen/chef-repo/nodes.  But why is 
it
looking in that location for the nodes directory? Is there a way to configure
the path?

This time, it's able to affect URI /nodes/dev-kallen.foobarbaz.net because by
hand I created that directory outside of my dev workflow.  But, this time it
errors on finding the cookbook.


$ chef-client -l debug -c ~/solo.rb -z -o "recipe[zero-test]"
..snip
[2014-01-28T23:14:15+00:00] DEBUG: Client key is unspecified - skipping 
registration
[2014-01-28T23:14:15+00:00] DEBUG: Building node object for 
dev-kallen.foobarbaz.net
[2014-01-28T23:14:15+00:00] DEBUG: Initiating GET to 
http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Request Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: Accept: application/json
[2014-01-28T23:14:15+00:00] DEBUG: Accept-Encoding: 
gzip;q=1.0,deflate;q=0.6,identity;q=0.3
[2014-01-28T23:14:15+00:00] DEBUG: GET nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:14:15+00:00] DEBUG:
--- RESPONSE (404) ---
{
  "error": [
    "Object not found: http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net";
  ]
}
--- END RESPONSE ---
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Status and Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: HTTP 1.1 404 Not Found
[2014-01-28T23:14:15+00:00] DEBUG: content-type: application/json
[2014-01-28T23:14:15+00:00] DEBUG: server: chef-zero
[2014-01-28T23:14:15+00:00] DEBUG: connection: close
[2014-01-28T23:14:15+00:00] DEBUG: content-length: 100
[2014-01-28T23:14:15+00:00] DEBUG: ---- End HTTP Status/Header Data ----
[2014-01-28T23:14:15+00:00] INFO: HTTP Request Returned 404 Not Found: Object 
not found: http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net
[2014-01-28T23:14:15+00:00] DEBUG: Initiating POST to 
http://127.0.0.1:8889/nodes
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Request Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: Content-Type: application/json
[2014-01-28T23:14:15+00:00] DEBUG: Accept: application/json
[2014-01-28T23:14:15+00:00] DEBUG: Accept-Encoding: 
gzip;q=1.0,deflate;q=0.6,identity;q=0.3
[2014-01-28T23:14:15+00:00] DEBUG: Content-Length: 181
[2014-01-28T23:14:15+00:00] DEBUG: POST nodes
--- POST BODY ---
{"name":"dev-kallen.foobarbaz.net","chef_environment":"_default","json_class":"Chef::Node","automatic":{},"normal":{},"chef_type":"node","default":{},"override":{},"run_list":[]}
--- END POST BODY ---
[2014-01-28T23:14:15+00:00] DEBUG:
--- RESPONSE (201) ---
{
  "uri": "http://127.0.0.1:8889/nodes/dev-kallen.foobarbaz.net";
}
--- END RESPONSE ---
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Status and Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: HTTP 1.1 201 Created
[2014-01-28T23:14:15+00:00] DEBUG: content-type: application/json
[2014-01-28T23:14:15+00:00] DEBUG: server: chef-zero
[2014-01-28T23:14:15+00:00] DEBUG: connection: close
[2014-01-28T23:14:15+00:00] DEBUG: content-length: 70
[2014-01-28T23:14:15+00:00] DEBUG: ---- End HTTP Status/Header Data ----
[2014-01-28T23:14:15+00:00] DEBUG: Extracting run list from JSON attributes 
provided on command line
[2014-01-28T23:14:15+00:00] DEBUG: Applying attributes from json file
[2014-01-28T23:14:15+00:00] DEBUG: Platform is amazon version 2013.09
[2014-01-28T23:14:15+00:00] WARN: Run List override has been provided.
[2014-01-28T23:14:15+00:00] WARN: Original Run List: []
[2014-01-28T23:14:15+00:00] WARN: Overridden Run List: [recipe[zero-test]]
[2014-01-28T23:14:15+00:00] INFO: Run List is [recipe[zero-test]]
[2014-01-28T23:14:15+00:00] INFO: Run List expands to [zero-test]
[2014-01-28T23:14:15+00:00] INFO: Starting Chef Run for 
dev-kallen.foobarbaz.net
[2014-01-28T23:14:15+00:00] INFO: Running start handlers
[2014-01-28T23:14:15+00:00] INFO: Start handlers complete.
[2014-01-28T23:14:15+00:00] DEBUG: Initiating POST to 
http://127.0.0.1:8889/reports/nodes/dev-kallen.foobarbaz.net/runs
...snip for brevity
[2014-01-28T23:14:15+00:00] DEBUG: Synchronizing cookbooks
resolving cookbooks for run list: ["zero-test"]
[2014-01-28T23:14:15+00:00] DEBUG: Initiating POST to 
http://127.0.0.1:8889/environments/_default/cookbook_versions
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Request Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: Content-Type: application/json
[2014-01-28T23:14:15+00:00] DEBUG: Accept: application/json
[2014-01-28T23:14:15+00:00] DEBUG: Accept-Encoding: 
gzip;q=1.0,deflate;q=0.6,identity;q=0.3
[2014-01-28T23:14:15+00:00] DEBUG: Content-Length: 31
[2014-01-28T23:14:15+00:00] DEBUG: POST 
environments/_default/cookbook_versions
--- POST BODY ---
{"run_list":["zero-test"]}
--- END POST BODY ---
[2014-01-28T23:14:15+00:00] DEBUG:
--- RESPONSE (412) ---
{
  "error": [
    "No such cookbook: zero-test"
  ]
}
--- END RESPONSE ---
[2014-01-28T23:14:15+00:00] DEBUG: ---- HTTP Status and Header Data: ----
[2014-01-28T23:14:15+00:00] DEBUG: HTTP 1.1 412 Precondition Failed
[2014-01-28T23:14:15+00:00] DEBUG: content-type: application/json
[2014-01-28T23:14:15+00:00] DEBUG: server: chef-zero
[2014-01-28T23:14:15+00:00] DEBUG: connection: close
[2014-01-28T23:14:15+00:00] DEBUG: content-length: 59
[2014-01-28T23:14:15+00:00] DEBUG: ---- End HTTP Status/Header Data ----
[2014-01-28T23:14:15+00:00] INFO: HTTP Request Returned 412 Precondition 
Failed: No such cookbook: zero-test

================================================================================
Error Resolving Cookbooks for Run List:
================================================================================


Missing Cookbooks:
------------------
No such cookbook: zero-test




Last, here's something that works 100%, except that it requires me to symlink
the cookbook I want to run from the dir site-cookbooks to cookbooks.

$ cd ~/dev/git/chef-repo/

$ cd cookbooks/; ln -s ../site-cookbooks/zero-test zero-test; cd ..
$ rm -rf nodes
$ chef-client -l debug -z -o "recipe[zero-test]"

It works. The nodes dir is created, the node data created therein, and the
cookbook runs. Hrmpf?


Thanks in advance!
kallen




Archive powered by MHonArc 2.6.16.

§