- From: Adam Jacob <
>
- To:
- Subject: [chef] Re: Re: Re: Re: Re: Re: Re: [chef-dev] Re: ideas for chef-hackday at Chefconf, Tuesday afternoon, May 15
- Date: Wed, 25 Apr 2012 12:55:44 -0700
I have no problem with the directory structure of a rubygem. The
comment was more about what it means to distribute and share cookbooks
- rubygems are the wrong model, and the wrong ecosystem, to use inside
Chef. Doesn't mean there isn't a bunch of good stuff to crib. (Just
like there is good stuff to crib from CPAN - who doesn't want CPAN
Testers for cookbooks? I totally do.)
Adam
On Wed, Apr 25, 2012 at 12:47 PM, Bryan Berry
<
>
wrote:
>
dammit as usual, when I disagree w/ Jay, it's only because I misunderstand
>
him ;)
>
>
you deserve the Golden Spatula for sure!
>
>
this also begs the question of why we don't package our cookbooks as ruby
>
gems. I am not familiar enough with gems to know their weaknesses. Adam
>
Jacob told me on Twitter once that "we can do better" than gems, and I hope
>
he is right.
>
>
>
On Wed, Apr 25, 2012 at 9:34 PM, Jay Feldblum
>
<
>
>
wrote:
>
>
>
> Bryan,
>
>
>
> The original structure I outlined was a proposed structure for a single
>
> cookbook repo - a repo whose purpose is the development and testing of a
>
> single cookbook -, and was not a structure for a repo hosting multiple
>
> cookbooks or for a full infrastructure.
>
>
>
> In that proposed structure, the single "core" cookbook lives in a
>
> subdirectory, while the surrounding boilerplate/tests/caches live either at
>
> the top-level (e.g. the Rakefile) or in different subdirectories (e.g. the
>
> test cases). That structure means you can pull out and tarball a single
>
> subdirectory of the cookbook's repo in order to capture the self-contained
>
> cookbook, while skipping the boilerplate/tests/caches for the cookbook
>
> which
>
> are outside of that single subdirectory.
>
>
>
> There would of course be no roles, environments, data-bags, etc., in that
>
> proposed structure, since it's for developing & testing a single cookbook
>
> in
>
> isolation rather than developing & testing an infrastructure.
>
>
>
> The proposed structure mirrors the usual structure for most Ruby gems, but
>
> replacing lib/GEM-NAME/ with cookbook/COOKBOOK-NAME/ (and replacing Gemfile
>
> with Cheffile for those who are so inclined).
>
>
>
> Cheers,
>
> Jay
>
>
>
> On Wed, Apr 25, 2012 at 2:55 PM, Bryan Berry
>
> <
>
>
> wrote:
>
>>
>
>> I feel pretty strongly that everything required to test a cookbook
>
>> live within the cookbook's git repository, that each cookbook has to
>
>> be its own project. Isn't every gem its own project?
>
>>
>
>> Once something is common to various parts of your infrastructure, the
>
>> chance that it will be shared to the broader Chef community rapidly
>
>> approaches zero. This is just my experience. I have shared multiple
>
>> cookbooks but yet to share a single role, data_bag, environment or
>
>> even knife script w/ the broader Chef community.
>
>>
>
>> Let me know if I have misunderstood you.
>
>>
>
>> On Wed, Apr 25, 2012 at 8:47 PM, Jay Feldblum
>
>> <
>
>
>> wrote:
>
>> > Bryan,
>
>> >
>
>> > Thanks for the comments.
>
>> >
>
>> > The way I was thinking of it is that the individual cookbook is
>
>> > embedded in
>
>> > a larger surrounding project, so that the "core" cookbook directory
>
>> > could be
>
>> > pulled out and zipped up without much logic concerning which
>
>> > files/directories belong to the "core" cookbook and which
>
>> > files/directories
>
>> > belong to the larger surrounding project. This would make the work of a
>
>> > "rake upload" type task much easier.
>
>> >
>
>> > If, instead, everything is at the toplevel, that will require extra
>
>> > logic
>
>> > when zipping and pushing a release. But it will make the project
>
>> > structure
>
>> > simpler.
>
>> >
>
>> > I wouldn't embed everything deep down in cookbook/COOKBOOK-NAME; unless
>
>> > there's something I'm missing, I would either embed just the "core"
>
>> > cookbook
>
>> > there or keep everything at the top-level. This is for repos containing
>
>> > exactly one cookbook, following the repo-per-cookbook pattern.
>
>> >
>
>> > Either way, let me know how easy/hard it is to integrate Vagrant & Toft
>
>> > with
>
>> > the Cheffile (in case you or others plan to have one), and based on
>
>> > your
>
>> > experimental results what can be done to improve that integration.
>
>> >
>
>> > One thing I am considering is a metadata DSL method that would read the
>
>> > metadata.rb from the same directory, so you wouldn't have to spell out
>
>> > all
>
>> > the dependencies in the metadata.rb and then do so again in the
>
>> > Cheffile.
>
>> > This would follow the pattern of Bundler's gemspec DSL method. I can
>
>> > see
>
>> > this being useful for the Cheffile belonging to an individual cookbook
>
>> > repo.
>
>> >
>
>> > site "http://community.opscode.com/api/v1"
>
>> >
>
>> > # apply all the dependencies listed in ./metadata.rb
>
>> > # these all use the default source listed above
>
>> > metadata
>
>> >
>
>> > # override the source for one of the cookbooks listed in
>
>> > ./metadata.rb
>
>> > # e.g. in case we need a specific fix when developing & testing the
>
>> > cookbook
>
>> > cookbook "apache2",
>
>> > :git => "https://github.com/opscode-cookbooks/apache2",
>
>> > :ref => "be12fede2e99aff3029360df38366a3b8a34171f"
>
>> >
>
>> > Cheers,
>
>> > Jay
>
>> >
>
>> > On Wed, Apr 25, 2012 at 2:14 PM, Bryan Berry
>
>> > <
>
>
>> > wrote:
>
>> >>
>
>> >> hmm, I have something different in mind
>
>> >>
>
>> >> Jay, like we talked on the podcast, I think cookbooks need to be
>
>> >> self-contained. Here is how I think it should be laid out
>
>> >>
>
>> >> I definitely think that the Vagrantfile, Toftfile (my own invention),
>
>> >> and Cheffile should live at the cookbook/COOKBOOK-NAME/ level
>
>> >>
>
>> >> cookbook/COOKBOOK-NAME/
>
>> >> attributes/
>
>> >> definitions/
>
>> >> files/
>
>> >> libraries/
>
>> >> providers/
>
>> >> recipes/
>
>> >> resources/
>
>> >> temp/ # cache
>
>> >> cookbooks sourced by Cheffile
>
>> >> tests/ #
>
>> >> tests or test? don't know the convention
>
>> >> minitest/
>
>> >>
>
>> >> recipe1/
>
>> >>
>
>> >> some_test.rb
>
>> >>
>
>> >> some_test2.rb
>
>> >>
>
>> >> recipe2/
>
>> >>
>
>> >> . . .
>
>> >> cucumber/
>
>> >> rspec/
>
>> >> Cheffile
>
>> >> Cheffile.lock
>
>> >> Rakefile
>
>> >> Toftfile
>
>> >> # same as Vagrantfile but for toft
>
>> >> Vagrantfile
>
>> >>
>
>> >> The Cheffile at the at COOKBOOK-NAME level would be used by
>
>> >> Vagrantfile or Toftfile to source the other cookbooks needed to run
>
>> >> integration tests.
>
>> >>
>
>> >> that's my euro 0,02
>
>> >>
>
>> >> On Wed, Apr 25, 2012 at 7:53 PM, Jay Feldblum
>
>> >> <
>
>
>> >> wrote:
>
>> >> > It may be wise to structure the Git repository of tested cookbooks
>
>> >> > according
>
>> >> > to the following convention:
>
>> >> >
>
>> >> > /
>
>> >> > cookbooks/
>
>> >> > # .gitignore'd
>
>> >> > # for cookbooks installed via librarian-chef
>
>> >> > # this is an assumption librarian-chef currently makes
>
>> >> > cookbook/
>
>> >> > COOKBOOK-NAME/
>
>> >> > attributes/
>
>> >> > definitions/
>
>> >> > files/
>
>> >> > libraries/
>
>> >> > providers/
>
>> >> > recipes/
>
>> >> > resources/
>
>> >> > templates/
>
>> >> > metadata.rb
>
>> >> > test/
>
>> >> > integration/
>
>> >> > some_integration_test.rb
>
>> >> > some_other_integration_test.rb
>
>> >> > .gitignore
>
>> >> > # includes:
>
>> >> > # cookbooks/
>
>> >> > # Cheffile.lock
>
>> >> > Cheffile
>
>> >> > # to support Vagrantfile
>
>> >> > # the cookbook under test may depend on other cookbooks
>
>> >> > Cheffile.lock
>
>> >> > # .gitignore'd
>
>> >> > # don't add to git in a cookbook repo
>
>> >> > # only add to git in an infrastructure repo
>
>> >> > Rakefile
>
>> >> > # has a task for zipping up the content of
>
>> >> > cookbooks/COOKBOOK-NAME
>
>> >> > # and optionally for releasing to the Opscode Community Site
>
>> >> > Vagrantfile
>
>> >> > # if using Vagrant for testing
>
>> >> > # references cookbooks located in cookbooks/ (dependencies)
>
>> >> > and
>
>> >> > cookbook/ (under test)
>
>> >> >
>
>> >> > If people think this is a good idea, I may add intelligence to
>
>> >> > Librarian-Chef's git source to try to find the cookbook inside
>
>> >> > cookbook/COOKBOOK-NAME/ if it can't find the cookbook at the
>
>> >> > top-level
>
>> >> > of
>
>> >> > the git repo. However, for now, people can always use the format:
>
>> >> >
>
>> >> > cookbook "COOKBOOK-NAME",
>
>> >> > :git => "git://github.com/user/COOKBOOK-NAME",
>
>> >> > :path => "cookbook/COOKBOOK-NAME"
>
>> >> >
>
>> >> > Cheers,
>
>> >> > Jay
>
>> >> >
>
>> >
>
>> >
>
>
>
>
>
--
Opscode, Inc.
Adam Jacob, Chief Customer Officer
T: (206) 619-7151 E:
Archive powered by MHonArc 2.6.16.