hookit 0.7.11

Sign up to get free protection for your applications and to get access to all the features.
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: []