- From: Miquel Torres <
>
- To:
- Subject: [chef] Re: Re: Chef Deployment System for Swift - a proposed design - feedback?
- Date: Fri, 29 Apr 2011 09:46:51 +0200
- Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=CsLGfkQPquHTd8JhdKJQBLQMUfjjzFon8A/cHI+NtuK1OZ/d1tXzq6XmhFuBv7pUeC IP4emLke7Tw+1+p+HNl/23v1dVoVAQO+BRMEXmEi+o/kKeTgIpZUFGYk4tDWIT0jTUR9 BMXVqEmYC/nXH2M/0XMCid9E9Cj6g9v4IKIVI=
Hi,
I think both Spiceweasel and Judd's Swift tool are very interesting.
However, IMHO they are going the wrong road, each cooking their own
home-made brew.
Eric's approach sounds much more useful, and more similar to what I
intend to implement for LittleChef. Looking forward to your project
announcement!
I will explain what I think the community should be doing in this area
in a new thread.
Cheers,
Miquel
2011/4/28 Eric Heydrick
<
>:
>
On Wed, Apr 27, 2011 at 4:45 PM, Judd Maltin
>
<
>
>
wrote:
>
> Hi Folks, (sorta cross posted with
>
>
)
>
>
>
> I've been hacking away at creating an automated deployment system for Swift
>
> using Chef. I'd like to drop a design idea on you folks (most of which
>
> I've
>
> already implemented) and get feedback from this esteemed group.
>
>
>
> My end goal is to have a "manifest" (apologies to Puppet) which will define
>
> an entire swift cluster, deploy it automatically, and allow edits to the
>
> ingredients to manage the cluster. In this case, a "manifest" is a
>
> combination of a chef databag describing the swift settings, and a
>
> spiceweasel infrastructure.yaml file describing the OS configuration.
>
>
>
> Ingredients:
>
> - swift cookbook with base, proxy and server recipes. proxy nodes also
>
> (provisionally) contain auth services. storage nodes handle object,
>
> container and account services.
>
> -- Base recipe handles common package install, OS user creation. Sets up
>
> keys.
>
> -- Proxy recipe handles proxy nodes: network config, package install,
>
> memcache config, proxy and auth package config, user creation, ring
>
> management (including builder file backup), user management
>
> -- Storage recipe handles storage nodes: network config, storage device
>
> config, package install, ring management.
>
>
>
> - chef databag that describes a swift cluster (eg: mycluster_databag.json)
>
> -- proxy config settings
>
> -- memcached settings
>
> -- settings for all rings and devices
>
> -- basic user settings
>
> -- account management
>
>
>
> - chef "spiceweasel" file that auto-vivifies the infrastructure: (eg:
>
> mycluster_infra.yaml)
>
> -- uploads cookbooks
>
> -- uploads roles
>
> -- uploads the cluster's databag
>
> -- kicks off node provisioning by requesting from infrastructure API (ec2
>
> or
>
> what have you) the following:
>
> --- chef roles applied (role[swift:proxy] or role[swift:storage])
>
> --- server flavor
>
> --- storage device configs
>
> --- hostname
>
> --- proxy and storage network details
>
>
>
> By calling this spiceweasel file, the infrastructure can leap into
>
> existence.
>
>
>
> I'm more or less done with all this stuff - and I'd really appreciate
>
> conceptual feedback before I take out all the non-sense code I have in the
>
> files and publish.
>
>
>
> Many thanks! Happy spring, northern hemispherians!
>
> -judd
>
>
>
>
>
>
>
> --
>
> Judd Maltin
>
> T: 917-882-1270
>
> F: 501-694-7809
>
> A loving heart is never wrong.
>
>
I think that's a great idea and I've been working on a similar tool
>
for provisioning environments from scratch. I use it to provision prod
>
and test environments and eventually will hand it to my devs to spin
>
up their own environments, devops goodness and all.
>
>
My tool glues together cloud provisioning, chef, DNS, and some other
>
stuff like talking to load balancers and attaching EBS volumes with
>
the end goal of spinning a completely functioning environment with one
>
command. The input to the tool is a json file where you list out the
>
nodes to build along with attributes like the EC2 instance size, chef
>
run list, and DNS aliases. The tool takes the spec file and generates
>
a custom cloud-init firstboot script from an erb template which is
>
passed to each instance via user-data when it's launched. When the
>
instance starts it installs chef, applies the runlist, adds itself to
>
DNS using DDNS, deploys applications with chef, and adds the node to
>
the load balancer if it's supposed to be in a pool. Every node gets a
>
friendly CNAME so you don't have to remember the cloud assigned name.
>
I add nodes to the LB via a little Sinatra-based webapp that talks to
>
the LB's API. Having nodes add themselves to the LB means one less
>
operation outside of the provisioning system. Our application settings
>
are kept in per-environment databags and the tool can generate new
>
databags from a template and upload it to chef.
>
>
I think whole stack provisioning is the way to go and tools like these
>
and CloudFormation make the process so much better than launching
>
individual instances and configuring them one-by-one. Ultimately I can
>
envision doing this with chef itself, afterall chef is a systems
>
integration framework.
>
>
-Eric
>
Archive powered by MHonArc 2.6.16.