Charmkit 
elegantly elegant charm authoring
Installation
Add this line to your application's Gemfile:
gem 'charmkit'
And then execute:
$ bundle
Or install it yourself as:
$ gem install charmkit
Usage
In hooks/install:
#!/bin/sh
apt-get update
apt-get install -qyf ruby --no-install-recommends
gem install bundler
bundle install --local --quiet
# Runs the lib/install.rb hook
bundle exec charmkit hook install
In other hooks call charmkit with the execing hook (eg. hooks/config-changed)
#!/bin/sh
bundle exec charmkit hook config-changed
Same for hooks/upgrade-charm
#!/bin/sh
bundle exec charmkit hook upgrade-charm
Writing Charmkit style hooks
All Charmkit hooks must reside in the charm's toplevel lib/ directory. Those files must match the name of the hook you want to assicate to and must end with a .rb extension.
For example, if my hook runs bundle exec charmkit hook config-changed
then in my
lib/ directory should exist a file named lib/config-changed.rb.
To start, you'll want to inherit from the Charmkit class. The class name should also reflect the name of the hook being executed and should be in a standard Ruby camelcase style.
See the syntax below for a the config-changed hook being run:
Syntax
class ConfigChanged < Charmkit::Hook
use :nginx
summon do
package [
'php-fpm', 'php-cgi', 'php-curl', 'php-gd', 'php-json',
'php-mcrypt', 'php-readline', 'php-mbstring', 'php-xml'
], :update_cache
hook_path = ENV['JUJU_CHARM_DIR']
app_path = path(config('app_path'))
mkdir app_path
resource_path = path(resource('stable-release'))
run "tar xf #{resource_path} -C #{app_path} --strip-components=1"
rm app_path/"conf/install.php"
status :active, "Dokuwiki configuration updated."
end
test do
cmd.test '-e /etc/passwd'
end
end
The core of Charmkit is relatively small and everything is handled through scrolls (read plugins). Visit Charmkit Scrolls for more information.
Packaging the Charm
$ bundle exec charmkit build
This will package and cache all required gems, along with making sure the necessary scrolls are included. The output will be a charm that you can deploy via:
$ juju deploy dist/.
Uploading to charm store
Once the charm is built simply run:
$ charm push dist/.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run
rake spec
to run the tests. You can also run bin/console
for an interactive
prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To
release a new version, update the version number in version.rb
, and then run
bundle exec rake release
, which will create a git tag for the version, push
git commits and tags, and push the .gem
file
to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/charmkit/charmkit. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.