cloud-mu 3.4.0 → 3.5.0

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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/ansible/roles/mu-nat/tasks/main.yml +3 -0
  3. data/bin/mu-aws-setup +41 -7
  4. data/bin/mu-azure-setup +34 -0
  5. data/bin/mu-configure +214 -119
  6. data/bin/mu-gcp-setup +37 -2
  7. data/bin/mu-node-manage +3 -0
  8. data/bin/mu-refresh-ssl +67 -0
  9. data/bin/mu-run-tests +14 -4
  10. data/bin/mu-self-update +30 -10
  11. data/bin/mu-upload-chef-artifacts +30 -26
  12. data/cloud-mu.gemspec +8 -6
  13. data/cookbooks/mu-master/attributes/default.rb +5 -1
  14. data/cookbooks/mu-master/metadata.rb +2 -2
  15. data/cookbooks/mu-master/recipes/default.rb +81 -26
  16. data/cookbooks/mu-master/recipes/init.rb +197 -62
  17. data/cookbooks/mu-master/recipes/update_nagios_only.rb +1 -1
  18. data/cookbooks/mu-master/recipes/vault.rb +78 -77
  19. data/cookbooks/mu-master/templates/default/mods/rewrite.conf.erb +1 -0
  20. data/cookbooks/mu-master/templates/default/nagios.conf.erb +103 -0
  21. data/cookbooks/mu-master/templates/default/web_app.conf.erb +14 -30
  22. data/cookbooks/mu-tools/attributes/default.rb +5 -0
  23. data/cookbooks/mu-tools/files/centos-6/CentOS-Base.repo +47 -0
  24. data/cookbooks/mu-tools/libraries/helper.rb +12 -2
  25. data/cookbooks/mu-tools/libraries/monkey.rb +1 -1
  26. data/cookbooks/mu-tools/recipes/apply_security.rb +6 -0
  27. data/cookbooks/mu-tools/recipes/aws_api.rb +6 -4
  28. data/cookbooks/mu-tools/recipes/base_repositories.rb +1 -1
  29. data/cookbooks/mu-tools/recipes/gcloud.rb +2 -9
  30. data/cookbooks/mu-tools/recipes/google_api.rb +5 -2
  31. data/cookbooks/mu-tools/resources/disk.rb +108 -58
  32. data/extras/Gemfile.lock.bootstrap +394 -0
  33. data/extras/bucketstubs/error.html +0 -0
  34. data/extras/bucketstubs/index.html +0 -0
  35. data/extras/clean-stock-amis +9 -9
  36. data/extras/git_rpm/build.sh +20 -0
  37. data/extras/git_rpm/mugit.spec +53 -0
  38. data/extras/image-generators/VMWare/centos8.yaml +15 -0
  39. data/extras/openssl_rpm/build.sh +19 -0
  40. data/extras/openssl_rpm/mussl.spec +46 -0
  41. data/extras/python_rpm/muthon.spec +14 -4
  42. data/extras/ruby_rpm/muby.spec +9 -5
  43. data/extras/sqlite_rpm/build.sh +19 -0
  44. data/extras/sqlite_rpm/muqlite.spec +47 -0
  45. data/install/installer +7 -5
  46. data/modules/mu.rb +12 -5
  47. data/modules/mu/cloud/machine_images.rb +1 -1
  48. data/modules/mu/cloud/providers.rb +6 -1
  49. data/modules/mu/cloud/resource_base.rb +1 -1
  50. data/modules/mu/cloud/ssh_sessions.rb +4 -0
  51. data/modules/mu/config.rb +28 -12
  52. data/modules/mu/config/database.rb +2 -2
  53. data/modules/mu/config/firewall_rule.rb +1 -1
  54. data/modules/mu/config/ref.rb +2 -2
  55. data/modules/mu/config/schema_helpers.rb +12 -3
  56. data/modules/mu/config/server.rb +10 -4
  57. data/modules/mu/config/server_pool.rb +2 -2
  58. data/modules/mu/config/vpc.rb +10 -10
  59. data/modules/mu/defaults/AWS.yaml +32 -32
  60. data/modules/mu/deploy.rb +23 -10
  61. data/modules/mu/groomers/chef.rb +2 -2
  62. data/modules/mu/master.rb +49 -3
  63. data/modules/mu/mommacat.rb +8 -5
  64. data/modules/mu/mommacat/naming.rb +2 -2
  65. data/modules/mu/mommacat/storage.rb +22 -27
  66. data/modules/mu/providers/aws.rb +142 -48
  67. data/modules/mu/providers/aws/alarm.rb +3 -3
  68. data/modules/mu/providers/aws/bucket.rb +19 -19
  69. data/modules/mu/providers/aws/cache_cluster.rb +22 -22
  70. data/modules/mu/providers/aws/cdn.rb +2 -2
  71. data/modules/mu/providers/aws/collection.rb +14 -14
  72. data/modules/mu/providers/aws/container_cluster.rb +27 -27
  73. data/modules/mu/providers/aws/database.rb +40 -39
  74. data/modules/mu/providers/aws/dnszone.rb +5 -5
  75. data/modules/mu/providers/aws/endpoint.rb +35 -35
  76. data/modules/mu/providers/aws/firewall_rule.rb +26 -23
  77. data/modules/mu/providers/aws/function.rb +28 -28
  78. data/modules/mu/providers/aws/group.rb +7 -7
  79. data/modules/mu/providers/aws/habitat.rb +2 -2
  80. data/modules/mu/providers/aws/job.rb +6 -6
  81. data/modules/mu/providers/aws/loadbalancer.rb +34 -34
  82. data/modules/mu/providers/aws/log.rb +14 -14
  83. data/modules/mu/providers/aws/msg_queue.rb +10 -10
  84. data/modules/mu/providers/aws/nosqldb.rb +8 -8
  85. data/modules/mu/providers/aws/notifier.rb +7 -7
  86. data/modules/mu/providers/aws/role.rb +17 -15
  87. data/modules/mu/providers/aws/search_domain.rb +10 -10
  88. data/modules/mu/providers/aws/server.rb +176 -95
  89. data/modules/mu/providers/aws/server_pool.rb +65 -105
  90. data/modules/mu/providers/aws/storage_pool.rb +17 -9
  91. data/modules/mu/providers/aws/user.rb +1 -1
  92. data/modules/mu/providers/aws/vpc.rb +103 -51
  93. data/modules/mu/providers/aws/vpc_subnet.rb +43 -39
  94. data/modules/mu/providers/azure.rb +78 -12
  95. data/modules/mu/providers/azure/server.rb +18 -3
  96. data/modules/mu/providers/cloudformation/server.rb +1 -1
  97. data/modules/mu/providers/google.rb +19 -4
  98. data/modules/mu/providers/google/folder.rb +6 -2
  99. data/modules/mu/providers/google/function.rb +65 -30
  100. data/modules/mu/providers/google/role.rb +1 -1
  101. data/modules/mu/providers/google/vpc.rb +27 -2
  102. data/modules/tests/aws-servers-with-handrolled-iam.yaml +37 -0
  103. data/modules/tests/k8s.yaml +1 -1
  104. metadata +24 -8
@@ -19,7 +19,7 @@ class Chef
19
19
  end
20
20
 
21
21
  begin
22
- shell_out_with_timeout!(cmd, env: nil)
22
+ shell_out(cmd, env: nil)
23
23
  rescue StandardError => e
24
24
  if cmd.match(/--no-rdoc|--no-ri/)
25
25
  cmd.gsub!(/--no-rdoc --no-ri/, "--no-document")
@@ -345,6 +345,12 @@ if !node['application_attributes']['skip_recipes'].include?('apply_security')
345
345
  end
346
346
  }
347
347
 
348
+ mu_tools_disk "swap" do
349
+ device node['application_attributes']['swap']['mount_device']
350
+ size node['application_attributes']['swap']['volume_size_gb']
351
+ swap true
352
+ end
353
+
348
354
  mu_tools_disk "/home" do
349
355
  device node['application_attributes']['home']['mount_device']
350
356
  size node['application_attributes']['home']['volume_size_gb']
@@ -16,9 +16,9 @@
16
16
  # See the License for the specific language governing permissions and
17
17
  # limitations under the License.
18
18
 
19
- chef_gem "aws-sdk-core" do
19
+ chef_gem "aws-sdk" do
20
20
  compile_time true
21
- version "2.11.24"
21
+ version "3.0.1"
22
22
  action :install
23
23
  end
24
24
 
@@ -31,6 +31,8 @@ if platform_family?("rhel") or platform_family?("amazon")
31
31
  end
32
32
  end
33
33
 
34
- package "nvme-cli" do
35
- ignore_failure true
34
+ if node['platform_version'].to_i > 6
35
+ package "nvme-cli" do
36
+ ignore_failure true
37
+ end
36
38
  end
@@ -21,7 +21,7 @@ if !node['application_attributes']['skip_recipes'].include?('base_repositories')
21
21
  case node['platform_family']
22
22
  when "rhel", "redhat", "amazon" # ~FC024
23
23
  # Workaround for EOL CentOS 5 repos
24
- if node['platform'] != "amazon" and node['platform_version'].to_i == 5
24
+ if node['platform'] != "amazon" and node['platform_version'].to_i <= 6
25
25
  cookbook_file "/etc/yum.repos.d/CentOS-Base.repo" do
26
26
  source "CentOS-Base.repo"
27
27
  end
@@ -28,7 +28,7 @@ if platform_family?("rhel") or platform_family?("amazon")
28
28
  end
29
29
  package "google-cloud-sdk"
30
30
  elsif node['platform_version'].to_i == 6
31
- version = "267.0.0"
31
+ version = "317.0.0"
32
32
  remote_file "#{Chef::Config[:file_cache_path]}/gcloud-cli.sh" do
33
33
  source "https://sdk.cloud.google.com"
34
34
  action :nothing
@@ -42,14 +42,7 @@ if platform_family?("rhel") or platform_family?("amazon")
42
42
  code <<-EOH
43
43
  rm -rf /opt/google-cloud-sdk/
44
44
  tar -xzf #{Chef::Config[:file_cache_path]}/gcloud-cli.tar.gz
45
- if [ -f /opt/rh/python27/root/usr/bin/python ];then
46
- if [ ! -f /etc/ld.so.conf.d/python27.conf ];then
47
- echo "/opt/rh/python27/root/usr/lib64" > /etc/ld.so.conf.d/python27.conf
48
- echo "/opt/rh/python27/root/usr/lib" >> /etc/ld.so.conf.d/python27.conf
49
- /sbin/ldconfig
50
- fi
51
- fi
52
- CLOUDSDK_PYTHON="`/bin/rpm -ql muthon python27-python | grep '/bin/python$'`" ./google-cloud-sdk/install.sh -q
45
+ CLOUDSDK_PYTHON="`/bin/rpm -ql muthon | grep '/bin/python3$'`" ./google-cloud-sdk/install.sh -q
53
46
  EOH
54
47
  notifies :create, "remote_file[#{Chef::Config[:file_cache_path]}/gcloud-cli.sh]", :before
55
48
  notifies :create, "remote_file[#{Chef::Config[:file_cache_path]}/gcloud-cli.tar.gz]", :before
@@ -24,6 +24,9 @@
24
24
  end
25
25
  }
26
26
 
27
- package "nvme-cli" do
28
- ignore_failure true
27
+
28
+ if node['platform_version'].to_i > 6
29
+ package "nvme-cli" do
30
+ ignore_failure true
31
+ end
29
32
  end
@@ -4,6 +4,7 @@ property :device, String, required: true
4
4
  property :delete_on_termination, :kind_of => [TrueClass, FalseClass], default: true
5
5
  property :preserve_data, :kind_of => [TrueClass, FalseClass], :required => false, :default => false
6
6
  property :reboot_after_create, :kind_of => [TrueClass, FalseClass], :required => false, :default => false
7
+ property :swap, :kind_of => [TrueClass, FalseClass], :required => false, :default => false
7
8
  property :size, Integer, default: 8
8
9
 
9
10
  actions :create # ~FC092
@@ -19,15 +20,6 @@ action :create do
19
20
  devicepath = "/dev/disk/by-id/google-"+devicename
20
21
  end
21
22
 
22
- # if devicename =~ /^\/dev\/(?:sd|xvd)([a-z])/
23
- # if nvme?
24
- # map = attached_nvme_disks
25
- # if map[devicename]
26
- # devicepath = map[devicename]
27
- # end
28
- # end
29
- # end
30
-
31
23
  mu_tools_mommacat_request "create #{devicepath} for #{path}" do
32
24
  request "add_volume"
33
25
  passparams(
@@ -38,73 +30,131 @@ action :create do
38
30
  not_if { ::File.exist?(real_devicepath(devicepath)) }
39
31
  end
40
32
 
41
- # if nvme? and device.nil?
42
- # map = attached_nvme_disks
43
- # if map[devicename]
44
- # devicepath = map[devicename]
45
- # else
46
- # Chef::Application.fatal!("In NVME mode and attempted to allocate disk #{devicename}, but didn't find it in metadata of any of our NVME block devices (#{map.values.join(", ")})")
47
- # end
48
- # end
49
-
50
33
  reboot "Rebooting after adding #{path}" do
51
34
  action :nothing
52
35
  end
53
36
 
54
- backupname = path.gsub(/[^a-z0-9]/i, "_")
55
- directory "/mnt#{backupname}" do
56
- action :nothing
37
+ fstype = if new_resource.swap
38
+ "swap"
39
+ else
40
+ node['platform_version'].to_i == 6 ? "ext4" : "xfs"
57
41
  end
58
- mount "/mnt#{backupname}" do
59
- device real_devicepath(devicepath)
60
- options "nodev"
61
- action :nothing
62
- notifies :create, "directory[/mnt#{backupname}]", :before
42
+ path = "swap" if new_resource.swap
43
+
44
+ mkfs_cmd = case fstype
45
+ when "xfs"
46
+ "mkfs.xfs -i size=512"
47
+ when "ext4"
48
+ "mkfs.ext4 -F"
49
+ when "swap"
50
+ "mkswap"
63
51
  end
64
- execute "back up #{backupname}" do
65
- # also expunge files so we don't eat up a bunch of disk space quietly
66
- # underneath our new mount
67
- command "( cd #{path} && tar -cpf - . | su -c 'cd /mnt#{backupname}/ && tar -xpf -' ) && find #{path}/ -type f -exec rm -f {} \\;"
68
- only_if { ::Dir.exist?(path) and ::Dir.exist?("/mnt#{backupname}") }
69
- action :nothing
52
+
53
+ have_fs_cmd = case fstype
54
+ when "xfs"
55
+ "xfs_admin -l"
56
+ when "ext4"
57
+ "tune2fs -l"
58
+ when "swap"
59
+ "blkid"
70
60
  end
71
61
 
72
- # mkfs_cmd = node['platform_version'].to_i == 6 ? "mkfs.ext4 -F #{real_devicepath(devicepath)}" : "mkfs.xfs -i size=512 #{real_devicepath(devicepath)}"
73
- # guard_cmd = node['platform_version'].to_i == 6 ? "tune2fs -l #{real_devicepath(devicepath)} > /dev/null" : "xfs_admin -l #{real_devicepath(devicepath)} > /dev/null"
62
+ ruby_block "format #{path} by its real device name" do
63
+ block do
64
+ guard_cmd = have_fs_cmd+" "+real_devicepath(devicepath)+" 2>&1 > /dev/null"
65
+ format_cmd = mkfs_cmd+" "+real_devicepath(devicepath)
74
66
 
75
- execute "format #{devicename}" do
76
- command (node['platform_version'].to_i == 6 ? "mkfs.ext4 -F #{real_devicepath(devicepath)}" : "mkfs.xfs -i size=512 #{real_devicepath(devicepath)}")
77
- if new_resource.preserve_data
78
- notifies :mount, "mount[/mnt#{backupname}]", :immediately
79
- notifies :run, "execute[back up #{backupname}]", :immediately
80
- notifies :unmount, "mount[/mnt#{backupname}]", :immediately
67
+ shell_out(guard_cmd)
68
+ if $?.exitstatus != 0
69
+ puts "\n"+format_cmd
70
+ shell_out(format_cmd)
71
+ end
81
72
  end
73
+ not_if "grep ' #{path} ' /etc/mtab"
74
+ end
75
+
76
+
77
+ ruby_block "mount #{path} by its real device name" do # ~FC014
78
+ block do
79
+
80
+ def sort_fstab(a, b)
81
+ a_dev, a_path, a_fs, a_opts, a_dump, a_fsck = a.chomp.split(/[\t\s]+/)
82
+ b_dev, b_path, b_fs, b_opts, b_dump, b_fsck = b.chomp.split(/[\t\s]+/)
83
+ if a =~ /^\s*[#\n]/ or b =~ /^\s*[#\n]/ or !a_path or !b_path
84
+ 0
85
+ elsif a_path =~ /^#{Regexp.quote(b_path)}\//
86
+ 1
87
+ elsif b_path =~ /^#{Regexp.quote(a_path)}\//
88
+ -1
89
+ else
90
+ 0
91
+ end
92
+ end
93
+
94
+ dev_pattern = Regexp.quote(real_devicepath(devicepath))
95
+ uuid_line = uuid_line(devicepath)
96
+ uuid_line = nil if uuid_line.empty?
97
+ if uuid_line
98
+ dev_pattern = "("+dev_pattern+"|"+Regexp.quote(uuid_line)+")"
99
+ end
100
+
101
+ have_mtab = false
102
+ ::File.read("/etc/mtab").each_line { |l|
103
+ if l =~ /^#{dev_pattern}\s+#{path}\s+#{fstype}\s+/
104
+ have_mtab = true
105
+ break
106
+ end
107
+ }
108
+
109
+ if !have_mtab and new_resource.preserve_data and path != "swap"
110
+ backupname = path.gsub(/[^a-z0-9]/i, "_")
111
+ puts "\nPreserving data from #{path}"
112
+ shell_out(%Q{mkdir -p /mnt#{backupname}})
113
+ shell_out(%Q{mount #{real_devicepath(devicepath)} /mnt#{backupname}})
114
+ shell_out(%Q{( cd #{path} && tar -cpf - . | su -c 'cd /mnt#{backupname}/ && tar -xpf -' ) && find #{path}/ -type f -exec rm -f {} \\;})
115
+ shell_out(%Q{umount /mnt#{backupname}})
116
+ end
117
+
118
+
119
+ have_fstab = false
120
+ fstab_lines = []
121
+ ::File.read("/etc/fstab").each_line { |l|
122
+ fstab_lines << l.chomp
123
+ if l =~ /^#{dev_pattern}\s+#{path}\s+#{fstype}\s+/
124
+ have_fstab = true
125
+ break
126
+ end
127
+ }
128
+
129
+ if !have_fstab
130
+ fstabline = "#{uuid_line ? uuid_line : real_devicepath(devicepath)} #{path} #{fstype} #{new_resource.swap ? "defaults" : "nodev" } 0 #{new_resource.swap ? "0" : "2"}"
131
+ fstab_lines << fstabline
132
+ puts "\nAppending to /etc/fstab: #{fstabline}"
133
+ ::File.open("/etc/fstab", "w") { |f|
134
+ fstab_lines.sort { |a, b| sort_fstab(a,b) }.uniq.each { |l|
135
+ f.puts l
136
+ }
137
+ }
138
+ end
139
+
140
+ if !new_resource.reboot_after_create and !new_resource.swap
141
+ shell_out(%Q{mkdir -p #{path}})
142
+ shell_out(%Q{/bin/mount -a})
143
+ shell_out(%Q{/sbin/restorecon -R #{path}})
144
+ end
145
+ end
146
+ not_if "grep ' #{path} ' /etc/mtab && grep ' #{path} ' /etc/fstab"
82
147
  if new_resource.reboot_after_create
83
148
  notifies :request_reboot, "reboot[Rebooting after adding #{path}]", :delayed
84
149
  end
85
- retries 5 # sometimes there's a bit of lag
86
- retry_delay 6
87
- not_if (node['platform_version'].to_i == 6 ? "tune2fs -l #{real_devicepath(devicepath)} > /dev/null" : "xfs_admin -l #{real_devicepath(devicepath)} > /dev/null")
88
150
  end
89
151
 
90
- if !new_resource.reboot_after_create
91
- directory "Ensure existence of #{path} for #{real_devicepath(devicepath)}" do
92
- recursive true
93
- path path
94
- end
95
-
152
+ if new_resource.swap
153
+ execute "/sbin/swapon -a"
154
+ elsif !new_resource.reboot_after_create
96
155
  execute "/sbin/restorecon -R #{path}" do
97
156
  only_if { ::File.exist?("/sbin/restorecon") }
98
- action :nothing
99
157
  end
100
-
101
- mount path do
102
- device real_devicepath(devicepath)
103
- options "nodev"
104
- action [:mount, :enable]
105
- notifies :run, "execute[/sbin/restorecon -R #{path}]", :immediately
106
- end
107
-
108
158
  end
109
159
 
110
160
 
@@ -0,0 +1,394 @@
1
+ GIT
2
+ remote: https://github.com/eGT-Labs/knife-windows.git
3
+ revision: d9ed1c2da3fa60a6adaa4e3089cbab32a5999e93
4
+ branch: winrm_cert_auth
5
+ specs:
6
+ knife-windows (2.0.3)
7
+ winrm (~> 2.1)
8
+ winrm-elevated (~> 1.0)
9
+
10
+ PATH
11
+ remote: ..
12
+ specs:
13
+ cloud-mu (3.4.0)
14
+ addressable (~> 2.5)
15
+ bundler (~> 2.1.4)
16
+ chronic_duration (~> 0.10)
17
+ color (~> 1.8)
18
+ colorize (~> 0.8)
19
+ erubis (~> 2.7)
20
+ googleauth (~> 0.6)
21
+ inifile (~> 3.0)
22
+ json-schema (~> 2.8)
23
+ net-ldap (~> 0.16)
24
+ net-ssh (~> 4.2)
25
+ net-ssh-multi (~> 1.2, >= 1.2.1)
26
+ netaddr (~> 2.0)
27
+ nokogiri (~> 1.10)
28
+ openssl-oaep (~> 0.1)
29
+ optimist (~> 3.0)
30
+ rack (~> 2.0)
31
+ rubocop (~> 0.58)
32
+ ruby-graphviz (~> 1.2)
33
+ rubyzip (~> 2.3)
34
+ simple-password-gen (~> 0.1)
35
+ slack-notifier (~> 2.3)
36
+ solve (~> 4.0)
37
+ thin (~> 1.7)
38
+ winrm (~> 2.3, >= 2.3.4)
39
+ yard (~> 0.9)
40
+
41
+ GEM
42
+ remote: https://rubygems.org/
43
+ specs:
44
+ activesupport (6.0.3.4)
45
+ concurrent-ruby (~> 1.0, >= 1.0.2)
46
+ i18n (>= 0.7, < 2)
47
+ minitest (~> 5.1)
48
+ tzinfo (~> 1.1)
49
+ zeitwerk (~> 2.2, >= 2.2.2)
50
+ addressable (2.5.2)
51
+ public_suffix (>= 2.0.2, < 4.0)
52
+ ast (2.4.1)
53
+ berkshelf (7.0.10)
54
+ chef (>= 13.6.52)
55
+ chef-config
56
+ cleanroom (~> 1.0)
57
+ concurrent-ruby (~> 1.0)
58
+ minitar (>= 0.6)
59
+ mixlib-archive (>= 0.4, < 2.0)
60
+ mixlib-config (>= 2.2.5)
61
+ mixlib-shellout (>= 2.0, < 4.0)
62
+ octokit (~> 4.0)
63
+ retryable (>= 2.0, < 4.0)
64
+ solve (~> 4.0)
65
+ thor (>= 0.20)
66
+ builder (3.2.4)
67
+ chef (14.15.6)
68
+ addressable
69
+ bundler (>= 1.10)
70
+ chef-config (= 14.15.6)
71
+ chef-zero (>= 13.0, < 15.0)
72
+ diff-lcs (~> 1.2, >= 1.2.4)
73
+ erubis (~> 2.7)
74
+ ffi (~> 1.9, >= 1.9.25)
75
+ ffi-yajl (~> 2.2)
76
+ highline (~> 1.6, >= 1.6.9)
77
+ iniparse (~> 1.4)
78
+ mixlib-archive (>= 0.4, < 2.0)
79
+ mixlib-authentication (~> 2.1)
80
+ mixlib-cli (>= 1.7, < 3.0)
81
+ mixlib-log (>= 2.0.3, < 4.0)
82
+ mixlib-shellout (>= 2.4, < 4.0)
83
+ net-sftp (~> 2.1, >= 2.1.2)
84
+ net-ssh (~> 4.2)
85
+ net-ssh-multi (~> 1.2, >= 1.2.1)
86
+ ohai (~> 14.0)
87
+ plist (~> 3.2)
88
+ proxifier (~> 1.0)
89
+ rspec-core (~> 3.5)
90
+ rspec-expectations (~> 3.5)
91
+ rspec-mocks (~> 3.5)
92
+ rspec_junit_formatter (~> 0.2.0)
93
+ serverspec (~> 2.7)
94
+ specinfra (~> 2.10)
95
+ syslog-logger (~> 1.6)
96
+ uuidtools (~> 2.1.5)
97
+ chef-config (14.15.6)
98
+ addressable
99
+ fuzzyurl
100
+ mixlib-config (>= 2.2.12, < 4.0)
101
+ mixlib-shellout (>= 2.0, < 4.0)
102
+ tomlrb (~> 1.2)
103
+ chef-dk (3.2.30)
104
+ addressable (>= 2.3.5, < 2.6)
105
+ chef (~> 14.0)
106
+ chef-provisioning (~> 2.0)
107
+ cookbook-omnifetch (~> 0.5)
108
+ diff-lcs (~> 1.0)
109
+ ffi-yajl (>= 1.0, < 3.0)
110
+ minitar (~> 0.6)
111
+ mixlib-cli (~> 1.7)
112
+ mixlib-shellout (~> 2.0)
113
+ paint (~> 1.0)
114
+ solve (> 2.0, < 5.0)
115
+ chef-provisioning (2.7.6)
116
+ cheffish (>= 4.0, < 15.0)
117
+ inifile (>= 2.0.2)
118
+ mixlib-install (>= 1.0)
119
+ net-scp (~> 1.0)
120
+ net-ssh (>= 2.9, < 5.0)
121
+ net-ssh-gateway (> 1.2, < 3.0)
122
+ winrm (~> 2.0)
123
+ winrm-elevated (~> 1.0)
124
+ winrm-fs (~> 1.0)
125
+ chef-sugar (5.1.12)
126
+ chef-vault (3.4.3)
127
+ chef-zero (14.0.17)
128
+ ffi-yajl (~> 2.2)
129
+ hashie (>= 2.0, < 4.0)
130
+ mixlib-log (>= 2.0, < 4.0)
131
+ rack (~> 2.0, >= 2.0.6)
132
+ uuidtools (~> 2.1)
133
+ cheffish (14.0.13)
134
+ chef-zero (~> 14.0)
135
+ net-ssh
136
+ chronic_duration (0.10.6)
137
+ numerizer (~> 0.1.1)
138
+ cleanroom (1.0.0)
139
+ color (1.8)
140
+ colorize (0.8.1)
141
+ concurrent-ruby (1.1.7)
142
+ cookbook-omnifetch (0.11.1)
143
+ mixlib-archive (>= 0.4, < 2.0)
144
+ cucumber-core (8.0.1)
145
+ cucumber-gherkin (~> 15.0, >= 15.0.2)
146
+ cucumber-messages (~> 13.0, >= 13.0.1)
147
+ cucumber-tag-expressions (~> 2.0, >= 2.0.4)
148
+ cucumber-gherkin (15.0.2)
149
+ cucumber-messages (~> 13.0, >= 13.0.1)
150
+ cucumber-messages (13.2.1)
151
+ protobuf-cucumber (~> 3.10, >= 3.10.8)
152
+ cucumber-tag-expressions (2.0.4)
153
+ daemons (1.3.1)
154
+ diff-lcs (1.4.4)
155
+ erubi (1.10.0)
156
+ erubis (2.7.0)
157
+ eventmachine (1.2.7)
158
+ faraday (1.1.0)
159
+ multipart-post (>= 1.2, < 3)
160
+ ruby2_keywords
161
+ ffi (1.13.1)
162
+ ffi-libarchive (1.0.4)
163
+ ffi (~> 1.0)
164
+ ffi-yajl (2.3.4)
165
+ libyajl2 (~> 1.2)
166
+ foodcritic (14.1.0)
167
+ cucumber-core (>= 1.3)
168
+ erubis
169
+ ffi-yajl (~> 2.0)
170
+ nokogiri (>= 1.5, < 2.0)
171
+ rake
172
+ rufus-lru (~> 1.0)
173
+ treetop (~> 1.4)
174
+ fuzzyurl (0.9.0)
175
+ googleauth (0.14.0)
176
+ faraday (>= 0.17.3, < 2.0)
177
+ jwt (>= 1.4, < 3.0)
178
+ memoist (~> 0.16)
179
+ multi_json (~> 1.11)
180
+ os (>= 0.9, < 2.0)
181
+ signet (~> 0.14)
182
+ gssapi (1.3.1)
183
+ ffi (>= 1.0.1)
184
+ gyoku (1.3.1)
185
+ builder (>= 2.1.2)
186
+ hashie (3.6.0)
187
+ highline (1.7.10)
188
+ httpclient (2.8.3)
189
+ i18n (1.8.5)
190
+ concurrent-ruby (~> 1.0)
191
+ inifile (3.0.0)
192
+ iniparse (1.5.0)
193
+ ipaddress (0.8.3)
194
+ json-schema (2.8.1)
195
+ addressable (>= 2.4)
196
+ jwt (2.2.2)
197
+ libyajl2 (1.2.0)
198
+ little-plugger (1.1.4)
199
+ logging (2.3.0)
200
+ little-plugger (~> 1.1)
201
+ multi_json (~> 1.14)
202
+ memoist (0.16.2)
203
+ middleware (0.1.0)
204
+ mini_portile2 (2.4.0)
205
+ minitar (0.9)
206
+ minitest (5.14.2)
207
+ mixlib-archive (1.0.7)
208
+ mixlib-log
209
+ mixlib-authentication (2.1.1)
210
+ mixlib-cli (1.7.0)
211
+ mixlib-config (3.0.9)
212
+ tomlrb
213
+ mixlib-install (3.12.5)
214
+ mixlib-shellout
215
+ mixlib-versioning
216
+ thor
217
+ mixlib-log (3.0.9)
218
+ mixlib-shellout (2.4.4)
219
+ mixlib-versioning (1.2.12)
220
+ molinillo (0.7.0)
221
+ multi_json (1.15.0)
222
+ multipart-post (2.1.1)
223
+ mysql2 (0.5.2)
224
+ net-ldap (0.17.0)
225
+ net-scp (1.2.1)
226
+ net-ssh (>= 2.6.5)
227
+ net-sftp (2.1.2)
228
+ net-ssh (>= 2.6.5)
229
+ net-ssh (4.2.0)
230
+ net-ssh-gateway (2.0.0)
231
+ net-ssh (>= 4.0.0)
232
+ net-ssh-multi (1.2.1)
233
+ net-ssh (>= 2.6.5)
234
+ net-ssh-gateway (>= 1.2.0)
235
+ net-telnet (0.1.1)
236
+ netaddr (2.0.4)
237
+ nokogiri (1.10.10)
238
+ mini_portile2 (~> 2.4.0)
239
+ nori (2.6.0)
240
+ numerizer (0.1.1)
241
+ octokit (4.19.0)
242
+ faraday (>= 0.9)
243
+ sawyer (~> 0.8.0, >= 0.5.3)
244
+ ohai (14.15.0)
245
+ chef-config (>= 12.8, < 15)
246
+ ffi (~> 1.9)
247
+ ffi-yajl (~> 2.2)
248
+ ipaddress
249
+ mixlib-cli (>= 1.7.0)
250
+ mixlib-config (>= 2.0, < 4.0)
251
+ mixlib-log (>= 2.0.1, < 4.0)
252
+ mixlib-shellout (>= 2.0, < 4.0)
253
+ plist (~> 3.1)
254
+ systemu (~> 2.6.4)
255
+ wmi-lite (~> 1.0)
256
+ openssl-oaep (0.1.0)
257
+ optimist (3.0.1)
258
+ os (1.1.1)
259
+ paint (1.0.1)
260
+ parallel (1.20.1)
261
+ parser (2.7.2.0)
262
+ ast (~> 2.4.1)
263
+ plist (3.5.0)
264
+ polyglot (0.3.5)
265
+ protobuf-cucumber (3.10.8)
266
+ activesupport (>= 3.2)
267
+ middleware
268
+ thor
269
+ thread_safe
270
+ proxifier (1.0.3)
271
+ public_suffix (3.1.1)
272
+ rack (2.2.3)
273
+ rainbow (3.0.0)
274
+ rake (13.0.1)
275
+ regexp_parser (2.0.0)
276
+ retryable (3.0.5)
277
+ rexml (3.2.4)
278
+ rspec (3.10.0)
279
+ rspec-core (~> 3.10.0)
280
+ rspec-expectations (~> 3.10.0)
281
+ rspec-mocks (~> 3.10.0)
282
+ rspec-core (3.10.0)
283
+ rspec-support (~> 3.10.0)
284
+ rspec-expectations (3.10.0)
285
+ diff-lcs (>= 1.2.0, < 2.0)
286
+ rspec-support (~> 3.10.0)
287
+ rspec-its (1.3.0)
288
+ rspec-core (>= 3.0.0)
289
+ rspec-expectations (>= 3.0.0)
290
+ rspec-mocks (3.10.0)
291
+ diff-lcs (>= 1.2.0, < 2.0)
292
+ rspec-support (~> 3.10.0)
293
+ rspec-support (3.10.0)
294
+ rspec_junit_formatter (0.2.3)
295
+ builder (< 4)
296
+ rspec-core (>= 2, < 4, != 2.12.0)
297
+ rubocop (0.93.1)
298
+ parallel (~> 1.10)
299
+ parser (>= 2.7.1.5)
300
+ rainbow (>= 2.2.2, < 4.0)
301
+ regexp_parser (>= 1.8)
302
+ rexml
303
+ rubocop-ast (>= 0.6.0)
304
+ ruby-progressbar (~> 1.7)
305
+ unicode-display_width (>= 1.4.0, < 2.0)
306
+ rubocop-ast (1.3.0)
307
+ parser (>= 2.7.1.5)
308
+ ruby-graphviz (1.2.5)
309
+ rexml
310
+ ruby-progressbar (1.10.1)
311
+ ruby-wmi (0.4.0)
312
+ ruby2_keywords (0.0.2)
313
+ rubyntlm (0.6.2)
314
+ rubyzip (2.3.0)
315
+ rufus-lru (1.1.0)
316
+ sawyer (0.8.2)
317
+ addressable (>= 2.3.5)
318
+ faraday (> 0.8, < 2.0)
319
+ semverse (3.0.0)
320
+ serverspec (2.41.5)
321
+ multi_json
322
+ rspec (~> 3.0)
323
+ rspec-its
324
+ specinfra (~> 2.72)
325
+ sfl (2.3)
326
+ signet (0.14.0)
327
+ addressable (~> 2.3)
328
+ faraday (>= 0.17.3, < 2.0)
329
+ jwt (>= 1.5, < 3.0)
330
+ multi_json (~> 1.10)
331
+ simple-password-gen (0.1.5)
332
+ slack-notifier (2.3.2)
333
+ solve (4.0.4)
334
+ molinillo (~> 0.6)
335
+ semverse (>= 1.1, < 4.0)
336
+ specinfra (2.82.22)
337
+ net-scp
338
+ net-ssh (>= 2.7)
339
+ net-telnet (= 0.1.1)
340
+ sfl
341
+ syslog-logger (1.6.8)
342
+ systemu (2.6.5)
343
+ thin (1.8.0)
344
+ daemons (~> 1.0, >= 1.0.9)
345
+ eventmachine (~> 1.0, >= 1.0.4)
346
+ rack (>= 1, < 3)
347
+ thor (1.0.1)
348
+ thread_safe (0.3.6)
349
+ tomlrb (1.3.0)
350
+ treetop (1.6.11)
351
+ polyglot (~> 0.3)
352
+ tzinfo (1.2.8)
353
+ thread_safe (~> 0.1)
354
+ unicode-display_width (1.7.0)
355
+ uuidtools (2.1.5)
356
+ winrm (2.3.5)
357
+ builder (>= 2.1.2)
358
+ erubi (~> 1.8)
359
+ gssapi (~> 1.2)
360
+ gyoku (~> 1.0)
361
+ httpclient (~> 2.2, >= 2.2.0.2)
362
+ logging (>= 1.6.1, < 3.0)
363
+ nori (~> 2.0)
364
+ rubyntlm (~> 0.6.0, >= 0.6.1)
365
+ winrm-elevated (1.2.3)
366
+ erubi (~> 1.8)
367
+ winrm (~> 2.0)
368
+ winrm-fs (~> 1.0)
369
+ winrm-fs (1.3.5)
370
+ erubi (~> 1.8)
371
+ logging (>= 1.6.1, < 3.0)
372
+ rubyzip (~> 2.0)
373
+ winrm (~> 2.0)
374
+ wmi-lite (1.0.5)
375
+ yard (0.9.25)
376
+ zeitwerk (2.4.2)
377
+
378
+ PLATFORMS
379
+ ruby
380
+
381
+ DEPENDENCIES
382
+ berkshelf (~> 7.0)
383
+ chef-dk (~> 3.2.30)
384
+ chef-sugar
385
+ chef-vault (~> 3.4)
386
+ cloud-mu!
387
+ ffi-libarchive
388
+ foodcritic (~> 14.1.0)
389
+ knife-windows!
390
+ mysql2 (<= 0.5.2)
391
+ ruby-wmi
392
+
393
+ BUNDLED WITH
394
+ 2.1.4