charmkit 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05364a4374be704b432ec856dbc035ce451e85c1
4
- data.tar.gz: de1fcd348a2deba7363ca267cfc4142bc66cc88a
3
+ metadata.gz: 2f742ba89357ad616835697ea86d6f9a079f3faf
4
+ data.tar.gz: 2432ac3a5dce8a156d1ff2c4112c7a04a2d5279c
5
5
  SHA512:
6
- metadata.gz: '008297d5686d1508a1f333e35717d2507dd09fc65a8e7e6497a8956e9af7da7cc1fd86a9b1dc9974fe1af5cb35de090957ae00693328521f5f774f18919092ee'
7
- data.tar.gz: 58327894324fcd05a17310addf9ba61686582c31565baf8442ee47cc10c4135d3721aae2afd16379659ee86bcc122091c6737e0f09d9c0b544c927cd49db8477
6
+ metadata.gz: 0a7ddce6c4a359fb5da2c00755857013cc5d2a10ae30faf9918f563ced7b9f8d38c2e367d03f1440c5ecc43081aae0684cf712e3097207c77ecf4f00b49a86e6
7
+ data.tar.gz: 690573d393d1ed24982e2401d6eae53e69b26e27acf81b4292659a6efac64b921ff30793c1f44a871196c37778d0299805a1f81f4392ab0a200c03db8d482859
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /vendor/cache
data/README.md CHANGED
@@ -22,48 +22,107 @@ Or install it yourself as:
22
22
  In **hooks/install**:
23
23
 
24
24
  ```
25
- #!/bin/bash
25
+ #!/bin/sh
26
26
 
27
27
  apt-get update
28
28
  apt-get install -qyf ruby
29
29
  gem install bundler
30
30
 
31
- bundle install --standalone
31
+ bundle install --local --quiet
32
+
33
+ # Runs the lib/install.rb hook
34
+ bundle exec charmkit install
35
+ ```
36
+
37
+ In other hooks call *charmkit* with the execing hook (eg. **hooks/config-changed**)
38
+
39
+ ```
40
+ #!/bin/sh
41
+
42
+ bundle exec charmkit config-changed
43
+ ```
44
+
45
+ Same for **hooks/upgrade-charm**
46
+
47
+ ```
48
+ #!/bin/sh
49
+
50
+ bundle exec charmkit upgrade-charm
32
51
  ```
33
52
 
34
- In other hooks (eg. **hooks/config-changed**)
53
+ ## Writing Charmkit style hooks
54
+
55
+ All Charmkit hooks must reside in the charm's toplevel **lib/** directory. Those
56
+ files must match the name of the hook you want to assicate to and must end with
57
+ a **.rb** extension.
58
+
59
+ For example, if my hook runs `bundle exec charmkit config-changed` then in my
60
+ **lib/** directory should exist a file named **lib/config-changed.rb**.
61
+
62
+ To start, you'll want to inherit from the **Charmkit** class. The class name should also
63
+ reflect the name of the hook being executed and should be in a standard Ruby camelcase style.
64
+
65
+ See the syntax below for a the **config-changed** hook being run:
66
+
67
+ ### Syntax
35
68
 
36
69
  ```ruby
37
- #!/usr/bin/env ruby
38
- require_relative '../bundle/bundler/setup'
39
70
  require 'charmkit'
40
71
 
41
- package [
42
- 'nginx-full', 'php-fpm', 'php-cgi', 'php-curl', 'php-gd', 'php-json',
43
- 'php-mcrypt', 'php-readline', 'php-mbstring', 'php-xml'
44
- ], :update_cache
72
+ class ConfigChanged < Charmkit
73
+ plugin :core
74
+ plugin :hookenv
75
+
76
+ def summon
77
+ package [
78
+ 'nginx-full', 'php-fpm', 'php-cgi', 'php-curl', 'php-gd', 'php-json',
79
+ 'php-mcrypt', 'php-readline', 'php-mbstring', 'php-xml'
80
+ ], :update_cache
81
+
82
+ hook_path = ENV['JUJU_CHARM_DIR']
83
+ app_path = config 'app_path'
45
84
 
46
- hook_path = ENV['JUJU_CHARM_DIR']
47
- app_path = config 'app_path'
85
+ mkdir app_path unless is_dir? app_path
48
86
 
49
- mkdir app_path unless is_dir? app_path
87
+ release = config 'release'
50
88
 
51
- release = config 'release'
89
+ case release
90
+ when "stable"
91
+ resource_path = resource 'stable-release'
92
+ when "development"
93
+ resource_path = resource 'development-release'
94
+ else
95
+ status :blocked, "Unknown release given #{release}"
96
+ exit 1
97
+ end
52
98
 
53
- case release
54
- when "stable"
55
- resource_path = resource 'stable-release'
56
- when "development"
57
- resource_path = resource 'development-release'
58
- else
59
- status :blocked, "Unknown release given #{release}"
60
- exit 1
99
+ run "tar xf #{resource_path} -C #{app_path} --strip-components=1"
100
+
101
+ rm "#{app_path}/conf/install.php" unless !is_file? "#{app_path}/conf/install.php"
102
+ end
61
103
  end
104
+ ```
105
+
106
+ The core of Charmkit is relatively small and everything is handled through
107
+ plugins. Current plugins are:
62
108
 
63
- run "tar xf #{resource_path} -C #{app_path} --strip-components=1"
109
+ * core - Gives you access to things like *package*, *mkdir_p*, *chown_R*, etc.
110
+ * hookenv - Provides access to Juju hook items such as *resource*, *unit*, *juju-log*, etc.
111
+
112
+ ## Packaging the Charm
113
+
114
+ You'll want to make sure that any Ruby gems used are packaged with your charm so
115
+ that you aren't forcing users to try to download those dependencies during
116
+ deployment.
117
+
118
+ Easiest way to package your deps is:
64
119
 
65
- rm "#{app_path}/conf/install.php" unless !is_file? "#{app_path}/conf/install.php"
66
120
  ```
121
+ $ bundle package
122
+ ```
123
+
124
+ This will place your deps inside `vendor/cache` which will be uploaded when
125
+ executing a `charm push .`
67
126
 
68
127
  ## Development
69
128
 
@@ -88,4 +147,3 @@ the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
88
147
 
89
148
  The gem is available as open source under the terms of
90
149
  the [MIT License](http://opensource.org/licenses/MIT).
91
-
data/charmkit.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'charmkit/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "charmkit"
8
- spec.version = Charmkit::VERSION
8
+ spec.version = Charmkit.version
9
9
  spec.authors = ["Adam Stokes"]
10
10
  spec.email = ["battlemidget@users.noreply.github.com"]
11
11
 
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "bundler", "~> 1.13"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "pry", "~> 0.10.4"
29
30
  end
data/examples/CKfile ADDED
@@ -0,0 +1,137 @@
1
+ # -*- mode:ruby -*-
2
+
3
+ name "dokuwiki"
4
+ summary "Dokuwiki is a simple to use wiki"
5
+ desc <<~EOF
6
+ DokuWiki is a simple to use and highly versatile Open Source wiki software
7
+ that doesn't require a database. It is loved by users for its clean and
8
+ readable syntax.
9
+ EOF
10
+ maintainer 'Adam Stokes <adam.stokes@ubuntu.com>'
11
+ license 'MIT'
12
+ copyright_holder 'Canonical Ltd.'
13
+ copyright_year '2016'
14
+ url "https://github.com/battlemidget/juju-charm-dokuwiki.rb"
15
+ bugs "https://github.com/battlemidget/juju-charm-dokuwiki.rb/issues"
16
+
17
+ series "xenial"
18
+ series "trusty"
19
+
20
+ # CONFIG ######################################################################
21
+ # These items will be exposed to the charm via `config-get`
22
+ config "app_path" do
23
+ type :string
24
+ default "/srv/app"
25
+ desc "Where to store dokuwiki source"
26
+ end
27
+
28
+ config "release" do
29
+ type :string
30
+ default "/srv/app"
31
+ desc "Dokuwiki release"
32
+ end
33
+
34
+ config "admin_user" do
35
+ type :string
36
+ default "admin"
37
+ desc "Admin username (default: admin)"
38
+ end
39
+
40
+ config "admin_password" do
41
+ type :string
42
+ default "5f4dcc3b5aa765d61d8327deb882cf99"
43
+ desc "Admin password md5 hash format (default password: password)"
44
+ end
45
+
46
+ config "admin_name" do
47
+ type :string
48
+ default "The Admin"
49
+ desc "Name of admin"
50
+ end
51
+
52
+ config "admin_email" do
53
+ type :string
54
+ default "adam@root.me"
55
+ desc "Admin email"
56
+ end
57
+ # END #########################################################################
58
+
59
+ # RESOURCES ###################################################################
60
+ # These items will be exposed to the charm via `resource-get`
61
+ resource "stable-release" do
62
+ type :file
63
+ filename "stable.tgz"
64
+ desc "Dokuwiki stable"
65
+ end
66
+
67
+ resource "development-release" do
68
+ type :file
69
+ filename "deveopment.tgz"
70
+ desc "Dokuwiki development"
71
+ end
72
+ # END #########################################################################
73
+
74
+ depends_on "nginx-full"
75
+ depends_on "php-fpm"
76
+ depends_on "php-cgi"
77
+ depends_on "php-curl"
78
+ depends_on "php-gd"
79
+ depends_on "php-json"
80
+ depends_on "php-mcrypt"
81
+ depends_on "php-readline"
82
+ depends_on "php-mbstring"
83
+ depends_on "php-xml"
84
+
85
+ hook "install" do
86
+ release = "#{config['release']}-release"
87
+ app_path = config 'app_path'
88
+ hook_path = ENV['JUJU_CHARM_DIR']
89
+ run "tar xf #{resource[release]} -C #{app_path} --strip-components=1"
90
+ rm "#{app_path}/conf/install.php" if is_file? "#{app_path}/conf/install.php"
91
+ cp "#{hook_path}/templates/acl.auth.php", "#{app_path}/conf/acl.auth.php"
92
+ cp "#{hook_path}/templates/local.php", "#{app_path}/conf/local.php"
93
+ cp "#{hook_path}/templates/plugins.local.php", "#{app_path}/conf/plugin.local.php"
94
+ file "/etc/dokuwiki-release", content: release
95
+ case release
96
+ when "stable"
97
+ version = cat "#{app_path}/VERSION"
98
+ run "application-version-set '#{version}'"
99
+ when "development"
100
+ t = Time.now
101
+ version = t.strftime "%Y-%m-%d"
102
+ run "application-version-set 'development-#{version}'"
103
+ else
104
+ status :blocked, "Unable to set proper application version"
105
+ exit 1
106
+ end
107
+ end
108
+
109
+ hook "config-changed" do
110
+ app_path = config 'app_path'
111
+ hook_path = ENV['JUJU_CHARM_DIR']
112
+ installed_release = cat "/etc/dokuwiki-release"
113
+ release = config 'release'
114
+ if !installed_release.eql? release
115
+ run './hooks/install'
116
+ end
117
+
118
+ admin_user = config 'admin_user'
119
+ admin_password = config 'admin_password'
120
+ admin_name = config 'admin_name'
121
+ admin_email = config 'admin_email'
122
+ template "#{hook_path}/templates/users.auth.php",
123
+ "#{app_path}/conf/users.auth.php",
124
+ admin_user: admin_user,
125
+ admin_password: admin_password,
126
+ admin_name: admin_name,
127
+ admin_email: admin_email
128
+
129
+ template "#{hook_path}/templates/vhost.conf",
130
+ "/etc/nginx/sites-enabled/default",
131
+ public_address: unit['public-address'],
132
+ app_path: app_path
133
+
134
+ chown_R 'www-data', 'www-data', app_path
135
+ run "systemctl restart nginx"
136
+ status :active, "Ready"
137
+ end
data/examples/basic.rb CHANGED
@@ -1,6 +1,6 @@
1
- require 'charmkit'
1
+ require_relative './plugin_loader'
2
2
 
3
- run 'ls -l /tmp'
4
- status :active, "running application status..."
5
- package ['znc', 'znc-perl', 'znc-python'], :update_cache
6
- is_installed? 'znc'
3
+ # run 'ls -l /tmp'
4
+ # status :active, "running application status..."
5
+ # package ['znc', 'znc-perl', 'znc-python'], :update_cache
6
+ # is_installed? 'znc'
@@ -0,0 +1,9 @@
1
+ require 'charmkit'
2
+
3
+ class Install < Charmkit
4
+ plugin :core
5
+
6
+ def summon
7
+ puts run 'ls -l /tmp'
8
+ end
9
+ end
data/exe/charmkit ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "charmkit/extend/string_tools"
4
+
5
+ if ARGV.length > 1
6
+ puts "To many arguments, should be one of 'install, config-changed, start, stop, upgrade-charm'"
7
+ exit 1
8
+ end
9
+
10
+ hook_name = ARGV.pop
11
+
12
+ if File.exists?("./lib/#{hook_name}.rb")
13
+ require "./lib/#{hook_name}"
14
+ else
15
+ puts "Could not find hook in ./lib/#{hook_name}.rb"
16
+ exit 1
17
+ end
18
+
19
+ puts "Loading #{hook_name}"
20
+ m = Object.const_get(hook_name.classify).new
21
+ m.summon
@@ -0,0 +1,14 @@
1
+ class String
2
+ # Simple classify to rename our hooks to their proper class
3
+ #
4
+ # charmkit config-changed
5
+ #
6
+ # This will load config-changed.rb and classify it's name to
7
+ # ConfigChanged.
8
+ #
9
+ # Note most libraries use '_'(underscore) for word separation whereas
10
+ # Juju hooks are '-'(hyphenated).
11
+ def classify
12
+ return self.split('-').collect!{ |w| w.capitalize }.join
13
+ end
14
+ end
@@ -0,0 +1,84 @@
1
+ require 'fileutils'
2
+ require 'tty-command'
3
+ require 'erb'
4
+
5
+ class Charmkit
6
+ module Plugins
7
+ module Core
8
+ module InstanceMethods
9
+ FileUtils.singleton_methods.each do |m|
10
+ define_method m, FileUtils.method(m).to_proc
11
+ end
12
+
13
+ def file(dst, content:)
14
+ File.write(dst, content)
15
+ end
16
+
17
+ def is_file?(path)
18
+ return File.exists? path
19
+ end
20
+
21
+ def is_dir?(path)
22
+ return Dir.exists? path
23
+ end
24
+
25
+ def cat(src)
26
+ return File.read(src)
27
+ end
28
+
29
+ # Run commands optionally getting it's output, error
30
+ #
31
+ # run 'ls -l /tmp'
32
+ def run(data)
33
+ if ENV['DRYRUN']
34
+ puts "DRYRUN: #{data}"
35
+ else
36
+ cmd = TTY::Command.new(printer: :null)
37
+ return cmd.run(data)
38
+ end
39
+ end
40
+
41
+
42
+ # Processes templates
43
+ #
44
+ # template 'my-template.erb' '/etc/config/me.conf', service_name: "nginx"
45
+ class TemplateRenderer
46
+ def self.empty_binding
47
+ binding
48
+ end
49
+
50
+ def self.render(template_content, locals = {})
51
+ b = empty_binding
52
+ locals.each { |k, v| b.local_variable_set(k, v) }
53
+ ERB.new(template_content).result(b)
54
+ end
55
+ end
56
+
57
+ def template(src, dst, **context)
58
+ rendered = TemplateRenderer.render(File.read(src), context)
59
+ File.write(dst, rendered)
60
+ end
61
+
62
+
63
+ # Installs packages
64
+ #
65
+ # package ['nginx-full'], :update_cache
66
+ def package(packages, *opts)
67
+ if opts.include?(:update_cache)
68
+ run "apt-get update"
69
+ end
70
+ run "apt-get install -qyf #{packages.join(' ')}"
71
+ end
72
+
73
+ def is_installed?(package)
74
+ begin
75
+ run "dpkg -s #{package}" and return true
76
+ rescue
77
+ return false
78
+ end
79
+ end
80
+ end
81
+ end
82
+ register_plugin(:core, Core)
83
+ end
84
+ end
@@ -0,0 +1,44 @@
1
+ class Charmkit
2
+ module Plugins
3
+ module HookEnv
4
+ module ClassMethods
5
+ # calls status-set in juju environment
6
+ def status(level=:maintenance, msg="")
7
+ levels = [:maintenance, :active, :blocked, :waiting]
8
+ raise unless levels.include?(level)
9
+ run "status-set #{level.to_s} '#{msg}'"
10
+ end
11
+
12
+ def config(item)
13
+ out, err = run "config-get '#{item}'"
14
+ return out.chomp
15
+ end
16
+
17
+ def resource(item)
18
+ out, err = run "resource-get '#{item}'"
19
+ return out.chomp
20
+ end
21
+
22
+ def unit(item)
23
+ out, err = run "unit-get '#{item}'"
24
+ return out.chomp
25
+ end
26
+
27
+ def action(item)
28
+ out, err = run "action-get '#{item}'"
29
+ return out.chomp
30
+ end
31
+
32
+ def action=(item)
33
+ out, err = run "action-set '#{item}'"
34
+ return out.chomp
35
+ end
36
+
37
+ def log(msg)
38
+ run "juju-log #{msg}"
39
+ end
40
+ end
41
+ end
42
+ register_plugin(:hookenv, HookEnv)
43
+ end
44
+ end
@@ -1,3 +1,14 @@
1
- module Charmkit
2
- VERSION = "0.3.4"
1
+ class Charmkit
2
+ def self.version
3
+ Gem::Version.new VERSION::STRING
4
+ end
5
+
6
+ module VERSION
7
+ MAJOR = 0
8
+ MINOR = 3
9
+ PATCH = 5
10
+ PRE = nil
11
+
12
+ STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
13
+ end
3
14
  end
data/lib/charmkit.rb CHANGED
@@ -1,9 +1,71 @@
1
- require "charmkit/runner"
2
- require "charmkit/hook-tools"
3
- require "charmkit/package"
4
- require "charmkit/template"
5
- require "charmkit/fs"
6
1
  require "charmkit/version"
7
2
 
8
- module Charmkit end
9
- extend Charmkit::DSL
3
+ class Charmkit
4
+ # A generic exception by Charmkit
5
+ class Error < StandardError; end
6
+
7
+ @opts = {}
8
+
9
+ module Plugins
10
+ @plugins = {}
11
+
12
+ def self.load_plugin(name)
13
+ unless plugin = @plugins[name]
14
+ require "charmkit/plugins/#{name}"
15
+ raise Error, "plugin #{name} did not register itself correctly in Charmkit::Plugins" unless plugin = @plugins[name]
16
+ end
17
+ plugin
18
+ end
19
+
20
+ def self.register_plugin(name, mod)
21
+ @plugins[name] = mod
22
+ end
23
+
24
+ module Base
25
+ module ClassMethods
26
+ # Generic options for this class, plugins store their options here.
27
+ attr_reader :opts
28
+
29
+ def inherited(subclass)
30
+ subclass.instance_variable_set(:@opts, opts.dup)
31
+ subclass.opts.each do |key, value|
32
+ if value.is_a?(Enumerable) && !value.frozen?
33
+ subclass.opts[key] = value.dup
34
+ end
35
+ end
36
+ end
37
+ def plugin(plugin, *args, &block)
38
+ plugin = Plugins.load_plugin(plugin) if plugin.is_a?(Symbol)
39
+ plugin.load_dependencies(self, *args, &block) if plugin.respond_to?(:load_dependencies)
40
+ self.include(plugin::InstanceMethods) if defined?(plugin::InstanceMethods)
41
+ self.extend(plugin::ClassMethods) if defined?(plugin::ClassMethods)
42
+ plugin.configure(self, *args, &block) if plugin.respond_to?(:configure)
43
+ nil
44
+ end
45
+
46
+ end
47
+ module InstanceMethods
48
+ # The class-level options hash. This should probably not be modified at
49
+ # the instance level.
50
+ def opts
51
+ self.class.opts
52
+ end
53
+
54
+ # This performs the actual work of installing, configuring, restarting
55
+ # of services.
56
+ #
57
+ # class Install < Charmkit
58
+ # def summon
59
+ # cp "#{ENV['JUJU_CHARM_DIR']}/templates/nginx.conf.tpl",
60
+ # "/etc/nginx/nginx.conf"
61
+ # end
62
+ # end
63
+ def summon
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ extend Plugins::Base::ClassMethods
70
+ plugin Plugins::Base
71
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: charmkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Stokes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-29 00:00:00.000000000 Z
11
+ date: 2016-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-command
@@ -66,10 +66,25 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.10.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.10.4
69
83
  description: ''
70
84
  email:
71
85
  - battlemidget@users.noreply.github.com
72
- executables: []
86
+ executables:
87
+ - charmkit
73
88
  extensions: []
74
89
  extra_rdoc_files: []
75
90
  files:
@@ -84,15 +99,16 @@ files:
84
99
  - bin/console
85
100
  - bin/setup
86
101
  - charmkit.gemspec
102
+ - examples/CKfile
87
103
  - examples/basic.rb
104
+ - examples/plugin_loader.rb
88
105
  - examples/template.rb
89
106
  - examples/templates/user_auth.txt
107
+ - exe/charmkit
90
108
  - lib/charmkit.rb
91
- - lib/charmkit/fs.rb
92
- - lib/charmkit/hook-tools.rb
93
- - lib/charmkit/package.rb
94
- - lib/charmkit/runner.rb
95
- - lib/charmkit/template.rb
109
+ - lib/charmkit/extend/string_tools.rb
110
+ - lib/charmkit/plugins/core.rb
111
+ - lib/charmkit/plugins/hookenv.rb
96
112
  - lib/charmkit/version.rb
97
113
  homepage: http://charmkit.org
98
114
  licenses:
data/lib/charmkit/fs.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Charmkit
4
- module DSL
5
- FileUtils.singleton_methods.each do |m|
6
- define_method m, FileUtils.method(m).to_proc
7
- end
8
- def is_file?(path)
9
- return File.exists? path
10
- end
11
- def is_dir?(path)
12
- return Dir.exists? path
13
- end
14
- def spew(dst, content)
15
- File.write(dst, content)
16
- end
17
- def slurp(src)
18
- return File.read(src)
19
- end
20
- end
21
- end
@@ -1,40 +0,0 @@
1
- # Hook tools module for exposing things such as status-set and action-set
2
- module Charmkit
3
- module DSL
4
- # calls status-set in juju environment
5
- def status(level=:maintenance, msg="")
6
- levels = [:maintenance, :active, :blocked, :waiting]
7
- raise unless levels.include?(level)
8
- run "status-set #{level.to_s} '#{msg}'"
9
- end
10
-
11
- def config(item)
12
- out, err = run "config-get #{item}"
13
- return out.chomp
14
- end
15
-
16
- def resource(item)
17
- out, err = run "resource-get #{item}"
18
- return out.chomp
19
- end
20
-
21
- def unit(item)
22
- out, err = run "unit-get #{item}"
23
- return out.chomp
24
- end
25
-
26
- def action(item)
27
- out, err = run "action-get #{item}"
28
- return out.chomp
29
- end
30
-
31
- def action=(item)
32
- out, err = run "action-set #{item}"
33
- return out.chomp
34
- end
35
-
36
- def log(msg)
37
- run "juju-log #{msg}"
38
- end
39
- end
40
- end
@@ -1,19 +0,0 @@
1
- module Charmkit
2
- module DSL
3
- # installs apt packages
4
- def package(packages, *opts)
5
- if opts.include?(:update_cache)
6
- run "apt-get update"
7
- end
8
- run "apt-get install -qyf #{packages.join(' ')}"
9
- end
10
-
11
- def is_installed?(package)
12
- begin
13
- run "dpkg -s #{package}" and return true
14
- rescue
15
- return false
16
- end
17
- end
18
- end
19
- end
@@ -1,14 +0,0 @@
1
- require "tty-command"
2
-
3
- module Charmkit
4
- module DSL
5
- def run(data)
6
- if ENV['DRYRUN']
7
- puts "DRYRUN: #{data}"
8
- else
9
- cmd = TTY::Command.new(printer: :null)
10
- return cmd.run(data)
11
- end
12
- end
13
- end
14
- end
@@ -1,22 +0,0 @@
1
- require 'erb'
2
-
3
- module Charmkit
4
- module DSL
5
- class TemplateRenderer
6
- def self.empty_binding
7
- binding
8
- end
9
-
10
- def self.render(template_content, locals = {})
11
- b = empty_binding
12
- locals.each { |k, v| b.local_variable_set(k, v) }
13
- ERB.new(template_content).result(b)
14
- end
15
- end
16
-
17
- def template(src, dst, **context)
18
- rendered = TemplateRenderer.render(File.read(src), context)
19
- File.write(dst, rendered)
20
- end
21
- end
22
- end