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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/README.md +46 -94
  4. data/charmkit.gemspec +3 -3
  5. data/examples/Charmkitfile +66 -0
  6. data/examples/basic.rb +6 -0
  7. data/examples/demo/Gemfile +10 -0
  8. data/examples/demo/Gemfile.lock +64 -0
  9. data/examples/demo/README.md +27 -0
  10. data/examples/demo/Rakefile +9 -0
  11. data/examples/demo/config.yaml +2 -0
  12. data/examples/demo/hooks/config-changed +3 -0
  13. data/examples/{my-demo-charm → demo}/hooks/install +3 -5
  14. data/examples/demo/hooks/leader-elected +3 -0
  15. data/examples/demo/hooks/leader-settings-changed +3 -0
  16. data/examples/demo/hooks/start +3 -0
  17. data/examples/demo/hooks/stop +3 -0
  18. data/examples/demo/hooks/update-status +3 -0
  19. data/examples/demo/hooks/upgrade-charm +3 -0
  20. data/examples/demo/metadata.yaml +9 -0
  21. data/examples/load-charmkit-file.rb +2 -0
  22. data/examples/plugin_loader.rb +9 -0
  23. data/examples/template.rb +6 -0
  24. data/examples/templates/user_auth.txt +1 -0
  25. data/exe/charmkit +5 -0
  26. data/lib/charmkit.rb +6 -7
  27. data/lib/charmkit/cli.rb +124 -0
  28. data/lib/charmkit/dependencies.rb +26 -0
  29. data/lib/charmkit/helpers.rb +5 -0
  30. data/lib/charmkit/helpers/crypt.rb +8 -6
  31. data/lib/charmkit/helpers/fs.rb +0 -15
  32. data/lib/charmkit/helpers/hookenv.rb +10 -0
  33. data/lib/charmkit/helpers/runner.rb +2 -1
  34. data/lib/charmkit/helpers/template.rb +1 -0
  35. data/lib/charmkit/hook.rb +47 -0
  36. data/lib/charmkit/scroll.rb +15 -0
  37. metadata +48 -29
  38. data/examples/my-demo-charm/Gemfile +0 -5
  39. data/examples/my-demo-charm/Gemfile.lock +0 -15
  40. data/examples/my-demo-charm/README.md +0 -45
  41. data/examples/my-demo-charm/Rakefile +0 -63
  42. data/examples/my-demo-charm/config.yaml +0 -21
  43. data/examples/my-demo-charm/copyright +0 -21
  44. data/examples/my-demo-charm/hooks/config-changed +0 -3
  45. data/examples/my-demo-charm/hooks/upgrade-charm +0 -3
  46. data/examples/my-demo-charm/icon.svg +0 -322
  47. data/examples/my-demo-charm/metadata.yaml +0 -18
  48. data/examples/my-demo-charm/readme +0 -1
  49. data/examples/my-demo-charm/tasks/vim.rb +0 -8
  50. data/examples/my-demo-charm/templates/acl.auth.php +0 -10
  51. data/examples/my-demo-charm/templates/local.php +0 -15
  52. data/examples/my-demo-charm/templates/plugins.local.php +0 -12
  53. data/examples/my-demo-charm/templates/users.auth.php +0 -11
  54. data/examples/my-demo-charm/templates/vhost.conf +0 -42
  55. data/examples/render_inline.rb +0 -59
  56. data/lib/charmkit/extend/string_tools.rb +0 -14
  57. data/lib/charmkit/plugins/nginx.rb +0 -8
  58. data/lib/charmkit/plugins/php.rb +0 -19
  59. data/lib/charmkit/version.rb +0 -14
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
- source "https://rubygems.org"
3
-
4
- gem "rake"
5
- gem "charmkit", "~> 0.4.0"
@@ -1,15 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- charmkit (0.4.1)
5
- rake (11.3.0)
6
-
7
- PLATFORMS
8
- ruby
9
-
10
- DEPENDENCIES
11
- charmkit (~> 0.4.0)
12
- rake
13
-
14
- BUNDLED WITH
15
- 1.13.6
@@ -1,45 +0,0 @@
1
- # Overview
2
-
3
- DokuWiki is a simple to use and highly versatile Open Source wiki software that
4
- doesn't require a database. It is loved by users for its clean and readable
5
- syntax. The ease of maintenance, backup and integration makes it an
6
- administrator's favorite. Built in access controls and authentication connectors
7
- make DokuWiki especially useful in the enterprise context and the large number
8
- of plugins contributed by its vibrant community allow for a broad range of use
9
- cases beyond a traditional wiki.
10
-
11
- # Usage
12
-
13
- $ juju deploy cs:~adam-stokes/dokuwiki
14
-
15
- ## Login
16
-
17
- Initial login and password are
18
-
19
- username: admin
20
- password: password
21
-
22
- # Developing
23
-
24
- ## Setting up
25
-
26
- As long as you have ruby and bundler installed you can do the following:
27
-
28
- ```
29
- bundle install
30
- bundle exec rake -T
31
- ```
32
-
33
- All tasks are kept in **Rakefile** and are called via **hooks/{hook-name}**.
34
-
35
- # Author
36
-
37
- Adam Stokes <adam.stokes@ubuntu.com>
38
-
39
- # Copyright
40
-
41
- 2016 Adam Stokes
42
-
43
- # License
44
-
45
- MIT
@@ -1,63 +0,0 @@
1
- # The below requires will pull in charmkit and its nginx and php plugins
2
- # which are provided with the library.
3
- require 'charmkit'
4
- require 'charmkit/plugins/nginx'
5
- require 'charmkit/plugins/php'
6
-
7
- # The below require_relative will load a local task from tasks/vim.rb
8
- require_relative "tasks/vim.rb"
9
-
10
-
11
-
12
- app_path = path(config('app_path'))
13
-
14
- namespace :dokuwiki do
15
-
16
- desc "Install Dokuwiki"
17
- # Notice that I set task dependencies on nginx, php, AND vim
18
- # so that they get installed prior to installing dokuwiki
19
- task :install => ["nginx:install", "php:install", "vim:install"] do
20
- resource_path = `resource-get stable-release`.chomp
21
-
22
- mkdir_p app_path unless app_path.directory?
23
-
24
- run "tar", "xf", resource_path, "-C", app_path, "--strip-components=1"
25
-
26
- cp "#{hook_path}/templates/acl.auth.php", "#{app_path}/conf/acl.auth.php"
27
- cp "#{hook_path}/templates/local.php", "#{app_path}/conf/local.php"
28
- cp "#{hook_path}/templates/plugins.local.php", "#{app_path}/conf/plugin.local.php"
29
-
30
- version = File.read "#{app_path}/VERSION"
31
- run "application-version-set", version.chomp
32
- run "status-set", "active", "Dokuwiki Install finished."
33
- end
34
-
35
- desc "Configure Dokuwiki"
36
- task :config_changed do
37
-
38
- admin_user = `config-get admin_user`.chomp
39
- admin_password = `config-get admin_password`.chomp
40
- admin_name = `config-get admin_name`.chomp
41
- admin_email = `config-get admin_email`.chomp
42
- template "#{hook_path}/templates/users.auth.php",
43
- "#{app_path}/conf/users.auth.php",
44
- admin_user: admin_user,
45
- admin_password: admin_password,
46
- admin_name: admin_name,
47
- admin_email: admin_email
48
-
49
- public_address = `unit-get public-address`.chomp
50
- template "#{hook_path}/templates/vhost.conf",
51
- "/etc/nginx/sites-enabled/default",
52
- public_address: public_address,
53
- app_path: app_path
54
-
55
- chown_R 'www-data', 'www-data', app_path
56
-
57
- `systemctl restart php7.0-fpm`
58
- `systemctl restart nginx`
59
- `status-set active "Ready"`
60
- end
61
- end
62
-
63
- task :default => 'dokuwiki:install'
@@ -1,21 +0,0 @@
1
- options:
2
- app_path:
3
- type: string
4
- default: "/srv/app"
5
- description: "Where Dokuwiki will be installed"
6
- admin_user:
7
- type: string
8
- default: admin
9
- description: "Admin username (default: admin)"
10
- admin_password:
11
- type: string
12
- default: "5f4dcc3b5aa765d61d8327deb882cf99"
13
- description: "Admin password md5 hash format (default password: password)"
14
- admin_name:
15
- type: string
16
- default: "The Admin"
17
- description: Admin name
18
- admin_email:
19
- type: string
20
- default: "admin@example.com"
21
- description: Admin email
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2016 Adam Stokes <adam.stokes@ubuntu.com>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- bundle exec rake dokuwiki:config_changed
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- ./hooks/install
@@ -1,322 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:xlink="http://www.w3.org/1999/xlink"
11
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
- width="96"
14
- height="96"
15
- id="svg6517"
16
- version="1.1"
17
- inkscape:version="0.91 r13725"
18
- sodipodi:docname="icon.svg">
19
- <defs
20
- id="defs6519">
21
- <linearGradient
22
- id="Background">
23
- <stop
24
- id="stop4178"
25
- offset="0"
26
- style="stop-color:#b8b8b8;stop-opacity:1" />
27
- <stop
28
- id="stop4180"
29
- offset="1"
30
- style="stop-color:#c9c9c9;stop-opacity:1" />
31
- </linearGradient>
32
- <filter
33
- style="color-interpolation-filters:sRGB;"
34
- inkscape:label="Inner Shadow"
35
- id="filter1121">
36
- <feFlood
37
- flood-opacity="0.59999999999999998"
38
- flood-color="rgb(0,0,0)"
39
- result="flood"
40
- id="feFlood1123" />
41
- <feComposite
42
- in="flood"
43
- in2="SourceGraphic"
44
- operator="out"
45
- result="composite1"
46
- id="feComposite1125" />
47
- <feGaussianBlur
48
- in="composite1"
49
- stdDeviation="1"
50
- result="blur"
51
- id="feGaussianBlur1127" />
52
- <feOffset
53
- dx="0"
54
- dy="2"
55
- result="offset"
56
- id="feOffset1129" />
57
- <feComposite
58
- in="offset"
59
- in2="SourceGraphic"
60
- operator="atop"
61
- result="composite2"
62
- id="feComposite1131" />
63
- </filter>
64
- <filter
65
- style="color-interpolation-filters:sRGB;"
66
- inkscape:label="Drop Shadow"
67
- id="filter950">
68
- <feFlood
69
- flood-opacity="0.25"
70
- flood-color="rgb(0,0,0)"
71
- result="flood"
72
- id="feFlood952" />
73
- <feComposite
74
- in="flood"
75
- in2="SourceGraphic"
76
- operator="in"
77
- result="composite1"
78
- id="feComposite954" />
79
- <feGaussianBlur
80
- in="composite1"
81
- stdDeviation="1"
82
- result="blur"
83
- id="feGaussianBlur956" />
84
- <feOffset
85
- dx="0"
86
- dy="1"
87
- result="offset"
88
- id="feOffset958" />
89
- <feComposite
90
- in="SourceGraphic"
91
- in2="offset"
92
- operator="over"
93
- result="composite2"
94
- id="feComposite960" />
95
- </filter>
96
- <clipPath
97
- clipPathUnits="userSpaceOnUse"
98
- id="clipPath873">
99
- <g
100
- transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)"
101
- id="g875"
102
- inkscape:label="Layer 1"
103
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline">
104
- <path
105
- style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
106
- d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z"
107
- id="path877"
108
- inkscape:connector-curvature="0"
109
- sodipodi:nodetypes="sssssssss" />
110
- </g>
111
- </clipPath>
112
- <filter
113
- inkscape:collect="always"
114
- id="filter891"
115
- inkscape:label="Badge Shadow">
116
- <feGaussianBlur
117
- inkscape:collect="always"
118
- stdDeviation="0.71999962"
119
- id="feGaussianBlur893" />
120
- </filter>
121
- </defs>
122
- <sodipodi:namedview
123
- id="base"
124
- pagecolor="#ffffff"
125
- bordercolor="#666666"
126
- borderopacity="1.0"
127
- inkscape:pageopacity="0.0"
128
- inkscape:pageshadow="2"
129
- inkscape:zoom="1"
130
- inkscape:cx="39.339828"
131
- inkscape:cy="216.87971"
132
- inkscape:document-units="px"
133
- inkscape:current-layer="layer1"
134
- showgrid="false"
135
- fit-margin-top="0"
136
- fit-margin-left="0"
137
- fit-margin-right="0"
138
- fit-margin-bottom="0"
139
- inkscape:window-width="1920"
140
- inkscape:window-height="1043"
141
- inkscape:window-x="1914"
142
- inkscape:window-y="0"
143
- inkscape:window-maximized="1"
144
- showborder="true"
145
- showguides="false"
146
- inkscape:guide-bbox="true"
147
- inkscape:showpageshadow="false"
148
- inkscape:snap-bbox="true">
149
- <inkscape:grid
150
- type="xygrid"
151
- id="grid821"
152
- empspacing="5"
153
- visible="true"
154
- enabled="true"
155
- snapvisiblegridlinesonly="true" />
156
- <sodipodi:guide
157
- orientation="1,0"
158
- position="16,48"
159
- id="guide823" />
160
- <sodipodi:guide
161
- orientation="0,1"
162
- position="64,80"
163
- id="guide825" />
164
- <sodipodi:guide
165
- orientation="1,0"
166
- position="80,40"
167
- id="guide827" />
168
- <sodipodi:guide
169
- orientation="0,1"
170
- position="64,16"
171
- id="guide829" />
172
- </sodipodi:namedview>
173
- <metadata
174
- id="metadata6522">
175
- <rdf:RDF>
176
- <cc:Work
177
- rdf:about="">
178
- <dc:format>image/svg+xml</dc:format>
179
- <dc:type
180
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
181
- <dc:title />
182
- </cc:Work>
183
- </rdf:RDF>
184
- </metadata>
185
- <g
186
- inkscape:label="BACKGROUND"
187
- inkscape:groupmode="layer"
188
- id="layer1"
189
- transform="translate(268,-635.29076)"
190
- style="display:inline">
191
- <path
192
- style="fill:#262a2d;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)"
193
- d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z"
194
- id="path6455"
195
- inkscape:connector-curvature="0"
196
- sodipodi:nodetypes="sssssssss" />
197
- <g
198
- style="opacity:0.7"
199
- id="g11"
200
- transform="matrix(0.62044056,0,0,0.62044056,-314.18126,593.62097)">
201
- <rect
202
- style="fill:#dcf0f0"
203
- x="112.197"
204
- y="168.302"
205
- width="31.702999"
206
- height="15.852"
207
- id="rect13" />
208
- <rect
209
- style="fill:#dcf0f0"
210
- x="159.75"
211
- y="168.302"
212
- width="31.683001"
213
- height="15.852"
214
- id="rect15" />
215
- <rect
216
- style="fill:#dcf0f0"
217
- x="112.173"
218
- y="136.599"
219
- width="79.269997"
220
- height="15.852"
221
- id="rect17" />
222
- <rect
223
- style="fill:#dcf0f0"
224
- x="112.197"
225
- y="104.898"
226
- width="47.558998"
227
- height="15.851"
228
- id="rect19" />
229
- <rect
230
- style="fill:#dcf0f0"
231
- x="175.60201"
232
- y="104.898"
233
- width="15.851"
234
- height="15.851"
235
- id="rect21" />
236
- </g>
237
- <image
238
- width="70"
239
- height="70"
240
- preserveAspectRatio="none"
241
- xlink:href="data:image/png;base64,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 "
242
- id="image3437"
243
- x="-254"
244
- y="648.29077" />
245
- </g>
246
- <g
247
- inkscape:groupmode="layer"
248
- id="layer3"
249
- inkscape:label="PLACE YOUR PICTOGRAM HERE"
250
- style="display:inline" />
251
- <g
252
- inkscape:groupmode="layer"
253
- id="layer2"
254
- inkscape:label="BADGE"
255
- style="display:none"
256
- sodipodi:insensitive="true">
257
- <g
258
- style="display:inline"
259
- transform="translate(-340.00001,-581)"
260
- id="g4394"
261
- clip-path="none">
262
- <g
263
- id="g855">
264
- <g
265
- inkscape:groupmode="maskhelper"
266
- id="g870"
267
- clip-path="url(#clipPath873)"
268
- style="opacity:0.6;filter:url(#filter891)">
269
- <path
270
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)"
271
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
272
- sodipodi:ry="12"
273
- sodipodi:rx="12"
274
- sodipodi:cy="552.36218"
275
- sodipodi:cx="252"
276
- id="path844"
277
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
278
- sodipodi:type="arc" />
279
- </g>
280
- <g
281
- id="g862">
282
- <path
283
- sodipodi:type="arc"
284
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
285
- id="path4398"
286
- sodipodi:cx="252"
287
- sodipodi:cy="552.36218"
288
- sodipodi:rx="12"
289
- sodipodi:ry="12"
290
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
291
- transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" />
292
- <path
293
- transform="matrix(1.25,0,0,1.25,33,-100.45273)"
294
- d="m 264,552.36218 a 12,12 0 0 1 -12,12 12,12 0 0 1 -12,-12 12,12 0 0 1 12,-12 12,12 0 0 1 12,12 z"
295
- sodipodi:ry="12"
296
- sodipodi:rx="12"
297
- sodipodi:cy="552.36218"
298
- sodipodi:cx="252"
299
- id="path4400"
300
- style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
301
- sodipodi:type="arc" />
302
- <path
303
- sodipodi:type="star"
304
- style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
305
- id="path4459"
306
- sodipodi:sides="5"
307
- sodipodi:cx="666.19574"
308
- sodipodi:cy="589.50385"
309
- sodipodi:r1="7.2431178"
310
- sodipodi:r2="4.3458705"
311
- sodipodi:arg1="1.0471976"
312
- sodipodi:arg2="1.6755161"
313
- inkscape:flatsided="false"
314
- inkscape:rounded="0.1"
315
- inkscape:randomized="0"
316
- d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z"
317
- transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" />
318
- </g>
319
- </g>
320
- </g>
321
- </g>
322
- </svg>