- From: Daniel DeLeo <
>
- To:
- Subject: [chef] Re: Re: chef-provisioning / knife-zero
- Date: Fri, 29 May 2015 10:56:07 -0700
On Friday, May 29, 2015 at 10:45 AM, Mark Harrison wrote:
>
As I understand it (and one of the creators/maintainers of
>
chef-provisioning please step in and correct me if I'm wrong)
>
chef-provisioning's intended use is for the initial bootstrapping of the
>
machine, and it would 'replace' commands like knife ec2 server create. The
>
initial converge when creating the machine would then use something like
>
the chef-client cookbook to set up chef client against the chef server and
>
you would use daemonized/cronned/manual chef client runs on the server
>
itself against the chef server. After the initial bootstrap is complete,
>
chef-provisioning itself would never run a converge unless the machine
>
needed to be recreated.
Chef Provisioning knows when you’ve updated the run_list or node attributes,
and will reconverge a machine if it detects that one of these things has
changed. Otherwise, it assumes the node is up to date. I don’t think it can
tell if cookbook have been updated outside of Chef Provisioning (e.g., you
run Chef Provisioning, update some cookbooks, then re-run Chef Provisioning).
>
>
Obviously this is a little different than your use case, and it sounds
>
similar to something I have done at
>
mivok.net/2015/05/19/chef-provisioning-ssh.html
>
(http://mivok.net/2015/05/19/chef-provisioning-ssh.html). However, in the
>
examples there, I have just set 'converge true' in the machine definition
>
to run a chef converge every time on all machines, and ignored the problem
>
of what to do if you only want to converge one machine.
>
>
I suspect your idea of using environment variables, or providing json
>
attributes on the command line with something like "chef-client -z -j
>
<(echo '{"converge_node": "mynode"}')", is the way to go for now. Compare
>
that value with the current node name and add 'converge true' to the
>
machine definition if it matches. The other nodes won't converge (but chef
>
provisioning will make sure they exist).
>
>
On Fri, May 29, 2015 at 6:03 AM, Roland Moriz
>
<
>
>
(mailto:
)>
>
wrote:
>
> Hi everyone!
>
>
>
> I'm currently maintaining a couple of small (<25 nodes) knife-solo[1] and
>
> knife-zero[2] setups.
>
>
>
> Typically the setups are too small to run a traditional chef-server
>
> setup, also the owners don't want to rely on third party services (data
>
> protection, latency) - so hosted chef is not a solution.
>
>
>
> Recently I've re-evaluated the current state of chef-provisioning and it
>
> looks way better than a couple of months ago. However I'm not sure how
>
> this is meant to replace the "knife-*" solutions out there: While setting
>
> up a couple of machines with attributes/run-list is very nice using the
>
> Chef-Provisioning Chef-DSL, my customers usually don't want to
>
> (re-)converge *all* nodes but run chef-client explicitly on one (or more)
>
> nodes.
>
>
>
> Example provisioning recipe:
>
> https://gist.github.com/rmoriz/f293ca1402591c5469ae
>
>
>
> I can run "bundle exec chef-client -z provisioning/test.rb" and the
>
> instances will be provisioned, bootstrapped and converged. awesome!
>
> But how do I later use chef-zero to converge e.g. *only* the nginx node?
>
> When I re-run the recipe, all nodes will be converged.
>
>
>
> As far as I understand, I could add some attributes or even (ab)use local
>
> environment variables to execute only specific resources of the
>
> chef-provisinioning cookbook, but I'm sure this is not the right way to
>
> do it, right?
>
>
>
> A "one node per recipe"-approach seems to be very non-DRY to me and
>
> breaks all the nice "10.times do |i| … end" examples to create a bunch of
>
> identical nodes.
You could hypothetically have each component in your cluster have its own
recipe, then include_recipe each of them into a build_the_whole_cluster.rb
recipe. Though that would prevent you from building the entire cluster
simultaneously, it would create things in a component-wise fashion. Also you
wouldn’t be able to converge just one of the N machines of a given type.
>
>
>
> I'm missing something like knife-zero in the mix, unfortunately it
>
> currently use a different port for knife-zero forwarding which currently
>
> makes it incompatible.
>
>
>
> Any hints? Thanks :)
>
>
>
> best regards
>
> Roland
>
>
>
> [1] https://github.com/matschaffer/knife-solo
>
> [2] https://github.com/higanworks/knife-zero
>
--
Daniel DeLeo
Archive powered by MHonArc 2.6.16.