hookit 0.7.11

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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +3 -0
  6. data/Rakefile +10 -0
  7. data/bin/hookit +41 -0
  8. data/hookit.gemspec +30 -0
  9. data/lib/hookit/converginator.rb +141 -0
  10. data/lib/hookit/db.rb +37 -0
  11. data/lib/hookit/error.rb +8 -0
  12. data/lib/hookit/exit.rb +23 -0
  13. data/lib/hookit/helper/cron.rb +42 -0
  14. data/lib/hookit/helper/nfs.rb +113 -0
  15. data/lib/hookit/helper/shell.rb +35 -0
  16. data/lib/hookit/helper/xml.rb +25 -0
  17. data/lib/hookit/helper.rb +9 -0
  18. data/lib/hookit/hook.rb +102 -0
  19. data/lib/hookit/logger.rb +58 -0
  20. data/lib/hookit/logvac.rb +34 -0
  21. data/lib/hookit/platform/base.rb +11 -0
  22. data/lib/hookit/platform/smartos.rb +19 -0
  23. data/lib/hookit/platform/ubuntu.rb +19 -0
  24. data/lib/hookit/platform.rb +9 -0
  25. data/lib/hookit/platforms.rb +2 -0
  26. data/lib/hookit/registry.rb +53 -0
  27. data/lib/hookit/resource/base.rb +105 -0
  28. data/lib/hookit/resource/cron.rb +26 -0
  29. data/lib/hookit/resource/directory.rb +67 -0
  30. data/lib/hookit/resource/execute.rb +148 -0
  31. data/lib/hookit/resource/file.rb +71 -0
  32. data/lib/hookit/resource/hook_file.rb +80 -0
  33. data/lib/hookit/resource/link.rb +61 -0
  34. data/lib/hookit/resource/logrotate.rb +38 -0
  35. data/lib/hookit/resource/mount.rb +77 -0
  36. data/lib/hookit/resource/package.rb +74 -0
  37. data/lib/hookit/resource/rsync.rb +67 -0
  38. data/lib/hookit/resource/scp.rb +87 -0
  39. data/lib/hookit/resource/service.rb +89 -0
  40. data/lib/hookit/resource/socket.rb +67 -0
  41. data/lib/hookit/resource/template.rb +87 -0
  42. data/lib/hookit/resource/warning.rb +87 -0
  43. data/lib/hookit/resource/zfs.rb +99 -0
  44. data/lib/hookit/resource.rb +21 -0
  45. data/lib/hookit/resources.rb +15 -0
  46. data/lib/hookit/version.rb +3 -0
  47. data/lib/hookit.rb +27 -0
  48. metadata +205 -0
@@ -0,0 +1,87 @@
1
+ module Hookit
2
+ module Resource
3
+ class Warning < Base
4
+
5
+ field :source
6
+ field :content
7
+ field :stream
8
+
9
+ actions :warn
10
+ default_action :warn
11
+
12
+ def initialize(name)
13
+ source(name) unless source or content
14
+ stream :stdout unless stream
15
+
16
+ @default_header = "\u25BC\u25BC\u25BC\u25BC :: WARNING :: \u25BC\u25BC\u25BC\u25BC"
17
+ @block_width = @default_header.length
18
+ end
19
+
20
+ def run(action)
21
+ case action
22
+ when :warn
23
+ warn!
24
+ end
25
+ end
26
+
27
+ protected
28
+
29
+ def gem
30
+ dict[:template_gem]
31
+ end
32
+
33
+ def gem_spec
34
+ Gem::Specification.find_by_name(gem)
35
+ end
36
+
37
+ def gem_root
38
+ gem_spec.gem_dir
39
+ end
40
+
41
+ def content!
42
+ output_string ||= content or ::File.open("#{gem_root}/messages/#{source}").read
43
+ return output_string
44
+ end
45
+
46
+ def header!
47
+
48
+ header = @default_header
49
+ padding = "\u25BC"
50
+
51
+ longest_line = content!.split.sort_by {|x| x.length}.last
52
+
53
+ if longest_line.length > header.length
54
+
55
+ difference = longest_line.length - header.length
56
+ padding *= (difference.to_f / 2).ceil
57
+
58
+ header = padding + header + padding
59
+ end
60
+
61
+ @block_width = header.length
62
+
63
+ puts header
64
+ end
65
+
66
+ def footer!
67
+ footer = "\u25B2" * @block_width
68
+ puts footer
69
+ end
70
+
71
+ def warn!
72
+
73
+ header!
74
+
75
+ case stream
76
+ when :stdout
77
+ puts content!
78
+ when :stderr
79
+ $stderr.puts content!
80
+ end
81
+
82
+ footer!
83
+ end
84
+
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,99 @@
1
+ module Hookit
2
+ module Resource
3
+ class Zfs < Base
4
+
5
+ field :snapshot
6
+ field :dataset
7
+ field :destination
8
+ field :source
9
+ field :ssh_host
10
+ field :validator
11
+ field :options
12
+
13
+ actions :send, :receive, :transmit, :snapshot, :destroy, :rollback, :clone
14
+ default_action :send
15
+
16
+ def initialize(name)
17
+ snapshot(name) unless snapshot
18
+ super
19
+ end
20
+
21
+ def run(action)
22
+ case action
23
+ when :send
24
+ send!
25
+ when :receive
26
+ receive!
27
+ when :transmit
28
+ transmit!
29
+ when :snapshot
30
+ snapshot!
31
+ when :destroy
32
+ destroy!
33
+ when :rollback
34
+ rollback!
35
+ when :clone
36
+ clone!
37
+ end
38
+ end
39
+
40
+ def send!
41
+ run_command! "zfs send #{snapshot} | #{destination}"
42
+ end
43
+
44
+ def receive!
45
+ run_command! "#{source.to_s.strip} | zfs receive -F #{dataset}"
46
+ end
47
+
48
+ def transmit!
49
+ if ssh_host
50
+ run_command! "zfs send #{options} #{snapshot} | ssh -o stricthostkeychecking=no #{ssh_host} zfs receive -F #{dataset}"
51
+ else
52
+ run_command! "zfs send #{options} #{snapshot} | zfs receive -F #{dataset}"
53
+ end
54
+ end
55
+
56
+ def snapshot!
57
+ destroy!
58
+ run_command! "zfs snapshot #{snapshot}"
59
+ end
60
+
61
+ def destroy!
62
+ `zfs list -t snapshot | grep #{snapshot}`
63
+ if $?.exitstatus == 0
64
+ run_command! "zfs destroy #{snapshot}"
65
+ end
66
+ end
67
+
68
+ def rollback!
69
+ run_command! "zfs rollback -r #{snapshot}"
70
+ end
71
+
72
+ def clone!
73
+ run_command! "zfs clone #{snapshot} #{dataset}"
74
+ end
75
+
76
+ def validate!(res)
77
+ if validator.is_a? Proc
78
+ if validator.call(res)
79
+ res
80
+ else
81
+ raise "ERROR: execute resource \"#{name}\" failed validation!"
82
+ end
83
+ else
84
+ res
85
+ end
86
+ end
87
+
88
+ def run_command!(cmd, expect_code=0)
89
+ res = `#{cmd}`
90
+ code = $?.exitstatus
91
+ if code != expect_code
92
+ raise Hookit::Error::UnexpectedExit, "#{cmd} failed with exit code '#{code}'"
93
+ end
94
+ return validate!(res)
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,21 @@
1
+ require 'hookit/resource/base'
2
+ require 'hookit/resource/directory'
3
+ require 'hookit/resource/execute'
4
+ require 'hookit/resource/file'
5
+ require 'hookit/resource/hook_file'
6
+ require 'hookit/resource/link'
7
+ require 'hookit/resource/logrotate'
8
+ require 'hookit/resource/mount'
9
+ require 'hookit/resource/package'
10
+ require 'hookit/resource/rsync'
11
+ require 'hookit/resource/socket'
12
+ require 'hookit/resource/scp'
13
+ require 'hookit/resource/service'
14
+ require 'hookit/resource/template'
15
+ require 'hookit/resource/zfs'
16
+
17
+ module Hookit
18
+ module Resource
19
+
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ Hookit.resources.register(:directory) { Hookit::Resource::Directory }
2
+ Hookit.resources.register(:ensure_socket) { Hookit::Resource::Socket }
3
+ Hookit.resources.register(:execute) { Hookit::Resource::Execute }
4
+ Hookit.resources.register(:file) { Hookit::Resource::File }
5
+ Hookit.resources.register(:hook_file) { Hookit::Resource::HookFile }
6
+ Hookit.resources.register(:hookit_file) { Hookit::Resource::HookFile }
7
+ Hookit.resources.register(:link) { Hookit::Resource::Link }
8
+ Hookit.resources.register(:logrotate) { Hookit::Resource::Logrotate }
9
+ Hookit.resources.register(:mount) { Hookit::Resource::Mount }
10
+ Hookit.resources.register(:package) { Hookit::Resource::Package }
11
+ Hookit.resources.register(:rsync) { Hookit::Resource::Rsync }
12
+ Hookit.resources.register(:scp) { Hookit::Resource::Scp }
13
+ Hookit.resources.register(:service) { Hookit::Resource::Service }
14
+ Hookit.resources.register(:template) { Hookit::Resource::Template }
15
+ Hookit.resources.register(:zfs) { Hookit::Resource::Zfs }
@@ -0,0 +1,3 @@
1
+ module Hookit
2
+ VERSION = "0.7.11"
3
+ end
data/lib/hookit.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'hookit/converginator'
2
+ require 'hookit/db'
3
+ require 'hookit/error'
4
+ require 'hookit/exit'
5
+ require 'hookit/helper'
6
+ require 'hookit/hook'
7
+ require 'hookit/logger'
8
+ require 'hookit/logvac'
9
+ require 'hookit/platform'
10
+ require 'hookit/registry'
11
+ require 'hookit/resource'
12
+ require "hookit/version"
13
+
14
+ module Hookit
15
+ extend self
16
+
17
+ def resources
18
+ @resources ||= Hookit::Registry.new
19
+ end
20
+
21
+ def platforms
22
+ @platforms ||= Hookit::Registry.new
23
+ end
24
+ end
25
+
26
+ require 'hookit/resources'
27
+ require 'hookit/platforms'
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hookit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.11
5
+ platform: ruby
6
+ authors:
7
+ - Tyler Flint
8
+ - Greg Linton
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-06-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: tilt
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: erubis
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: oj
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: multi_json
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '1.3'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: excon
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: faraday
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: bundler
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: The core framework to provide hookit scripts with re-usable components.
127
+ email:
128
+ - tyler@pagodabox.com
129
+ executables:
130
+ - hookit
131
+ extensions: []
132
+ extra_rdoc_files: []
133
+ files:
134
+ - ".gitignore"
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.md
138
+ - Rakefile
139
+ - bin/hookit
140
+ - hookit.gemspec
141
+ - lib/hookit.rb
142
+ - lib/hookit/converginator.rb
143
+ - lib/hookit/db.rb
144
+ - lib/hookit/error.rb
145
+ - lib/hookit/exit.rb
146
+ - lib/hookit/helper.rb
147
+ - lib/hookit/helper/cron.rb
148
+ - lib/hookit/helper/nfs.rb
149
+ - lib/hookit/helper/shell.rb
150
+ - lib/hookit/helper/xml.rb
151
+ - lib/hookit/hook.rb
152
+ - lib/hookit/logger.rb
153
+ - lib/hookit/logvac.rb
154
+ - lib/hookit/platform.rb
155
+ - lib/hookit/platform/base.rb
156
+ - lib/hookit/platform/smartos.rb
157
+ - lib/hookit/platform/ubuntu.rb
158
+ - lib/hookit/platforms.rb
159
+ - lib/hookit/registry.rb
160
+ - lib/hookit/resource.rb
161
+ - lib/hookit/resource/base.rb
162
+ - lib/hookit/resource/cron.rb
163
+ - lib/hookit/resource/directory.rb
164
+ - lib/hookit/resource/execute.rb
165
+ - lib/hookit/resource/file.rb
166
+ - lib/hookit/resource/hook_file.rb
167
+ - lib/hookit/resource/link.rb
168
+ - lib/hookit/resource/logrotate.rb
169
+ - lib/hookit/resource/mount.rb
170
+ - lib/hookit/resource/package.rb
171
+ - lib/hookit/resource/rsync.rb
172
+ - lib/hookit/resource/scp.rb
173
+ - lib/hookit/resource/service.rb
174
+ - lib/hookit/resource/socket.rb
175
+ - lib/hookit/resource/template.rb
176
+ - lib/hookit/resource/warning.rb
177
+ - lib/hookit/resource/zfs.rb
178
+ - lib/hookit/resources.rb
179
+ - lib/hookit/version.rb
180
+ homepage: ''
181
+ licenses:
182
+ - MIT
183
+ metadata: {}
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 2.2.2
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: Hookit is a framework to provide hookit scripts with re-usable components
204
+ and resources via an elegant dsl.
205
+ test_files: []