[chef] Re: Re: Re: Re: knife diff and JSON files in environments/ & roles/


Chronological Thread 
  • From: John Keiser < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: knife diff and JSON files in environments/ & roles/
  • Date: Mon, 20 Aug 2012 11:22:52 -0700

What is cookbook_dir in your Chef config file?

knife-essentials assumes a local directory structure like this (assuming you have environments, data_bags and roles):

cookbooks/
data_bags/
environments/
roles/

Your Chef configuration needs to point cookbook_dir at the cookbooks directory, and it will try to find the roles directory in cookbook_dir/../roles.  This structure is fairly typical for people who are managing their cookbooks and other information in source control, but I'm sure there's a great variety out there :)

--John

On Mon, Aug 20, 2012 at 10:59 AM, Morgan Blackthorne < " target="_blank"> > wrote:
I just installed knife-essentials and did a "knife diff" and got:

:~/svn/OPS/chef-repo/roles$ knife diff
ERROR: Errno::ENOENT: No such file or directory - /var/chef/cookbooks/var/chef
:~/svn/OPS/chef-repo/roles$

Do I need to create some directories for it to work or?

--
~*~ StormeRider ~*~

"Every world needs its heroes [...] They inspire us to be better than we are. And they protect from the darkness that's just around the corner."

(from Smallville Season 6x1: "Zod")

On why I hate the phrase "that's so lame"... http://bit.ly/Ps3uSS



On Mon, Aug 20, 2012 at 10:43 AM, Denis Haskin < " target="_blank"> > wrote:
Thanks.  Sorry if I was unclear; I do understand that knife-essentials is just presenting me with a filesystem-ish view of the REST resources, not an actual filesystem.

What's common practice?  Using JSON files instead of ruby, as you suggest?


--
Denis Haskin




On Mon, Aug 20, 2012 at 12:34 PM, John Keiser < " target="_blank"> > wrote:
Hi Denis.  Glad you like the tool!

It's option (a): Chef takes the .rb files and turns them into JSON before we send them.  But a brief note: the Chef server is just a REST interface (which admittedly uses the JSON format) and is not actually a filesystem.  knife-essentials imposes that structure: it maps the server's REST interface into a virtual filesystem composed of .json files (i.e. the environments/blah.json "file" corresponds to HTTP GET/PUT/DELETE operations on /environments/blah).  It turns out this gives us a powerful toolset, and is a super convenient way to think about the system, but just FYI, that's an invention of knife-essentials.

The issue you are seeing is that knife diff assumes that your local filesystem looks the same as the virtual mapping (it assumes a certain directory structure, and assumes that files are .json).  For many people this is true, but not everyone (i.e. .rb files).  I've filed an issue for its lack of .rb support, because I still need to weigh the complexity costs of supporting multiple file formats against the benefits of .rb files.

Solution: If you're OK with JSON instead of RB files, the simplest solution is to:

1. Run "knife download roles environments", which will download all your current environments and roles as .json files.
2. Verify that the .json files actually represent when you wrote in the .rb files, and delete the .rb files to get rid of confusion.

I'd love to hear whether this solution works for you.

Thanks!

--John

On Mon, Aug 20, 2012 at 8:24 AM, Denis Haskin < " target="_blank"> > wrote:
When I use knife diff from the knife-essentials[1] gem (which is awesome, by the way), it shows me a lot of JSON files in the environments/ and roles/ folders that don't exist in my local filesystem (e.g. only on the chef server) [2].  But I have corresponding .rb files for each .json file that is indicated as "missing".

This is confusing... either (a) chef creates the .json files when I upload environments or roles to the server, from the .rb files, or (b) these are left over on the server from an old version of chef.

Anybody know which it is?  Is there some way I can fix this?

Thanks!


[2] (portion of output of knife diff --name-status)
D environments/obanyc_testrl.json
D environments/obanyc_prod.json
D environments/obanyc_dev.json
D environments/obanyc_demo.json
D environments/_default.json
D environments/obanyc_replay.json
D environments/staging.json
D environments/obanyc_qa.json
D environments/obanyc_staging.json
D roles/queuep.json
D roles/app.json
D roles/1ie.json
D roles/tds.json
D roles/2ie.json
D roles/queues.json
...etc for all roles...

--
Denis Haskin








Archive powered by MHonArc 2.6.16.

§