mofa 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c040f77b572291d756fff5efda245dda9c8501c
4
- data.tar.gz: 9e86ec9be601d46863449dd070142748b59cd8b2
3
+ metadata.gz: 03031f673e7c4110dd86dd3844d81907b8f9b0de
4
+ data.tar.gz: 1eae6a2a9bb2aebb0989db8e2f23af1f55953d8a
5
5
  SHA512:
6
- metadata.gz: 2c8263d05d553f4673f9450df9755fde8890f34816f85dfd786d5275ae94ccff6c2c51d61993a7fa7a0777c01324febae7d1c64a9f722e8845ac596177cb860e
7
- data.tar.gz: d01aa5c8214ddfe139197675099985b1c83935f9c863add10448f14bd3f29e81af7baf6c04df0fb1137c5061a33eaddaee53cf6023b548d4b6c7462aa9bebfc4
6
+ metadata.gz: c13f374e59288c9e37ab0586d4ab548a4ab46732edf23960cfcbf0ae10ce39ff29448b8693e2a5107b04a82db5467d051d127508f594c909aadfa481e94787a2
7
+ data.tar.gz: 386230d9f5903c7c82fdfc1c19e593be0ddaf4e91d01a1f020c972f5d3a486eb23ce6af515b604239a42eaf774f45cbf8a390544c31b60f49ded68869c21b507
data/.gitignore CHANGED
@@ -5,4 +5,6 @@
5
5
  Gemfile.lock
6
6
  pkg/*
7
7
 
8
+ example_hostlist.json
9
+
8
10
 
@@ -23,15 +23,53 @@ class AttributesMap
23
23
  def generate
24
24
  attr_all_roles = cookbook.mofa_yml.get_attr_for_role('all')
25
25
  attr_all_roles_local = cookbook.mofa_yml_local.get_attr_for_role('all')
26
- attr_all_roles.merge!(attr_all_roles_local)
26
+ attr_all_roles = deep_merge(attr_all_roles, attr_all_roles_local)
27
+
27
28
  hostlist.list.each do |hostname|
28
29
  # Again: the underlying rule here is -> shortname = role
29
30
  attr_host_role = cookbook.mofa_yml.get_attr_for_role(Hostlist::get_role(hostname))
30
31
  attr_host_role_local = cookbook.mofa_yml_local.get_attr_for_role(Hostlist::get_role(hostname))
31
- attr_host_role.merge!(attr_host_role_local)
32
- attr_per_host = attr_all_roles.merge(attr_host_role)
32
+
33
+ attr_host_role = deep_merge(attr_host_role, attr_host_role_local)
34
+ attr_per_host = deep_merge(attr_all_roles, attr_host_role)
35
+
36
+ attr_per_host = deep_parse(attr_per_host, '__SHORTNAME__', Hostlist::get_shortname(hostname))
37
+
33
38
  @mp.store(hostname, attr_per_host)
34
39
  end
35
40
  end
36
41
 
42
+ def deep_parse(attr_hash, placeholder, content)
43
+ new_attr_hash = Marshal.load(Marshal.dump(attr_hash))
44
+ attr_hash.each do |key, value|
45
+ if value.is_a?(Hash)
46
+ new_attr_hash[key] = deep_parse(value, placeholder, content)
47
+ else
48
+ new_attr_hash[key] = value.gsub(Regexp.new(Regexp.escape(placeholder)), content)
49
+ end
50
+ end
51
+ new_attr_hash
52
+ end
53
+
54
+ def deep_merge(attr_hash, attr_hash_local)
55
+ new_attr_hash = Marshal.load(Marshal.dump(attr_hash))
56
+ attr_hash.each do |key, value|
57
+ if attr_hash_local.key?(key)
58
+ if value.is_a?(Hash) && attr_hash_local[key].is_a?(Hash)
59
+ new_attr_hash[key] = deep_merge(value, attr_hash_local[key])
60
+ else
61
+ new_attr_hash[key] = attr_hash_local[key]
62
+ end
63
+ end
64
+ end
65
+ # and now add all attributes that are in attr_hash_local but not in attr_hash
66
+ attr_hash_local.each do |key, value|
67
+ unless attr_hash.key?(key)
68
+ new_attr_hash.store(key, value)
69
+ end
70
+ end
71
+
72
+ new_attr_hash
73
+ end
74
+
37
75
  end
@@ -40,7 +40,10 @@ class Hostlist
40
40
  if File.exist?(json_file)
41
41
  hosts_list_json = JSON.parse(File.read(json_file))
42
42
  @list = hosts_list_json['data'].collect { |i| i['cname'] }
43
+ else
44
+ fail "Hostlist JSON-File not found: #{json_file}"
43
45
  end
46
+
44
47
  else
45
48
  fail "Hostlist Service Url either has to be a http(s):// or a file:/// Url!"
46
49
  end
@@ -61,8 +64,6 @@ class Hostlist
61
64
  regex = Regexp.escape(regex).gsub(/__ASTERISK__/, '.*')
62
65
  regex = '^' + regex + '$'
63
66
 
64
- puts "regex=#{regex}"
65
-
66
67
  @list.select! { |hostname| hostname.match(regex) }
67
68
  end
68
69
 
@@ -55,6 +55,7 @@ class MofaCmd
55
55
 
56
56
  def run_chef_solo_on_hosts
57
57
  time = Time.new
58
+ puts
58
59
  puts 'Chef-Solo Run started at ' + time.strftime('%Y-%m-%d %H:%M:%S')
59
60
  puts "Will use ssh_user #{Mofa::Config.config['ssh_user']} and ssh_key_file #{Mofa::Config.config['ssh_keyfile']}"
60
61
  at_least_one_chef_solo_run_failed = false
@@ -33,8 +33,6 @@ class MofaYml
33
33
  # for now only __ENV_COOKBOOK__ for cookbook name is supported
34
34
  file_contents = File.read(path_to_mofayml)
35
35
  file_contents.gsub!(/__ENV_COOKBOOK__/, @cookbook.name)
36
- puts "FileContents: #{file_contents}"
37
36
  @yml = YAML.load(file_contents)
38
- puts "Parsed: #{@yml}"
39
37
  end
40
38
  end
@@ -31,7 +31,7 @@ class SourceCookbook < Cookbook
31
31
  end
32
32
 
33
33
  def cleanup
34
- say "Removing folder #{pkg_dir}...#{nl}"
34
+ say "Removing folder #{pkg_dir}... "
35
35
  run "rm -r #{pkg_dir}"
36
36
  ok
37
37
  end
@@ -100,7 +100,7 @@ class SourceCookbook < Cookbook
100
100
  end
101
101
 
102
102
  def berks_install_package
103
- say "Running \"berks install\" and \”berks package\" on Cookbook in #{source_dir}...#{nl}"
103
+ say "Running \"berks install\" and \"berks package\" on Cookbook in #{source_dir}...#{nl}"
104
104
 
105
105
  redirect_stdout = (Mofa::CLI::option_verbose) ? '' : '> /dev/null'
106
106
  Bundler.with_clean_env do
@@ -115,7 +115,7 @@ class SourceCookbook < Cookbook
115
115
  end
116
116
 
117
117
  def cleanup_and_repackage
118
- say "Shrinking Cookbook Snapshot #{pkg_name}...#{nl}"
118
+ say "Shrinking Cookbook Snapshot #{pkg_name}... "
119
119
 
120
120
  tar_verbose = (Mofa::CLI::option_debug) ? 'v' : ''
121
121
 
@@ -1,3 +1,3 @@
1
1
  module Mofa
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mofa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Birk