charmkit 0.5.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/README.md +46 -94
- data/charmkit.gemspec +3 -3
- data/examples/Charmkitfile +66 -0
- data/examples/basic.rb +6 -0
- data/examples/demo/Gemfile +10 -0
- data/examples/demo/Gemfile.lock +64 -0
- data/examples/demo/README.md +27 -0
- data/examples/demo/Rakefile +9 -0
- data/examples/demo/config.yaml +2 -0
- data/examples/demo/hooks/config-changed +3 -0
- data/examples/{my-demo-charm → demo}/hooks/install +3 -5
- data/examples/demo/hooks/leader-elected +3 -0
- data/examples/demo/hooks/leader-settings-changed +3 -0
- data/examples/demo/hooks/start +3 -0
- data/examples/demo/hooks/stop +3 -0
- data/examples/demo/hooks/update-status +3 -0
- data/examples/demo/hooks/upgrade-charm +3 -0
- data/examples/demo/metadata.yaml +9 -0
- data/examples/load-charmkit-file.rb +2 -0
- data/examples/plugin_loader.rb +9 -0
- data/examples/template.rb +6 -0
- data/examples/templates/user_auth.txt +1 -0
- data/exe/charmkit +5 -0
- data/lib/charmkit.rb +6 -7
- data/lib/charmkit/cli.rb +124 -0
- data/lib/charmkit/dependencies.rb +26 -0
- data/lib/charmkit/helpers.rb +5 -0
- data/lib/charmkit/helpers/crypt.rb +8 -6
- data/lib/charmkit/helpers/fs.rb +0 -15
- data/lib/charmkit/helpers/hookenv.rb +10 -0
- data/lib/charmkit/helpers/runner.rb +2 -1
- data/lib/charmkit/helpers/template.rb +1 -0
- data/lib/charmkit/hook.rb +47 -0
- data/lib/charmkit/scroll.rb +15 -0
- metadata +48 -29
- data/examples/my-demo-charm/Gemfile +0 -5
- data/examples/my-demo-charm/Gemfile.lock +0 -15
- data/examples/my-demo-charm/README.md +0 -45
- data/examples/my-demo-charm/Rakefile +0 -63
- data/examples/my-demo-charm/config.yaml +0 -21
- data/examples/my-demo-charm/copyright +0 -21
- data/examples/my-demo-charm/hooks/config-changed +0 -3
- data/examples/my-demo-charm/hooks/upgrade-charm +0 -3
- data/examples/my-demo-charm/icon.svg +0 -322
- data/examples/my-demo-charm/metadata.yaml +0 -18
- data/examples/my-demo-charm/readme +0 -1
- data/examples/my-demo-charm/tasks/vim.rb +0 -8
- data/examples/my-demo-charm/templates/acl.auth.php +0 -10
- data/examples/my-demo-charm/templates/local.php +0 -15
- data/examples/my-demo-charm/templates/plugins.local.php +0 -12
- data/examples/my-demo-charm/templates/users.auth.php +0 -11
- data/examples/my-demo-charm/templates/vhost.conf +0 -42
- data/examples/render_inline.rb +0 -59
- data/lib/charmkit/extend/string_tools.rb +0 -14
- data/lib/charmkit/plugins/nginx.rb +0 -8
- data/lib/charmkit/plugins/php.rb +0 -19
- data/lib/charmkit/version.rb +0 -14
@@ -0,0 +1 @@
|
|
1
|
+
Hi there <%= firstname %> <%= lastname %>
|
data/exe/charmkit
ADDED
data/lib/charmkit.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require "charmkit/helpers/crypt"
|
1
|
+
require 'charmkit/helpers'
|
2
|
+
require 'charmkit/hook'
|
3
|
+
require 'charmkit/scroll'
|
4
|
+
require 'charmkit/dependencies'
|
5
|
+
require 'charmkit/cli'
|
7
6
|
|
8
7
|
module Charmkit; end
|
9
|
-
extend Charmkit::
|
8
|
+
extend Charmkit::Base
|
data/lib/charmkit/cli.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require "active_support/core_ext/string/inflections"
|
2
|
+
require 'pathname'
|
3
|
+
require 'thor'
|
4
|
+
require 'charmkit'
|
5
|
+
require 'charmkit/helpers'
|
6
|
+
require 'charmkit/dependencies'
|
7
|
+
|
8
|
+
module Charmkit
|
9
|
+
class CLI < Thor
|
10
|
+
desc "generate NAME", "generate a charm skelton"
|
11
|
+
def generate(name)
|
12
|
+
pn = Pathname(name)
|
13
|
+
if pn.directory?
|
14
|
+
puts "#{name} directory exists, please choose a different charm name."
|
15
|
+
exit 1
|
16
|
+
else
|
17
|
+
pn.mkpath
|
18
|
+
pn.join('hooks').mkpath
|
19
|
+
end
|
20
|
+
Helpers.inline_template 'config.yaml', pn/'config.yaml'
|
21
|
+
Helpers.inline_template 'metadata.yaml', pn/'metadata.yaml', name: name
|
22
|
+
Helpers.inline_template 'README.md', pn/'README.md', name: name
|
23
|
+
Helpers.inline_template 'Gemfile', pn/'Gemfile'
|
24
|
+
|
25
|
+
# Write the install hook
|
26
|
+
hook_path = pn.join('hooks/install')
|
27
|
+
Helpers.inline_template 'install-hook', hook_path
|
28
|
+
hook_path.chmod 0755
|
29
|
+
|
30
|
+
# Write other hooks
|
31
|
+
hooks = ['config-changed',
|
32
|
+
'upgrade-charm',
|
33
|
+
'start',
|
34
|
+
'stop',
|
35
|
+
'leader-elected',
|
36
|
+
'leader-settings-changed',
|
37
|
+
'update-status']
|
38
|
+
hooks.each do |hook|
|
39
|
+
hook_path = pn.join("hooks/#{hook}")
|
40
|
+
Helpers.inline_template 'generic-hook', hook_path, hook: hook.underscore
|
41
|
+
hook_path.chmod 0755
|
42
|
+
end
|
43
|
+
|
44
|
+
Helpers.inline_template 'Rakefile', pn/'Rakefile'
|
45
|
+
end
|
46
|
+
map "g" => "generate"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
__END__
|
52
|
+
|
53
|
+
@@ Gemfile
|
54
|
+
# frozen_string_literal: true
|
55
|
+
source "https://rubygems.org"
|
56
|
+
|
57
|
+
gem "charmkit"
|
58
|
+
gem "rake"
|
59
|
+
gem "rspec"
|
60
|
+
|
61
|
+
# If you wish to load additional scrolls add those here
|
62
|
+
# gem "charmkit-scroll-nginx", :github => "battlemidget/charmkit-scroll-nginx"
|
63
|
+
|
64
|
+
@@ Rakefile
|
65
|
+
require 'charmkit'
|
66
|
+
|
67
|
+
desc "Install hook"
|
68
|
+
task :install do
|
69
|
+
use :nginx
|
70
|
+
nginx.add_host server_name: "example.com"
|
71
|
+
end
|
72
|
+
|
73
|
+
@@ install-hook
|
74
|
+
#!/bin/sh
|
75
|
+
apt-get update && apt-get install -qyf ruby bundler --no-install-recommends
|
76
|
+
bundle install --local --quiet --without development
|
77
|
+
# Do install task
|
78
|
+
bundle exec rake install
|
79
|
+
|
80
|
+
@@ generic-hook
|
81
|
+
#!/bin/sh
|
82
|
+
bundle exec rake <%= hook %>
|
83
|
+
|
84
|
+
@@ config.yaml
|
85
|
+
options: {}
|
86
|
+
|
87
|
+
@@ metadata.yaml
|
88
|
+
name: <%= name %>
|
89
|
+
summary: |
|
90
|
+
<<insert summary>>
|
91
|
+
description: |
|
92
|
+
<<insert description>>
|
93
|
+
maintainers: ['']
|
94
|
+
series:
|
95
|
+
- xenial
|
96
|
+
|
97
|
+
@@ README.md
|
98
|
+
# Overview
|
99
|
+
|
100
|
+
My charm Overview
|
101
|
+
|
102
|
+
# Usage
|
103
|
+
|
104
|
+
$ juju deploy <%= name %>
|
105
|
+
|
106
|
+
# Developers
|
107
|
+
|
108
|
+
How developers can contribute
|
109
|
+
|
110
|
+
# Maintainers
|
111
|
+
|
112
|
+
How QA and others can test your charm
|
113
|
+
|
114
|
+
# Author
|
115
|
+
|
116
|
+
Your name <mememe@email.com>
|
117
|
+
|
118
|
+
# Copyright
|
119
|
+
|
120
|
+
2016 Your name
|
121
|
+
|
122
|
+
# License
|
123
|
+
|
124
|
+
MIT
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Charmkit
|
2
|
+
class Dependencies
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
@@deps = []
|
6
|
+
|
7
|
+
def self.empty?
|
8
|
+
@@deps.empty?
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.install
|
12
|
+
# TODO: Should be a dependency class with options for
|
13
|
+
# installing groups, recommended packages, and snaps
|
14
|
+
puts "Installing #{@@deps.join(' ')}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.<<(o)
|
18
|
+
@@deps << o
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.to_s
|
23
|
+
@@deps.join(' ')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module Charmkit
|
2
2
|
module Helpers
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
(min
|
3
|
+
class Crypt
|
4
|
+
# Generate a password salt
|
5
|
+
#
|
6
|
+
# @param [Integer] min mininum number of characters
|
7
|
+
# @param [Integer] max maximum number of characters
|
8
|
+
def self.gen_salt(min=0, max=20)
|
9
|
+
(min...max).map { ('a'..'z').to_a[rand(26)] }.join
|
10
|
+
end
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
data/lib/charmkit/helpers/fs.rb
CHANGED
@@ -19,21 +19,6 @@ module Charmkit
|
|
19
19
|
File.write(dst, content)
|
20
20
|
end
|
21
21
|
|
22
|
-
# Check if file exists
|
23
|
-
#
|
24
|
-
# @param path String
|
25
|
-
# @return Boolean
|
26
|
-
#
|
27
|
-
# @example
|
28
|
-
# is_file? "/etc/nginx/nginx.conf"
|
29
|
-
def is_file?(path)
|
30
|
-
return File.exists? path
|
31
|
-
end
|
32
|
-
|
33
|
-
def is_dir?(path)
|
34
|
-
return Dir.exists? path
|
35
|
-
end
|
36
|
-
|
37
22
|
def cat(src)
|
38
23
|
return File.read(src)
|
39
24
|
end
|
@@ -38,6 +38,16 @@ module Charmkit
|
|
38
38
|
return out.chomp
|
39
39
|
end
|
40
40
|
|
41
|
+
def relation(item)
|
42
|
+
out, err = cmd.run "relation-get '#{item}'"
|
43
|
+
return out.chomp
|
44
|
+
end
|
45
|
+
|
46
|
+
def relation=(key, item)
|
47
|
+
out, err = cmd.run "relation-set '#{key}=#{item}'"
|
48
|
+
return out.chomp
|
49
|
+
end
|
50
|
+
|
41
51
|
def log(msg)
|
42
52
|
cmd.run "juju-log #{msg}"
|
43
53
|
end
|
@@ -3,7 +3,7 @@ require 'tty-command'
|
|
3
3
|
module Charmkit
|
4
4
|
module Helpers
|
5
5
|
extend Forwardable
|
6
|
-
def_delegators :cmd, :run, :run
|
6
|
+
def_delegators :cmd, :run, :run!
|
7
7
|
|
8
8
|
def cmd
|
9
9
|
if ENV['DRYRUN']
|
@@ -12,5 +12,6 @@ module Charmkit
|
|
12
12
|
TTY::Command.new
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
15
16
|
end
|
16
17
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Charmkit
|
2
|
+
module Base
|
3
|
+
include Helpers
|
4
|
+
|
5
|
+
# Include scrolls to be used within hook execution
|
6
|
+
#
|
7
|
+
# Note: Idea lifted from https://github.com/mckomo/metaxa
|
8
|
+
# @param [Symbol] name symbol of scroll
|
9
|
+
# @param [Hash] options (NotImplemented) Options to be passed to scroll
|
10
|
+
# @example
|
11
|
+
# use :nginx
|
12
|
+
# nginx.add_host server: "test.com"
|
13
|
+
def use(name, options = {})
|
14
|
+
require "charmkit/scrolls/#{name.to_s}"
|
15
|
+
name_ref = name
|
16
|
+
if options[:alias]
|
17
|
+
name_ref = options[:alias]
|
18
|
+
end
|
19
|
+
|
20
|
+
var_module = Module.new do
|
21
|
+
attr_accessor name_ref.to_sym
|
22
|
+
end
|
23
|
+
extend var_module
|
24
|
+
set(name_ref, to_const(name.to_s).new)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Access deps class
|
28
|
+
#
|
29
|
+
def deps
|
30
|
+
Dependencies
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def get(variable)
|
35
|
+
instance_variable_get("@#{variable}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def set(variable, value)
|
39
|
+
instance_variable_set("@#{variable}", value)
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_const(name)
|
43
|
+
klass = name.classify
|
44
|
+
klass.constantize
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: charmkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Stokes
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-command
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
@@ -25,7 +39,7 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: thor
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -125,12 +139,14 @@ dependencies:
|
|
125
139
|
description: ''
|
126
140
|
email:
|
127
141
|
- battlemidget@users.noreply.github.com
|
128
|
-
executables:
|
142
|
+
executables:
|
143
|
+
- charmkit
|
129
144
|
extensions: []
|
130
145
|
extra_rdoc_files: []
|
131
146
|
files:
|
132
147
|
- ".gitignore"
|
133
148
|
- ".rspec"
|
149
|
+
- ".ruby-version"
|
134
150
|
- ".travis.yml"
|
135
151
|
- CODE_OF_CONDUCT.md
|
136
152
|
- Gemfile
|
@@ -140,35 +156,38 @@ files:
|
|
140
156
|
- bin/console
|
141
157
|
- bin/setup
|
142
158
|
- charmkit.gemspec
|
143
|
-
- examples/
|
144
|
-
- examples/
|
145
|
-
- examples/
|
146
|
-
- examples/
|
147
|
-
- examples/
|
148
|
-
- examples/
|
149
|
-
- examples/
|
150
|
-
- examples/
|
151
|
-
- examples/
|
152
|
-
- examples/
|
153
|
-
- examples/
|
154
|
-
- examples/
|
155
|
-
- examples/
|
156
|
-
- examples/
|
157
|
-
- examples/
|
158
|
-
- examples/
|
159
|
-
- examples/
|
160
|
-
- examples/
|
161
|
-
- examples/
|
159
|
+
- examples/Charmkitfile
|
160
|
+
- examples/basic.rb
|
161
|
+
- examples/demo/Gemfile
|
162
|
+
- examples/demo/Gemfile.lock
|
163
|
+
- examples/demo/README.md
|
164
|
+
- examples/demo/Rakefile
|
165
|
+
- examples/demo/config.yaml
|
166
|
+
- examples/demo/hooks/config-changed
|
167
|
+
- examples/demo/hooks/install
|
168
|
+
- examples/demo/hooks/leader-elected
|
169
|
+
- examples/demo/hooks/leader-settings-changed
|
170
|
+
- examples/demo/hooks/start
|
171
|
+
- examples/demo/hooks/stop
|
172
|
+
- examples/demo/hooks/update-status
|
173
|
+
- examples/demo/hooks/upgrade-charm
|
174
|
+
- examples/demo/metadata.yaml
|
175
|
+
- examples/load-charmkit-file.rb
|
176
|
+
- examples/plugin_loader.rb
|
177
|
+
- examples/template.rb
|
178
|
+
- examples/templates/user_auth.txt
|
179
|
+
- exe/charmkit
|
162
180
|
- lib/charmkit.rb
|
163
|
-
- lib/charmkit/
|
181
|
+
- lib/charmkit/cli.rb
|
182
|
+
- lib/charmkit/dependencies.rb
|
183
|
+
- lib/charmkit/helpers.rb
|
164
184
|
- lib/charmkit/helpers/crypt.rb
|
165
185
|
- lib/charmkit/helpers/fs.rb
|
166
186
|
- lib/charmkit/helpers/hookenv.rb
|
167
187
|
- lib/charmkit/helpers/runner.rb
|
168
188
|
- lib/charmkit/helpers/template.rb
|
169
|
-
- lib/charmkit/
|
170
|
-
- lib/charmkit/
|
171
|
-
- lib/charmkit/version.rb
|
189
|
+
- lib/charmkit/hook.rb
|
190
|
+
- lib/charmkit/scroll.rb
|
172
191
|
homepage: http://charmkit.org
|
173
192
|
licenses:
|
174
193
|
- MIT
|
@@ -189,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
208
|
version: '0'
|
190
209
|
requirements: []
|
191
210
|
rubyforge_project:
|
192
|
-
rubygems_version: 2.
|
211
|
+
rubygems_version: 2.6.8
|
193
212
|
signing_key:
|
194
213
|
specification_version: 4
|
195
214
|
summary: Helps with charm authoring
|