serverspec-extra-types 0.4.0 → 0.4.1
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 +4 -4
- data/.gitlab-ci.yml +117 -0
- data/.rubocop.yml +24 -2
- data/.simplecov +7 -0
- data/README.md +344 -15
- data/lib/serverspec-extra-types.rb +5 -0
- data/lib/serverspec_extra_types.rb +4 -3
- data/lib/serverspec_extra_types/matchers.rb +2 -1
- data/lib/serverspec_extra_types/matchers/allowed_to_run_anything.rb +12 -9
- data/lib/serverspec_extra_types/matchers/allowed_to_run_command.rb +8 -6
- data/lib/serverspec_extra_types/matchers/apply_to.rb +7 -0
- data/lib/serverspec_extra_types/matchers/have_host.rb +8 -1
- data/lib/serverspec_extra_types/matchers/have_image.rb +1 -0
- data/lib/serverspec_extra_types/matchers/have_label.rb +1 -3
- data/lib/serverspec_extra_types/types/api_base.rb +3 -2
- data/lib/serverspec_extra_types/types/consul_base.rb +5 -1
- data/lib/serverspec_extra_types/types/consul_node_list.rb +1 -1
- data/lib/serverspec_extra_types/types/consul_service.rb +2 -4
- data/lib/serverspec_extra_types/types/curl.rb +2 -0
- data/lib/serverspec_extra_types/types/docker_config.rb +4 -1
- data/lib/serverspec_extra_types/types/docker_container.rb +2 -0
- data/lib/serverspec_extra_types/types/docker_network.rb +6 -4
- data/lib/serverspec_extra_types/types/docker_node.rb +3 -1
- data/lib/serverspec_extra_types/types/docker_secret.rb +4 -2
- data/lib/serverspec_extra_types/types/docker_service.rb +3 -1
- data/lib/serverspec_extra_types/types/jenkins_base.rb +0 -1
- data/lib/serverspec_extra_types/types/jenkins_credential.rb +5 -6
- data/lib/serverspec_extra_types/types/jenkins_job.rb +7 -6
- data/lib/serverspec_extra_types/types/jenkins_plugin.rb +8 -4
- data/lib/serverspec_extra_types/types/nfs_export.rb +16 -4
- data/lib/serverspec_extra_types/types/rabbitmq_base.rb +2 -2
- data/lib/serverspec_extra_types/types/rabbitmq_node_list.rb +1 -1
- data/lib/serverspec_extra_types/types/rabbitmq_vhost_list.rb +1 -1
- data/lib/serverspec_extra_types/types/rabbitmq_vhost_policy.rb +13 -1
- data/lib/serverspec_extra_types/types/sudo_user.rb +18 -15
- data/lib/serverspec_extra_types/version.rb +1 -1
- data/properties.yml +31 -5
- data/serverspec-extra-types.gemspec +1 -1
- metadata +8 -4
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require '
|
5
|
-
|
3
|
+
puts "Deprecation WARNING: this file has been deprecated as the entry point to the gem. please use:"
|
4
|
+
puts "require 'serverspec-extra-types'"
|
5
|
+
|
6
|
+
require 'serverspec-extra-types'
|
@@ -30,6 +30,7 @@ require 'serverspec_extra_types/matchers/have_ha_nodes'
|
|
30
30
|
require 'serverspec_extra_types/matchers/have_vhost'
|
31
31
|
require 'serverspec_extra_types/matchers/have_ha_sync_mode'
|
32
32
|
require 'serverspec_extra_types/matchers/mirror_all'
|
33
|
+
require 'serverspec_extra_types/matchers/apply_to'
|
33
34
|
require 'serverspec_extra_types/matchers/read_from_queue'
|
34
35
|
require 'serverspec_extra_types/matchers/write_to_queue'
|
35
36
|
require 'serverspec_extra_types/matchers/configure_queue'
|
@@ -39,4 +40,4 @@ require 'serverspec_extra_types/matchers/url_matchers'
|
|
39
40
|
|
40
41
|
#--- sudo matchers
|
41
42
|
require 'serverspec_extra_types/matchers/allowed_to_run_command'
|
42
|
-
require 'serverspec_extra_types/matchers/allowed_to_run_anything'
|
43
|
+
require 'serverspec_extra_types/matchers/allowed_to_run_anything'
|
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
1
3
|
RSpec::Matchers.define :be_allowed_to_run_anything do
|
2
4
|
chain :as do |user|
|
3
5
|
@user = user
|
4
6
|
end
|
5
7
|
chain :as_anybody do
|
6
8
|
@user = 'ALL'
|
9
|
+
@anybody = true
|
7
10
|
end
|
8
11
|
chain :without_password do
|
9
12
|
@checkpw = true
|
@@ -20,19 +23,19 @@ RSpec::Matchers.define :be_allowed_to_run_anything do
|
|
20
23
|
end
|
21
24
|
|
22
25
|
failure_message do |actual|
|
23
|
-
msg = if
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
msg = if @user
|
27
|
+
"expected to be able to run anything as #{@user} got #{actual.permission('ALL')[:user]}"
|
28
|
+
else
|
29
|
+
"expected 'ALL' to be in #{actual.permissions.map { |x| x[:command] }}"
|
27
30
|
end
|
28
|
-
msg << %( without a password
|
31
|
+
msg << %( without a password) if @checkpw
|
29
32
|
msg
|
30
33
|
end
|
31
34
|
|
32
35
|
description do
|
33
|
-
msg =
|
34
|
-
msg << %( as #{@user}) if @user
|
35
|
-
msg << %( without a password
|
36
|
+
msg = 'be allowed to run anything'
|
37
|
+
msg << %( as #{@anybody ? 'anybody' : "'#{@user}'"}) if @user
|
38
|
+
msg << %( without a password) if @checkpw
|
36
39
|
msg
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
1
3
|
RSpec::Matchers.define :be_allowed_to_run_command do |command|
|
2
4
|
chain :as do |user|
|
3
5
|
@user = user
|
@@ -15,17 +17,17 @@ RSpec::Matchers.define :be_allowed_to_run_command do |command|
|
|
15
17
|
if @user
|
16
18
|
actual.allowed_to_run_command?(command, @user, @checkpw)
|
17
19
|
elsif @anybody
|
18
|
-
(actual.allowed_to_run_command?(command, 'ALL', @checkpw) || actual.allowed_to_run_command?(command, 'ALL:ALL'
|
20
|
+
(actual.allowed_to_run_command?(command, 'ALL', @checkpw) || actual.allowed_to_run_command?(command, 'ALL:ALL', @checkpw))
|
19
21
|
else
|
20
22
|
actual.allowed_to_run_command?(command, @checkpw)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
26
|
failure_message do |actual|
|
25
|
-
msg = if
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
msg = if @user
|
28
|
+
"expected to be able to run #{command} as #{@user} got #{actual.permission(command)[:user]}"
|
29
|
+
else
|
30
|
+
"expected #{command} to be in #{actual.permissions.map { |x| x[:command] }}"
|
29
31
|
end
|
30
32
|
msg << %( without a password ) if @checkpw
|
31
33
|
msg
|
@@ -37,4 +39,4 @@ RSpec::Matchers.define :be_allowed_to_run_command do |command|
|
|
37
39
|
msg << %( without a password ) if @checkpw
|
38
40
|
msg
|
39
41
|
end
|
40
|
-
end
|
42
|
+
end
|
@@ -3,7 +3,11 @@
|
|
3
3
|
RSpec::Matchers.define :have_host do |host|
|
4
4
|
match do |actual|
|
5
5
|
if !@option
|
6
|
-
|
6
|
+
if !@options
|
7
|
+
actual.has_host? host
|
8
|
+
else
|
9
|
+
actual.has_host? host, @option
|
10
|
+
end
|
7
11
|
else
|
8
12
|
actual.has_host? host, @option
|
9
13
|
end
|
@@ -11,13 +15,16 @@ RSpec::Matchers.define :have_host do |host|
|
|
11
15
|
description do
|
12
16
|
msg = "have #{host}"
|
13
17
|
msg << " with option #{@option}" if @option
|
18
|
+
msg << " with options #{@options}" if @options
|
14
19
|
msg
|
15
20
|
end
|
16
21
|
failure_message do |actual|
|
17
22
|
msg = "expected #{actual.hosts} to contain #{host}"
|
18
23
|
msg << " with option '#{@option}'" if @option
|
24
|
+
msg << " with options '#{@options}'" if @options
|
19
25
|
msg
|
20
26
|
end
|
21
27
|
|
22
28
|
chain :with_option, :option
|
29
|
+
chain :with_options, :options
|
23
30
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RSpec::Matchers.define :be_labeled do |label|
|
4
|
-
|
5
|
-
|
6
4
|
match do |actual|
|
7
5
|
if !@value
|
8
6
|
actual.labels.key? label
|
@@ -31,4 +29,4 @@ RSpec::Matchers.define :be_labeled do |label|
|
|
31
29
|
end
|
32
30
|
end
|
33
31
|
RSpec::Matchers.alias_matcher :have_label, :be_labeled
|
34
|
-
RSpec::Matchers.alias_matcher :be_labelled, :be_labeled
|
32
|
+
RSpec::Matchers.alias_matcher :be_labelled, :be_labeled
|
@@ -26,7 +26,6 @@ module Serverspec::Type
|
|
26
26
|
@url_base
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
29
|
def inspection
|
31
30
|
@inspection ||= ::MultiJson.load(get_inspection.stdout)
|
32
31
|
end
|
@@ -34,16 +33,18 @@ module Serverspec::Type
|
|
34
33
|
private
|
35
34
|
|
36
35
|
def extra_args
|
37
|
-
|
36
|
+
''
|
38
37
|
end
|
39
38
|
|
40
39
|
def curl_command
|
41
40
|
"curl #{extra_args} -s #{url} #{@insecure ? '-k' : ''} #{@redirects ? '-L' : ''}"
|
42
41
|
end
|
43
42
|
|
43
|
+
# rubocop:disable Naming/AccessorMethodName
|
44
44
|
def get_inspection
|
45
45
|
command = curl_command
|
46
46
|
@get_inspection ||= @runner.run_command(command)
|
47
47
|
end
|
48
|
+
# rubocop:enable Naming/AccessorMethodName
|
48
49
|
end
|
49
50
|
end
|
@@ -28,6 +28,8 @@ module Serverspec::Type
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def inspection
|
31
|
+
puts get_inspection.stdout
|
32
|
+
puts get_inspection.stderr
|
31
33
|
@inspection ||= ::MultiJson.load(get_inspection.stdout)[0]
|
32
34
|
end
|
33
35
|
|
@@ -37,10 +39,12 @@ module Serverspec::Type
|
|
37
39
|
@token ? "--header 'X-Consul-Token: #{@token}'" : ''
|
38
40
|
end
|
39
41
|
|
42
|
+
# rubocop:disable Naming/AccessorMethodName
|
40
43
|
def get_inspection
|
41
|
-
|
42
44
|
command = curl_command
|
43
45
|
@get_inspection ||= @runner.run_command(command)
|
44
46
|
end
|
47
|
+
# rubocop:enable Naming/AccessorMethodName
|
48
|
+
|
45
49
|
end
|
46
50
|
end
|
@@ -19,7 +19,6 @@ module Serverspec::Type
|
|
19
19
|
@inspection ||= ::MultiJson.load(get_inspection.stdout)[0]
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
22
|
##= Generated Code Start =##
|
24
23
|
# TODO: Make these better
|
25
24
|
# Key Type: String
|
@@ -63,7 +62,7 @@ module Serverspec::Type
|
|
63
62
|
inspection['TaggedAddresses']
|
64
63
|
end
|
65
64
|
|
66
|
-
#
|
65
|
+
# TODO: do method for indiviual tagged addresses
|
67
66
|
def has_tagged_addresses?(tagged_addresses)
|
68
67
|
self.tagged_addresses == tagged_addresses
|
69
68
|
end
|
@@ -127,7 +126,7 @@ module Serverspec::Type
|
|
127
126
|
inspection['ServiceWeights']
|
128
127
|
end
|
129
128
|
|
130
|
-
#
|
129
|
+
# TODO: do method for indiviual service weight are well as passing/warning
|
131
130
|
def has_service_weights?(service_weights)
|
132
131
|
self.service_weights == service_weights
|
133
132
|
end
|
@@ -204,6 +203,5 @@ module Serverspec::Type
|
|
204
203
|
self.modify_index == modify_index
|
205
204
|
end
|
206
205
|
##= Generated Code End =##
|
207
|
-
|
208
206
|
end
|
209
207
|
end
|
@@ -48,6 +48,7 @@ module Serverspec::Type
|
|
48
48
|
"-w \"#{output_format}\""
|
49
49
|
end
|
50
50
|
|
51
|
+
# rubocop:disable Naming/AccessorMethodName
|
51
52
|
def get_inspection
|
52
53
|
command = curl_command
|
53
54
|
unless @get_inspection
|
@@ -59,6 +60,7 @@ module Serverspec::Type
|
|
59
60
|
|
60
61
|
@get_inspection
|
61
62
|
end
|
63
|
+
# rubocop:enable Naming/AccessorMethodName
|
62
64
|
|
63
65
|
def output_format
|
64
66
|
out = '!!SS_URL_YAML!!---\\n'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'base64'
|
3
4
|
module Serverspec::Type
|
4
5
|
class DockerConfig < DockerBase
|
@@ -15,7 +16,7 @@ module Serverspec::Type
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def has_data64?(data)
|
18
|
-
|
19
|
+
data64 == data
|
19
20
|
end
|
20
21
|
|
21
22
|
def data64
|
@@ -48,8 +49,10 @@ module Serverspec::Type
|
|
48
49
|
|
49
50
|
private
|
50
51
|
|
52
|
+
# rubocop:disable Naming/AccessorMethodName
|
51
53
|
def get_inspection
|
52
54
|
@get_inspection ||= @runner.run_command("docker config inspect #{@name}")
|
53
55
|
end
|
56
|
+
# rubocop:enable Naming/AccessorMethodName
|
54
57
|
end
|
55
58
|
end
|
@@ -118,9 +118,11 @@ module Serverspec::Type
|
|
118
118
|
|
119
119
|
private
|
120
120
|
|
121
|
+
# rubocop:disable Naming/AccessorMethodName
|
121
122
|
def get_inspection
|
122
123
|
@containers ||= @name.include?('=') ? @runner.run_command("docker ps -qa -f #{@name}").stdout : @name
|
123
124
|
@get_inspection ||= @runner.run_command("docker inspect #{@containers}")
|
124
125
|
end
|
126
|
+
# rubocop:enable Naming/AccessorMethodName
|
125
127
|
end
|
126
128
|
end
|
@@ -3,9 +3,7 @@
|
|
3
3
|
require 'serverspec'
|
4
4
|
|
5
5
|
module Serverspec::Type
|
6
|
-
|
7
6
|
class DockerNetwork < DockerBase
|
8
|
-
|
9
7
|
def name
|
10
8
|
inspection['Name']
|
11
9
|
end
|
@@ -35,11 +33,11 @@ module Serverspec::Type
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def overlay?
|
38
|
-
|
36
|
+
has_driver? 'overlay'
|
39
37
|
end
|
40
38
|
|
41
39
|
def bridge?
|
42
|
-
|
40
|
+
has_driver? 'bridge'
|
43
41
|
end
|
44
42
|
|
45
43
|
def driver
|
@@ -66,9 +64,11 @@ module Serverspec::Type
|
|
66
64
|
inspection['Labels']
|
67
65
|
end
|
68
66
|
|
67
|
+
# rubocop:disable Naming/MethodName
|
69
68
|
def IPv6_enabled?
|
70
69
|
inspection['EnableIPv6']
|
71
70
|
end
|
71
|
+
# rubocop:enable Naming/MethodName
|
72
72
|
|
73
73
|
def internal?
|
74
74
|
inspection['Internal']
|
@@ -88,8 +88,10 @@ module Serverspec::Type
|
|
88
88
|
|
89
89
|
private
|
90
90
|
|
91
|
+
# rubocop:disable Naming/AccessorMethodName
|
91
92
|
def get_inspection
|
92
93
|
@get_inspection ||= @runner.run_command("docker network inspect #{@name}")
|
93
94
|
end
|
95
|
+
# rubocop:enable Naming/AccessorMethodName
|
94
96
|
end
|
95
97
|
end
|
@@ -14,7 +14,6 @@ module Serverspec::Type
|
|
14
14
|
availability == 'pause'
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
17
|
def availability
|
19
18
|
inspection['Spec']['Availability']
|
20
19
|
end
|
@@ -46,10 +45,13 @@ module Serverspec::Type
|
|
46
45
|
def exist?
|
47
46
|
get_inspection.success?
|
48
47
|
end
|
48
|
+
|
49
49
|
private
|
50
50
|
|
51
|
+
# rubocop:disable Naming/AccessorMethodName
|
51
52
|
def get_inspection
|
52
53
|
@get_inspection ||= @runner.run_command("docker node inspect #{@name}")
|
53
54
|
end
|
55
|
+
# rubocop:enable Naming/AccessorMethodName
|
54
56
|
end
|
55
57
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'base64'
|
3
4
|
module Serverspec::Type
|
4
5
|
class DockerSecret < DockerBase
|
@@ -15,10 +16,9 @@ module Serverspec::Type
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def has_data64?(data)
|
18
|
-
|
19
|
+
data64 == data
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
22
|
def data64
|
23
23
|
inspection['Spec']['Data']
|
24
24
|
end
|
@@ -49,8 +49,10 @@ module Serverspec::Type
|
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
+
# rubocop:disable Naming/AccessorMethodName
|
52
53
|
def get_inspection
|
53
54
|
@get_inspection ||= @runner.run_command("docker secret inspect #{@name}")
|
54
55
|
end
|
56
|
+
# rubocop:enable Naming/AccessorMethodName
|
55
57
|
end
|
56
58
|
end
|
@@ -75,7 +75,7 @@ module Serverspec::Type
|
|
75
75
|
|
76
76
|
def has_secret?(name, target = nil)
|
77
77
|
if target
|
78
|
-
secrets.find { |secret| secret['SecretName'] == name && secret['File']['Name'] == target}
|
78
|
+
secrets.find { |secret| secret['SecretName'] == name && secret['File']['Name'] == target }
|
79
79
|
else
|
80
80
|
secrets.find { |secret| secret['SecretName'] == name }
|
81
81
|
end
|
@@ -168,9 +168,11 @@ module Serverspec::Type
|
|
168
168
|
|
169
169
|
private
|
170
170
|
|
171
|
+
# rubocop:disable Naming/AccessorMethodName
|
171
172
|
def get_inspection
|
172
173
|
@get_inspection ||= @runner.run_command("docker service inspect #{@name}")
|
173
174
|
end
|
175
|
+
# rubocop:enable Naming/AccessorMethodName
|
174
176
|
end
|
175
177
|
end
|
176
178
|
|
@@ -30,17 +30,14 @@ module Serverspec::Type
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
33
|
def ssh_private_key?
|
35
34
|
inspection['typeName'] == 'SSH Username with private key'
|
36
35
|
end
|
37
36
|
|
38
|
-
|
39
37
|
def gitlab_api_token?
|
40
38
|
inspection['typeName'] == 'GitLab API token'
|
41
39
|
end
|
42
40
|
|
43
|
-
|
44
41
|
def aws_credential?
|
45
42
|
inspection['typeName'] == 'AWS Credentials'
|
46
43
|
end
|
@@ -57,16 +54,18 @@ module Serverspec::Type
|
|
57
54
|
inspection['description'] == desc
|
58
55
|
end
|
59
56
|
|
60
|
-
def
|
61
|
-
inspection['
|
57
|
+
def has_display_name?(text)
|
58
|
+
inspection['displayName'] == text
|
62
59
|
end
|
63
60
|
|
64
61
|
private
|
65
62
|
|
63
|
+
# rubocop:disable Naming/AccessorMethodName
|
66
64
|
def get_inspection
|
67
|
-
userpass = @user ? "-u #{@user}:#{@password}" :
|
65
|
+
userpass = @user ? "-u #{@user}:#{@password}" : ''
|
68
66
|
command = "curl -s #{userpass} #{url} #{@insecure ? '-k' : ''} #{@redirects ? '-L' : ''}"
|
69
67
|
@get_inspection ||= @runner.run_command(command)
|
70
68
|
end
|
69
|
+
# rubocop:enable Naming/AccessorMethodName
|
71
70
|
end
|
72
71
|
end
|