charmkit 0.5.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34c131cea62bf4d8cf2e3fd63e5919962c62fa37
|
4
|
+
data.tar.gz: c0252140b1e1f42646961889f077950e6f1989c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df357ff4b8222ae01e4e5d724dbd4d5e813216ee378b4e3d3e37de6a2ed958adfaf03eb51fcbc2dcf3ee5558f709351ee02cd90b70a53c2934ddc5a390aec6da
|
7
|
+
data.tar.gz: 12e5bc325ced514f7a5858d3685ef4b43bed7082715497cfe0db8828d02ef582aadd782201c0cb3f9feaaa572f4f1db9f88cf2604a58b1cf4a1893399d3e4a80
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.4.0
|
data/README.md
CHANGED
@@ -19,29 +19,27 @@ Or install it yourself as:
|
|
19
19
|
|
20
20
|
## Usage
|
21
21
|
|
22
|
-
Define all install, configure, upgrade tasks within a normal **Rakefile**. The
|
23
|
-
hooks will then need to just call those tasks:
|
24
|
-
|
25
22
|
In **hooks/install**:
|
26
23
|
|
27
24
|
```
|
28
25
|
#!/bin/sh
|
29
26
|
|
30
27
|
apt-get update
|
31
|
-
apt-get install -qyf ruby
|
28
|
+
apt-get install -qyf ruby --no-install-recommends
|
29
|
+
gem install bundler
|
32
30
|
|
33
|
-
bundle install --local --quiet
|
31
|
+
bundle install --local --quiet
|
34
32
|
|
35
|
-
|
33
|
+
# Runs the lib/install.rb hook
|
34
|
+
bundle exec charmkit hook install
|
36
35
|
```
|
37
36
|
|
38
|
-
In other hooks call
|
39
|
-
**hooks/config-changed**:
|
37
|
+
In other hooks call *charmkit* with the execing hook (eg. **hooks/config-changed**)
|
40
38
|
|
41
39
|
```
|
42
40
|
#!/bin/sh
|
43
41
|
|
44
|
-
bundle exec
|
42
|
+
bundle exec charmkit hook config-changed
|
45
43
|
```
|
46
44
|
|
47
45
|
Same for **hooks/upgrade-charm**
|
@@ -49,126 +47,80 @@ Same for **hooks/upgrade-charm**
|
|
49
47
|
```
|
50
48
|
#!/bin/sh
|
51
49
|
|
52
|
-
bundle exec
|
50
|
+
bundle exec charmkit hook upgrade-charm
|
53
51
|
```
|
54
52
|
|
55
53
|
## Writing Charmkit style hooks
|
56
54
|
|
57
|
-
All Charmkit hooks
|
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 hook 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:
|
58
66
|
|
59
67
|
### Syntax
|
60
68
|
|
61
69
|
```ruby
|
62
|
-
|
63
|
-
|
64
|
-
require 'charmkit/plugins/php'
|
70
|
+
class ConfigChanged < Charmkit::Hook
|
71
|
+
use :nginx
|
65
72
|
|
66
|
-
|
73
|
+
summon do
|
74
|
+
package [
|
75
|
+
'php-fpm', 'php-cgi', 'php-curl', 'php-gd', 'php-json',
|
76
|
+
'php-mcrypt', 'php-readline', 'php-mbstring', 'php-xml'
|
77
|
+
], :update_cache
|
67
78
|
|
68
|
-
desc "Install Dokuwiki"
|
69
|
-
task :install => ["nginx:install", "php:install"] do
|
70
|
-
app_path = `config-get app_path`
|
71
|
-
resource_path = `resource-get stable-release`
|
72
79
|
hook_path = ENV['JUJU_CHARM_DIR']
|
80
|
+
app_path = path(config('app_path'))
|
73
81
|
|
74
|
-
|
82
|
+
mkdir app_path
|
75
83
|
|
76
|
-
|
77
|
-
|
78
|
-
cp "#{hook_path}/templates/acl.auth.php", "#{app_path}/conf/acl.auth.php"
|
79
|
-
cp "#{hook_path}/templates/local.php", "#{app_path}/conf/local.php"
|
80
|
-
cp "#{hook_path}/templates/plugins.local.php", "#{app_path}/conf/plugin.local.php"
|
84
|
+
resource_path = path(resource('stable-release'))
|
85
|
+
run "tar xf #{resource_path} -C #{app_path} --strip-components=1"
|
81
86
|
|
82
|
-
|
83
|
-
|
84
|
-
`status-set active Dokuwiki Install finished.`
|
87
|
+
rm app_path/"conf/install.php"
|
88
|
+
status :active, "Dokuwiki configuration updated."
|
85
89
|
end
|
86
90
|
|
87
|
-
|
88
|
-
|
89
|
-
app_path = `config-get app_path`
|
90
|
-
hook_path = ENV['JUJU_CHARM_DIR']
|
91
|
-
|
92
|
-
admin_user = `config-get #{admin_user}`
|
93
|
-
admin_password = `config-get admin_password`
|
94
|
-
admin_name = `config-get admin_name`
|
95
|
-
admin_email = `config-get admin_email`
|
96
|
-
template "#{hook_path}/templates/users.auth.php",
|
97
|
-
"#{app_path}/conf/users.auth.php",
|
98
|
-
admin_user: admin_user,
|
99
|
-
admin_password: admin_password,
|
100
|
-
admin_name: admin_name,
|
101
|
-
admin_email: admin_email
|
102
|
-
|
103
|
-
template "#{hook_path}/templates/vhost.conf",
|
104
|
-
"/etc/nginx/sites-enabled/default",
|
105
|
-
public_address: unit('public-address'),
|
106
|
-
app_path: app_path
|
107
|
-
|
108
|
-
chown_R 'www-data', 'www-data', app_path
|
109
|
-
|
110
|
-
# TODO: service :restart, "nginx"
|
111
|
-
# TODO: service :restart, "php7.0-fpm"
|
112
|
-
`systemctl restart php7.0-fpm`
|
113
|
-
`systemctl restart nginx`
|
114
|
-
`status-set active Ready`
|
91
|
+
test do
|
92
|
+
cmd.test '-e /etc/passwd'
|
115
93
|
end
|
116
94
|
end
|
117
95
|
```
|
118
96
|
|
119
|
-
The core of Charmkit
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
reside in *charmkit/plugin/{name}* as seen in the example syntax above.
|
97
|
+
The core of Charmkit is relatively small and everything is handled through
|
98
|
+
scrolls (read
|
99
|
+
plugins). [Visit Charmkit Scrolls](https://github.com/charmkit/charmkit-scrolls)
|
100
|
+
for more information.
|
124
101
|
|
125
|
-
## Using local plugins
|
126
102
|
|
127
|
-
|
128
|
-
itself. To add a task either create a directory inside your charm (eg.
|
129
|
-
**tasks**) and name the file something relvant. For example, to create a plugin
|
130
|
-
that will install **vim** you would do the following inside your charm directory:
|
131
|
-
|
132
|
-
Create a file **tasks/vim.rb** with the below syntax:
|
103
|
+
## Packaging the Charm
|
133
104
|
|
134
|
-
```ruby
|
135
|
-
namespace :vim do
|
136
|
-
desc "install vim"
|
137
|
-
task :install do
|
138
|
-
system("apt-get install -qyf vim")
|
139
|
-
end
|
140
|
-
end
|
141
105
|
```
|
142
|
-
|
143
|
-
And in your **Rakefile** include it in using the **require_relative** syntax:
|
144
|
-
|
145
|
-
```ruby
|
146
|
-
require 'charmkit'
|
147
|
-
require_relative 'tasks/vim'
|
106
|
+
$ bundle exec charmkit build
|
148
107
|
```
|
149
108
|
|
150
|
-
|
151
|
-
|
109
|
+
This will package and cache all required gems, along with making sure the necessary
|
110
|
+
scrolls are included. The output will be a charm that you can deploy via:
|
152
111
|
|
153
112
|
```
|
154
|
-
|
113
|
+
$ juju deploy dist/.
|
155
114
|
```
|
156
115
|
|
157
|
-
##
|
158
|
-
|
159
|
-
You'll want to make sure that any Ruby gems used are packaged with your charm so
|
160
|
-
that you aren't forcing users to try to download those dependencies during
|
161
|
-
deployment.
|
116
|
+
## Uploading to charm store
|
162
117
|
|
163
|
-
|
118
|
+
Once the charm is built simply run:
|
164
119
|
|
165
120
|
```
|
166
|
-
$
|
121
|
+
$ charm push dist/.
|
167
122
|
```
|
168
123
|
|
169
|
-
This will place your deps inside `vendor/cache` which will be uploaded when
|
170
|
-
executing a `charm push .`
|
171
|
-
|
172
124
|
## Development
|
173
125
|
|
174
126
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
data/charmkit.gemspec
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'charmkit/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
6
|
spec.name = "charmkit"
|
8
|
-
spec.version =
|
7
|
+
spec.version = "1.0.0"
|
9
8
|
spec.authors = ["Adam Stokes"]
|
10
9
|
spec.email = ["battlemidget@users.noreply.github.com"]
|
11
10
|
|
@@ -21,9 +20,10 @@ Gem::Specification.new do |spec|
|
|
21
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
21
|
spec.require_paths = ["lib"]
|
23
22
|
|
24
|
-
spec.add_dependency "tty-command"
|
23
|
+
spec.add_dependency "tty-command", "~> 0.2.0"
|
25
24
|
spec.add_dependency "activesupport"
|
26
25
|
spec.add_dependency "thor"
|
26
|
+
spec.add_dependency "rake"
|
27
27
|
|
28
28
|
spec.add_development_dependency "bundler", "~> 1.13"
|
29
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- mode:ruby -*-
|
2
|
+
|
3
|
+
depends_on "nginx-full"
|
4
|
+
depends_on "php-fpm"
|
5
|
+
depends_on "php-cgi"
|
6
|
+
depends_on "php-curl"
|
7
|
+
depends_on "php-gd"
|
8
|
+
depends_on "php-json"
|
9
|
+
depends_on "php-mcrypt"
|
10
|
+
depends_on "php-readline"
|
11
|
+
depends_on "php-mbstring"
|
12
|
+
depends_on "php-xml"
|
13
|
+
|
14
|
+
hook "install" do
|
15
|
+
release = "#{config['release']}-release"
|
16
|
+
app_path = config 'app_path'
|
17
|
+
hook_path = ENV['JUJU_CHARM_DIR']
|
18
|
+
run "tar xf #{resource[release]} -C #{app_path} --strip-components=1"
|
19
|
+
rm "#{app_path}/conf/install.php" if is_file? "#{app_path}/conf/install.php"
|
20
|
+
cp "#{hook_path}/templates/acl.auth.php", "#{app_path}/conf/acl.auth.php"
|
21
|
+
cp "#{hook_path}/templates/local.php", "#{app_path}/conf/local.php"
|
22
|
+
cp "#{hook_path}/templates/plugins.local.php", "#{app_path}/conf/plugin.local.php"
|
23
|
+
file "/etc/dokuwiki-release", content: release
|
24
|
+
case release
|
25
|
+
when "stable"
|
26
|
+
version = cat "#{app_path}/VERSION"
|
27
|
+
run "application-version-set '#{version}'"
|
28
|
+
when "development"
|
29
|
+
t = Time.now
|
30
|
+
version = t.strftime "%Y-%m-%d"
|
31
|
+
run "application-version-set 'development-#{version}'"
|
32
|
+
else
|
33
|
+
status :blocked, "Unable to set proper application version"
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
hook "config-changed" do
|
39
|
+
app_path = config 'app_path'
|
40
|
+
hook_path = ENV['JUJU_CHARM_DIR']
|
41
|
+
installed_release = cat "/etc/dokuwiki-release"
|
42
|
+
release = config 'release'
|
43
|
+
if !installed_release.eql? release
|
44
|
+
run './hooks/install'
|
45
|
+
end
|
46
|
+
|
47
|
+
admin_user = config 'admin_user'
|
48
|
+
admin_password = config 'admin_password'
|
49
|
+
admin_name = config 'admin_name'
|
50
|
+
admin_email = config 'admin_email'
|
51
|
+
template "#{hook_path}/templates/users.auth.php",
|
52
|
+
"#{app_path}/conf/users.auth.php",
|
53
|
+
admin_user: admin_user,
|
54
|
+
admin_password: admin_password,
|
55
|
+
admin_name: admin_name,
|
56
|
+
admin_email: admin_email
|
57
|
+
|
58
|
+
template "#{hook_path}/templates/vhost.conf",
|
59
|
+
"/etc/nginx/sites-enabled/default",
|
60
|
+
public_address: unit['public-address'],
|
61
|
+
app_path: app_path
|
62
|
+
|
63
|
+
chown_R 'www-data', 'www-data', app_path
|
64
|
+
run "systemctl restart nginx"
|
65
|
+
status :active, "Ready"
|
66
|
+
end
|
data/examples/basic.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
source "https://rubygems.org"
|
3
|
+
|
4
|
+
gem "charmkit", :github => "charmkit/charmkit"
|
5
|
+
gem "rake"
|
6
|
+
gem "rspec"
|
7
|
+
|
8
|
+
# If you wish to load additional scrolls add those here
|
9
|
+
gem "charmkit-scroll-nginx", :github => "charmkit/charmkit-scrolls-nginx"
|
10
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/charmkit/charmkit-scrolls-nginx.git
|
3
|
+
revision: d0a7493d4832de2588a136afb8b312569b8a1158
|
4
|
+
specs:
|
5
|
+
charmkit-scroll-nginx (0.2.0)
|
6
|
+
|
7
|
+
GIT
|
8
|
+
remote: git://github.com/charmkit/charmkit.git
|
9
|
+
revision: 9dc6a1acb34c8c0bf63977e68b5c60ab74242b87
|
10
|
+
specs:
|
11
|
+
charmkit (1.0.2)
|
12
|
+
activesupport
|
13
|
+
thor
|
14
|
+
tty-command (~> 0.2.0)
|
15
|
+
|
16
|
+
GEM
|
17
|
+
remote: https://rubygems.org/
|
18
|
+
specs:
|
19
|
+
activesupport (5.0.1)
|
20
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
21
|
+
i18n (~> 0.7)
|
22
|
+
minitest (~> 5.1)
|
23
|
+
tzinfo (~> 1.1)
|
24
|
+
concurrent-ruby (1.0.4)
|
25
|
+
diff-lcs (1.3)
|
26
|
+
equatable (0.5.0)
|
27
|
+
i18n (0.7.0)
|
28
|
+
minitest (5.10.1)
|
29
|
+
pastel (0.6.1)
|
30
|
+
equatable (~> 0.5.0)
|
31
|
+
tty-color (~> 0.3.0)
|
32
|
+
rake (12.0.0)
|
33
|
+
rspec (3.5.0)
|
34
|
+
rspec-core (~> 3.5.0)
|
35
|
+
rspec-expectations (~> 3.5.0)
|
36
|
+
rspec-mocks (~> 3.5.0)
|
37
|
+
rspec-core (3.5.4)
|
38
|
+
rspec-support (~> 3.5.0)
|
39
|
+
rspec-expectations (3.5.0)
|
40
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
+
rspec-support (~> 3.5.0)
|
42
|
+
rspec-mocks (3.5.0)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.5.0)
|
45
|
+
rspec-support (3.5.0)
|
46
|
+
thor (0.19.4)
|
47
|
+
thread_safe (0.3.5)
|
48
|
+
tty-color (0.3.0)
|
49
|
+
tty-command (0.2.0)
|
50
|
+
pastel (~> 0.6.0)
|
51
|
+
tzinfo (1.2.2)
|
52
|
+
thread_safe (~> 0.1)
|
53
|
+
|
54
|
+
PLATFORMS
|
55
|
+
ruby
|
56
|
+
|
57
|
+
DEPENDENCIES
|
58
|
+
charmkit!
|
59
|
+
charmkit-scroll-nginx!
|
60
|
+
rake
|
61
|
+
rspec
|
62
|
+
|
63
|
+
BUNDLED WITH
|
64
|
+
1.13.7
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Overview
|
2
|
+
|
3
|
+
My charm Overview
|
4
|
+
|
5
|
+
# Usage
|
6
|
+
|
7
|
+
$ juju deploy demo
|
8
|
+
|
9
|
+
# Developers
|
10
|
+
|
11
|
+
How developers can contribute
|
12
|
+
|
13
|
+
# Maintainers
|
14
|
+
|
15
|
+
How QA and others can test your charm
|
16
|
+
|
17
|
+
# Author
|
18
|
+
|
19
|
+
Your name <mememe@email.com>
|
20
|
+
|
21
|
+
# Copyright
|
22
|
+
|
23
|
+
2016 Your name
|
24
|
+
|
25
|
+
# License
|
26
|
+
|
27
|
+
MIT
|
@@ -1,8 +1,6 @@
|
|
1
1
|
#!/bin/sh
|
2
|
-
|
3
2
|
apt-get update && apt-get install -qyf ruby bundler --no-install-recommends
|
4
|
-
|
5
|
-
bundle install --local --quiet
|
6
|
-
|
3
|
+
bundle install --local --quiet --without development
|
7
4
|
# Do install task
|
8
|
-
bundle exec rake
|
5
|
+
bundle exec rake install
|
6
|
+
|