genesis_framework 0.5.3 → 0.6.4

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjEyOTg3NDE2MmZlZWU5N2I3MTViNDI1MWMzNTVkYTE4ZTk5MGJmZQ==
5
- data.tar.gz: !binary |-
6
- MTNiMGFjMzZjNTBlNjljNDMyMzIxZTY3ODEwNGY0YzhlMGE4YjNmMQ==
2
+ SHA1:
3
+ metadata.gz: 72e5ea5818f16ed9e866a00db09a468bf72b086d
4
+ data.tar.gz: 55293b54b5ba7f13ad5ab78ba465355ecbaa66a9
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ODQ2ZmY4NzM4MzI2ODVlOGU2ODc4NGY3OTJlNGJlOTIyZjAzMzZkNGIzNzA3
10
- NjljOTNlNjNkOGFlNmYyNTYyMDc0NzgwM2E4MGIxYzlmYzI1MzI0NzZjYjdl
11
- MTkyNmNjYmY0YmVhZWU0YTYzMTBiNjYwYzJhODZlYmJlZmJlMjE=
12
- data.tar.gz: !binary |-
13
- ZTU2ZmZjOTQ1ZmQyOTRhNmYzNDhkMGJjMDY5ZmI0NjkxNTg0NGIxNTU5MmRl
14
- NjkwMzVlN2UyNTBmNzA5NjdkZTFkZDY4MDJiNGNjNTFlYzBjZDIwNDgzZmNj
15
- NmI0MmJlN2RiNzQ5NTY1MTQ3NDk1YWE5OTQ3NjIyNzdjOWM4NmM=
6
+ metadata.gz: 2ff72c88bf6a0c3585f26c3bf062dad5d173b0c7f2b032ee28e35b3d40cdec404830d46fc5b8fdbe076bf5ea929f1a5d85a4c49aed3ec5dd6495c5021f2c7160
7
+ data.tar.gz: e8a1878de23372af3d813737de5a9568ed25d76f701c8508c0c24441270454a589c5d061d0edaa8cfb273c285fdd1bc459878abf40745e77b78356c036f1a4cf
@@ -112,32 +112,51 @@ module Genesis
112
112
  raise 'yum install exited with status: ' + $?.exitstatus.to_s
113
113
  end
114
114
  elsif provider == :gem
115
+ # convert arguments in "what" to a gem_name => [requires_list] structure
116
+ gems = {}
117
+ what.each { |item|
118
+ if item.is_a?(Hash)
119
+ gems.merge! item
120
+ else
121
+ gems[item] = [item]
122
+ end
123
+ }
124
+
115
125
  # We give a decent try at detecting if the gem is
116
126
  # installed before trying to reinstall again.
117
127
  # If it contains a - (aka you are specifying a specific version
118
128
  # or a / (aka you are specifying a path to find it) then
119
129
  # we punt on trying to determine if the gem is already
120
130
  # installed and just pass it to install anyway.
121
- gems = what.select do |item|
122
- item.include?("-") \
123
- || item.include?("/") \
124
- || Gem::Dependency.new(item).matching_specs.count == 0
131
+ install_gems = gems.select do |gem, requires|
132
+ gem.include?("-") \
133
+ || gem.include?("/") \
134
+ || Gem::Dependency.new(gem).matching_specs.count == 0
125
135
  end
126
- if gems.size > 0 # make sure we still have something to do
127
- Kernel.system('gem', 'install', '--no-ri', '--no-rdoc', *gems)
136
+
137
+ if install_gems.size > 0 # make sure we still have something to do
138
+ options = config.fetch(:gem_args, '').split
139
+ args = (options << install_gems.keys).flatten
140
+ Kernel.system('gem', 'install', *args)
128
141
  if $?.exitstatus != 0
129
- raise "gem install #{gems.join(' ')} exited with status: " \
142
+ raise "gem install #{args.join(' ')} exited with status: " \
130
143
  + $?.exitstatus.to_s
131
144
  end
132
145
  else # be noisy that we aren't doing anything
133
- puts "already installed gems: #{what.join(' ')}"
146
+ puts "already installed gems: #{gems.keys.join(' ')}"
134
147
  end
135
148
 
136
149
  # now need to clear out the Gem cache so we can load it
137
150
  Gem.clear_paths
138
151
 
139
- # Now we require all the gems you asked to be installed
140
- what.all? { |gem| require gem }
152
+ # Attempt to require loaded gems, print a message if we can't.
153
+ gems.each { |gem, requires|
154
+ begin
155
+ requires.each {|r| require r }
156
+ rescue LoadError
157
+ raise "Could not load gem #{gem} automatically. Maybe the gem name differs from its load path? Please specify the name to require."
158
+ end
159
+ }
141
160
  else
142
161
  raise 'Unknown install provider: ' + provider.to_s
143
162
  end
@@ -16,8 +16,12 @@ module Genesis
16
16
  end
17
17
  end
18
18
 
19
+ def self.has_block? blocks, sym
20
+ blocks.has_key?(sym) && blocks[sym].respond_to?(:call)
21
+ end
22
+
19
23
  def self.call_block blocks, sym, msg = nil
20
- if blocks.has_key?(sym) && blocks[sym].respond_to?(:call)
24
+ if self.has_block? blocks, sym
21
25
  puts msg if msg
22
26
  blocks[sym].call
23
27
  else
@@ -48,7 +52,13 @@ module Genesis
48
52
  def self.execute task_name
49
53
  puts "\n#{task_name}\n================================================="
50
54
 
51
- return unless Genesis::PromptCLI.ask("Would you like to run this task?", 10, true) == true
55
+ prompt_timeout = ENV['GENESIS_PROMPT_TIMEOUT'] \
56
+ || Genesis::Framework::Utils.config_cache['task_prompt_timeout'] \
57
+ || 10
58
+ if prompt_timeout.to_i > 0
59
+ # only prompt if there is a resonable timeout
60
+ return true unless Genesis::PromptCLI.ask("Would you like to run this task?", prompt_timeout, true)
61
+ end
52
62
 
53
63
  task = Genesis::Framework::Tasks.const_get(task_name)
54
64
 
@@ -123,7 +133,9 @@ module Genesis
123
133
  puts "task is successful!"
124
134
  else
125
135
  puts 'task failed!!!'
126
- success = self.call_block(task.blocks, :rollback, "rolling back!")
136
+ if self.has_block? task.blocks, :rollback
137
+ success = self.call_block(task.blocks, :rollback, "rolling back!")
138
+ end
127
139
  end
128
140
 
129
141
  puts "\n\n"
@@ -133,4 +145,3 @@ module Genesis
133
145
  end
134
146
  end
135
147
  end
136
-
@@ -1,4 +1,3 @@
1
- require 'syslog'
2
1
  require 'collins_client'
3
2
  require 'facter'
4
3
 
@@ -14,6 +13,7 @@ module Genesis
14
13
  @@config_cache = Hash.new
15
14
  @@collins_conn = nil
16
15
  @@facter = nil
16
+ @@loggers = nil
17
17
 
18
18
  # mimicking rail's cattr_accessor
19
19
  def self.config_cache
@@ -44,11 +44,19 @@ module Genesis
44
44
  def self.log subsystem, message
45
45
  logline = subsystem.to_s + " :: " + message
46
46
  puts logline
47
- Syslog.open("genesis", Syslog::LOG_PID, Syslog::LOG_USER) unless Syslog.opened?
48
- Syslog.log(Syslog::LOG_INFO, logline)
49
- if self.facter['asset_tag']
50
- self.collins.log! self.facter['asset_tag'], message
47
+
48
+ # Load external logging modules and send log to them
49
+ if @@loggers.nil?
50
+ @@loggers = self.config_cache[:loggers].map {|logger|
51
+ begin
52
+ require "logging/#{logger.downcase}"
53
+ Logging.const_get(logger.to_sym)
54
+ rescue LoadError
55
+ puts "Could not load logger #{logger}"
56
+ end
57
+ }.compact
51
58
  end
59
+ @@loggers.each {|logger| logger.log logline}
52
60
  end
53
61
  end
54
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genesis_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Johnstone
@@ -10,86 +10,86 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-12-29 00:00:00.000000000 Z
13
+ date: 2015-07-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: genesis_promptcli
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0.2'
22
- - - ! '>='
22
+ - - ">="
23
23
  - !ruby/object:Gem::Version
24
24
  version: 0.2.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
- - - ~>
29
+ - - "~>"
30
30
  - !ruby/object:Gem::Version
31
31
  version: '0.2'
32
- - - ! '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: 0.2.0
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: genesis_retryingfetcher
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.4'
42
- - - ! '>='
42
+ - - ">="
43
43
  - !ruby/object:Gem::Version
44
44
  version: 0.4.0
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
48
48
  requirements:
49
- - - ~>
49
+ - - "~>"
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0.4'
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.4.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: collins_client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.2'
62
- - - ! '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: 0.2.0
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - ~>
69
+ - - "~>"
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0.2'
72
- - - ! '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.2.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: facter
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '2.0'
82
- - - ! '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: 2.0.0
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ~>
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
91
  version: '2.0'
92
- - - ! '>='
92
+ - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: 2.0.0
95
95
  description: Genesis is a project used to manage provisioning of hardware. This is
@@ -106,7 +106,7 @@ files:
106
106
  - lib/genesisframework/task.rb
107
107
  - lib/genesisframework/tasks.rb
108
108
  - lib/genesisframework/utils.rb
109
- homepage: https://github.ewr01.tumblr.net/Tumblr/genesis
109
+ homepage: https://github.com/Tumblr/genesis
110
110
  licenses:
111
111
  - Apache License, 2.0
112
112
  metadata: {}
@@ -116,17 +116,17 @@ require_paths:
116
116
  - lib
117
117
  required_ruby_version: !ruby/object:Gem::Requirement
118
118
  requirements:
119
- - - ! '>='
119
+ - - ">="
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ! '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  requirements: []
128
128
  rubyforge_project:
129
- rubygems_version: 2.2.2
129
+ rubygems_version: 2.4.6
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: Generic server onboarding framework