corl 0.5.17 → 0.5.18

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0987aea3e56e4c6c391769f7a397327470928975
4
- data.tar.gz: f6ae921e7cfa279434d37dc835a9e49a4f633820
3
+ metadata.gz: 8361053e50647bdd9eda90cf1d701dd4e67823c4
4
+ data.tar.gz: 86bed71e62821663ea47a4209503ef228693592a
5
5
  SHA512:
6
- metadata.gz: 77bf6dc4495017957515547cf549783c35727342f1f3046f10bb118cdf4f716802c1e5312fb5f670844171bfd8c2adb79ad05286752e4c8d97b9dcf7ce82bb90
7
- data.tar.gz: 6f1005482750cd2f3f1e328165e16a24b3f31a9101e20adb84b4f481ac6c39af2250cc2862ca1c51929c61b4c2d23e774c2336556cbdaa903cc81830f01ea9e4
6
+ metadata.gz: 670aa0ad353180661a50ae027714b5a50203139799269cf141b91292a9e3d438632afea20949ab4a6e726f9f25667bcb1ec6e9bd9f91969e40c621a1d1d95668
7
+ data.tar.gz: c319e39d3377b8ac4bd55ef451b27bbb3ccf34cd2912cff3f1d8c9ebc398b7a259f77aea7358e00f3abcd028cc25297da8d8af4da0042092deced8b3d838f7f7
data/.gitignore CHANGED
@@ -58,3 +58,5 @@ tmp/
58
58
  .buildpath
59
59
  .cache
60
60
 
61
+ # Nucleon/CORL related
62
+ .project_cache
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.17
1
+ 0.5.18
@@ -7,61 +7,63 @@
7
7
  # https://github.com/coto/server-easy-install/blob/master/lib/core.sh
8
8
  #
9
9
  #-------------------------------------------------------------------------------
10
+ # OS Information
10
11
 
11
12
  function os_info() {
12
- OS=`lowercase \`uname\``
13
- KERNEL=`uname -r`
14
- MACHINE=`uname -m`
13
+ OS=`lowercase \`uname\``
14
+ KERNEL=`uname -r`
15
+ MACHINE=`uname -m`
15
16
 
16
- #---
17
+ #---
17
18
 
18
- if [ "${OS}" == "windowsnt" ]
19
- then
20
- OS=windows
19
+ if [ "${OS}" == "windowsnt" ]
20
+ then
21
+ OS=windows
21
22
 
22
- elif [ "${OS}" == "darwin" ]
23
+ elif [ "${OS}" == "darwin" ]
24
+ then
25
+ OS=mac
26
+ else
27
+ if [ "${OS}" = "linux" ]
23
28
  then
24
- OS=mac
25
- else
26
- if [ "${OS}" = "linux" ]
27
- then
28
- if [ -f /etc/redhat-release ]
29
- then
30
- OS=`cat /etc/redhat-release |sed s/\ release.*//`
31
- OS_NAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
32
- OS_VERSION=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
29
+ if [ -f /etc/redhat-release ]
30
+ then
31
+ OS=`cat /etc/redhat-release | sed s/\ release.*//`
32
+ OS=`lowercase "$OS"`
33
+ OS_NAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
34
+ OS_VERSION=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
33
35
 
34
- elif [ -f /etc/SuSE-release ]
35
- then
36
- OS=suse
37
- OS_NAME=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
38
- OS_VERSION=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
36
+ elif [ -f /etc/SuSE-release ]
37
+ then
38
+ OS=suse
39
+ OS_NAME=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
40
+ OS_VERSION=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
39
41
 
40
- elif [ -f /etc/mandrake-release ]
41
- then
42
- OS=mandriva
43
- OS_NAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
44
- OS_VERSION=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
42
+ elif [ -f /etc/mandrake-release ]
43
+ then
44
+ OS=mandriva
45
+ OS_NAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
46
+ OS_VERSION=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
45
47
 
46
- elif [ -f /etc/debian_version ]
47
- then
48
- DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'`
49
- OS_NAME=`cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }'`
50
- OS_VERSION=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
51
- fi
52
- if [ -f /etc/UnitedLinux-release ]
53
- then
54
- DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
55
- fi
56
- OS=`lowercase "$DIST"`
57
- fi
48
+ elif [ -f /etc/debian_version ]
49
+ then
50
+ DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'`
51
+ OS=`lowercase "$DIST"`
52
+ OS_NAME=`cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }'`
53
+ OS_VERSION=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
54
+
55
+ elif [ -f /etc/UnitedLinux-release ]
56
+ then
57
+ DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
58
+ OS=`lowercase "$DIST"`
59
+ fi
58
60
  fi
61
+ fi
59
62
  }
60
63
 
61
64
  #-------------------------------------------------------------------------------
62
65
  # Utilities
63
66
 
64
67
  function lowercase() {
65
- echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
68
+ echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
66
69
  }
67
-
@@ -15,13 +15,18 @@ fi
15
15
  # Set OpenDNS as our DNS lookup source
16
16
  echo "3. Setting command DNS gateways"
17
17
  echo "nameserver 208.67.222.222" | tee /etc/resolvconf/resolv.conf.d/base > /dev/null || exit 3
18
+ resolvconf -u || exit 4
19
+
20
+ # Force time update (for systems without a hardware clock / Raspberry Pi)
21
+ echo "4. Forcing system time update"
22
+ ntpdate -s time.nist.gov
18
23
 
19
24
  # Update system packages
20
- echo "4. Updating system packages"
25
+ echo "5. Updating system packages"
21
26
  apt-get update >/tmp/update.log 2>&1 || exit 5
22
27
 
23
28
  # Install basic build packages.
24
- echo "5. Ensuring basic libraries and development utilities"
29
+ echo "6. Ensuring basic libraries and development utilities"
25
30
  apt-get -y install build-essential cmake rake bindfs libnl-dev libpopt-dev \
26
31
  libssl-dev libcurl4-openssl-dev libxslt-dev libxml2-dev \
27
32
  libyaml-dev libreadline-dev libncurses5-dev zlib1g-dev texinfo \
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: corl 0.5.17 ruby lib
5
+ # stub: corl 0.5.18 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "corl"
9
- s.version = "0.5.17"
9
+ s.version = "0.5.18"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Adrian Webb"]
14
- s.date = "2015-04-29"
14
+ s.date = "2015-05-11"
15
15
  s.description = "Framework that provides a simple foundation for growing organically in the cloud"
16
16
  s.email = "adrian.webb@coralnexus.com"
17
17
  s.executables = ["corl"]
@@ -107,7 +107,10 @@ class Raspberrypi < Nucleon.plugin_class(:CORL, :machine)
107
107
 
108
108
  def reload(options = {})
109
109
  super do
110
- node.command('reboot', { :as_admin => true })
110
+ success = node.command('reboot', { :as_admin => true })
111
+ sleep 5
112
+ sleep 1 until running?
113
+ success
111
114
  end
112
115
  end
113
116
 
@@ -14,10 +14,6 @@ class Raspberrypi < Nucleon.plugin_class(:CORL, :node)
14
14
  #-----------------------------------------------------------------------------
15
15
  # Checks
16
16
 
17
- def local?
18
- false
19
- end
20
-
21
17
  #-----------------------------------------------------------------------------
22
18
  # Property accessors / modifiers
23
19
 
@@ -25,11 +25,10 @@ class Node < Nucleon.plugin_class(:nucleon, :base)
25
25
 
26
26
  unless reload
27
27
  @cli_interface = Util::Liquid.new do |method, args, &code|
28
- result = exec({ :commands => [ [ method, args ].flatten.join(' ') ] }) do |op, data|
28
+ result = command([ method, args ].flatten.join(' '), { :as_admin => true }) do |op, data|
29
29
  code.call(op, data) if code
30
30
  end
31
31
  if result
32
- result = result.first
33
32
  warn(result.errors, { :i18n => false }) unless result.errors.empty?
34
33
  end
35
34
  result
@@ -222,8 +222,21 @@ class Provisioner < Nucleon.plugin_class(:nucleon, :base)
222
222
 
223
223
  while config.has_key?(:extend) do
224
224
  array(config.delete(:extend)).each do |parent|
225
- parent = profile_id(package, parent) unless parent.match('::')
225
+ parent = profile_id(package, parent) unless parent.match('::')
226
+ parent_base = parent.sub(/::[^:]+$/, '')
226
227
  parents << parent
228
+
229
+ if profiles[parent.to_sym].has_key?(:extend)
230
+ extends = []
231
+ array(profiles[parent.to_sym][:extend]).each do |extend|
232
+ if extend.include?('::')
233
+ extends << extend
234
+ else
235
+ extends << "#{parent_base}::#{extend}"
236
+ end
237
+ end
238
+ profiles[parent.to_sym][:extend] = extends
239
+ end
227
240
  config.defaults(profiles[parent.to_sym])
228
241
  end
229
242
  end
@@ -3,43 +3,43 @@ module Nucleon
3
3
  module Action
4
4
  module Node
5
5
  class Fact < Nucleon.plugin_class(:nucleon, :cloud_action)
6
-
6
+
7
7
  #-----------------------------------------------------------------------------
8
8
  # Info
9
-
9
+
10
10
  def self.describe(action = :fact, weight = 570)
11
11
  describe_base(:node, action, weight, nil, nil, :node_fact)
12
12
  end
13
-
13
+
14
14
  #-----------------------------------------------------------------------------
15
15
  # Settings
16
16
 
17
17
  def configure(aggregate = false)
18
18
  super() do
19
19
  codes :fact_save_failed
20
-
20
+
21
21
  unless aggregate
22
22
  register_str :name, nil
23
23
  register_str :value
24
-
25
- register_bool :delete
26
-
24
+
25
+ register_bool :delete
26
+
27
27
  register_translator :input_format
28
28
  end
29
-
29
+
30
30
  register_translator :format, :json
31
31
  end
32
32
  end
33
-
33
+
34
34
  #---
35
-
35
+
36
36
  def arguments
37
37
  [ :name, :value ]
38
38
  end
39
39
 
40
40
  #-----------------------------------------------------------------------------
41
41
  # Operations
42
-
42
+
43
43
  def execute
44
44
  super do |node|
45
45
  ensure_node(node) do
@@ -47,9 +47,9 @@ class Fact < Nucleon.plugin_class(:nucleon, :cloud_action)
47
47
  render_node_facts(node)
48
48
  else
49
49
  if settings.delete(:delete, false)
50
- delete_node_fact(node, settings[:name], sanitize_remote(network, settings[:net_remote]))
50
+ delete_node_fact(node, settings[:name], sanitize_remote(settings[:net_remote]))
51
51
  elsif settings[:value] && ! settings[:value].empty?
52
- set_node_fact(node, settings[:name], settings[:value], sanitize_remote(network, settings[:net_remote]))
52
+ set_node_fact(node, settings[:name], settings[:value], sanitize_remote(settings[:net_remote]))
53
53
  else
54
54
  render_node_fact(node, settings[:name])
55
55
  end
@@ -57,64 +57,64 @@ class Fact < Nucleon.plugin_class(:nucleon, :cloud_action)
57
57
  end
58
58
  end
59
59
  end
60
-
60
+
61
61
  #-----------------------------------------------------------------------------
62
62
  # Sub operations
63
-
63
+
64
64
  def render_node_facts(node)
65
65
  format = settings[:format]
66
- myself.result = node.facts
67
- render result, :format => format
66
+ myself.result = node.facts
67
+ render result, :format => format
68
68
  end
69
-
69
+
70
70
  #---
71
-
71
+
72
72
  def render_node_fact(node, name)
73
73
  format = settings[:format]
74
- myself.result = node.fact(name)
75
- render result, :format => format
74
+ myself.result = node.fact(name)
75
+ render result, :format => format
76
76
  end
77
-
77
+
78
78
  #---
79
-
79
+
80
80
  def delete_node_fact(node, name, remote = nil)
81
81
  remote_text = remote ? "#{remote}" : "LOCAL ONLY"
82
-
82
+
83
83
  node.delete_facts(name)
84
-
84
+
85
85
  if node.save({ :remote => remote, :message => "Deleting fact #{name} from #{node.plugin_provider} #{node.plugin_name}" })
86
86
  success("Fact #{name} deleted (#{remote_text})", { :i18n => false })
87
87
  else
88
88
  error("Fact #{name} deletion could not be saved", { :i18n => false })
89
- myself.status = code.fact_save_failed
90
- end
89
+ myself.status = code.fact_save_failed
90
+ end
91
91
  end
92
-
92
+
93
93
  #---
94
-
94
+
95
95
  def set_node_fact(node, name, value, remote = nil)
96
96
  remote_text = remote ? "#{remote}" : "LOCAL ONLY"
97
97
  input_format = settings[:input_format]
98
-
99
- value = Util::Data.value(render(value, {
100
- :format => input_format,
101
- :silent => true
98
+
99
+ value = Util::Data.value(render(value, {
100
+ :format => input_format,
101
+ :silent => true
102
102
  })) if input_format
103
-
104
- myself.result = value
105
- node.create_facts({ name => value })
106
-
103
+
104
+ myself.result = value
105
+ node.create_facts({ name => value })
106
+
107
107
  if node.save({ :remote => remote, :message => "Saving fact #{name} to #{node.plugin_provider} #{node.plugin_name}" })
108
108
  success("Fact #{name} saved (#{remote_text})", { :i18n => false })
109
109
  else
110
110
  error("New fact #{name} could not be saved", { :i18n => false })
111
- myself.status = code.fact_save_failed
112
- end
111
+ myself.status = code.fact_save_failed
112
+ end
113
113
  end
114
-
114
+
115
115
  #-----------------------------------------------------------------------------
116
116
  # Output
117
-
117
+
118
118
  def render_provider
119
119
  :node_fact
120
120
  end
@@ -93,12 +93,26 @@ class Identity < Nucleon.plugin_class(:nucleon, :cloud_action)
93
93
  result = node.cli.mkdir('-p', remote_identity_base_directory)
94
94
  success = false unless result.status == code.success
95
95
 
96
+ success = node.cli.chmod('-R', 'go-rwx', remote_config_directory) if success
97
+
96
98
  if success
97
99
  result = node.cli.rm('-Rf', remote_identity_directory)
98
100
  success = false unless result.status == code.success
99
101
 
100
102
  # Send identity through SCP to remote machine
101
- success = node.send_files(identity_directory, remote_identity_directory, nil, '0700') if success && ! settings[:delete]
103
+ if success && !settings[:delete]
104
+ if node.user == 'root'
105
+ success = node.send_files(identity_directory, remote_identity_directory, nil, '0700')
106
+ else
107
+ tmp_identity_directory = File.join('/', 'home', node.user, 'identity')
108
+
109
+ success = node.send_files(identity_directory, tmp_identity_directory, nil, '0700') if success
110
+
111
+ success = node.cli.mv(tmp_identity_directory, remote_identity_directory) if success
112
+ success = node.cli.chown('-R', 'root:root', remote_identity_directory) if success
113
+ success = node.cli.chmod('-R', 'go-rwx', remote_identity_directory) if success
114
+ end
115
+ end
102
116
  end
103
117
  success
104
118
  end
@@ -2,26 +2,26 @@
2
2
  require 'puppet/indirector/terminus'
3
3
 
4
4
  class Puppet::Indirector::Corl < Puppet::Indirector::Terminus
5
-
5
+
6
6
  def initialize(*args)
7
7
  node = CORL::Provisioner::Puppetnode.node
8
-
8
+
9
9
  unless node.config_initialized?
10
10
  raise "CORL terminus not supported without the CORL library"
11
11
  end
12
12
  super
13
13
  end
14
-
14
+
15
15
  #---
16
16
 
17
17
  def find(request)
18
18
  node = CORL::Provisioner::Puppetnode.node
19
-
19
+
20
20
  puppet_scope = request.options[:variables]
21
21
  module_name = nil
22
22
  module_name = puppet_scope.source.module_name if puppet_scope.source
23
23
  contexts = [ :param, :data_binding, request.key ]
24
-
24
+
25
25
  default_options = {
26
26
  :provisioner => :puppetnode,
27
27
  :hiera_scope => puppet_scope,
@@ -32,9 +32,9 @@ class Puppet::Indirector::Corl < Puppet::Indirector::Terminus
32
32
  :merge => true,
33
33
  :undefined_value => :undef
34
34
  }
35
-
35
+
36
36
  if module_name
37
- config = CORL::Config.init({}, contexts, module_name, default_options)
37
+ config = CORL::Config.init({}, contexts, module_name, default_options)
38
38
  else
39
39
  config = CORL::Config.init_flat({}, contexts, default_options)
40
40
  end
@@ -18,22 +18,22 @@ This function performs a lookup for a variable value in various locations follow
18
18
  If no value is found in the defined sources, it returns an empty string ('')
19
19
  EOS
20
20
  ) do |args|
21
-
21
+
22
22
  value = nil
23
23
  CORL.run do
24
24
  raise(Puppet::ParseError, "module_param(): Define at least the variable name " +
25
25
  "given (#{args.size} for 1)") if args.size < 1
26
-
26
+
27
27
  var_name = args[0]
28
28
  default = ( args.size > 1 ? args[1] : '' )
29
29
  options = ( args.size > 2 ? args[2] : {} )
30
-
30
+
31
31
  module_name = parent_module_name
32
32
  node = CORL::Provisioner::Puppetnode.node
33
-
33
+
34
34
  if module_name
35
35
  module_var_name = "#{module_name}::#{var_name}"
36
-
36
+
37
37
  config = CORL::Config.init(options, [ :param, :module_param, var_name ], module_name, {
38
38
  :provisioner => :puppetnode,
39
39
  :hiera_scope => self,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.17
4
+ version: 0.5.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Webb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-29 00:00:00.000000000 Z
11
+ date: 2015-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nucleon