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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +117 -0
  3. data/.rubocop.yml +24 -2
  4. data/.simplecov +7 -0
  5. data/README.md +344 -15
  6. data/lib/serverspec-extra-types.rb +5 -0
  7. data/lib/serverspec_extra_types.rb +4 -3
  8. data/lib/serverspec_extra_types/matchers.rb +2 -1
  9. data/lib/serverspec_extra_types/matchers/allowed_to_run_anything.rb +12 -9
  10. data/lib/serverspec_extra_types/matchers/allowed_to_run_command.rb +8 -6
  11. data/lib/serverspec_extra_types/matchers/apply_to.rb +7 -0
  12. data/lib/serverspec_extra_types/matchers/have_host.rb +8 -1
  13. data/lib/serverspec_extra_types/matchers/have_image.rb +1 -0
  14. data/lib/serverspec_extra_types/matchers/have_label.rb +1 -3
  15. data/lib/serverspec_extra_types/types/api_base.rb +3 -2
  16. data/lib/serverspec_extra_types/types/consul_base.rb +5 -1
  17. data/lib/serverspec_extra_types/types/consul_node_list.rb +1 -1
  18. data/lib/serverspec_extra_types/types/consul_service.rb +2 -4
  19. data/lib/serverspec_extra_types/types/curl.rb +2 -0
  20. data/lib/serverspec_extra_types/types/docker_config.rb +4 -1
  21. data/lib/serverspec_extra_types/types/docker_container.rb +2 -0
  22. data/lib/serverspec_extra_types/types/docker_network.rb +6 -4
  23. data/lib/serverspec_extra_types/types/docker_node.rb +3 -1
  24. data/lib/serverspec_extra_types/types/docker_secret.rb +4 -2
  25. data/lib/serverspec_extra_types/types/docker_service.rb +3 -1
  26. data/lib/serverspec_extra_types/types/jenkins_base.rb +0 -1
  27. data/lib/serverspec_extra_types/types/jenkins_credential.rb +5 -6
  28. data/lib/serverspec_extra_types/types/jenkins_job.rb +7 -6
  29. data/lib/serverspec_extra_types/types/jenkins_plugin.rb +8 -4
  30. data/lib/serverspec_extra_types/types/nfs_export.rb +16 -4
  31. data/lib/serverspec_extra_types/types/rabbitmq_base.rb +2 -2
  32. data/lib/serverspec_extra_types/types/rabbitmq_node_list.rb +1 -1
  33. data/lib/serverspec_extra_types/types/rabbitmq_vhost_list.rb +1 -1
  34. data/lib/serverspec_extra_types/types/rabbitmq_vhost_policy.rb +13 -1
  35. data/lib/serverspec_extra_types/types/sudo_user.rb +18 -15
  36. data/lib/serverspec_extra_types/version.rb +1 -1
  37. data/properties.yml +31 -5
  38. data/serverspec-extra-types.gemspec +1 -1
  39. metadata +8 -4
@@ -17,7 +17,7 @@ module Serverspec::Type
17
17
  end
18
18
 
19
19
  def url
20
- jobname = @name.gsub('/','/job/')
20
+ jobname = @name.gsub('/', '/job/')
21
21
  "#{@url_base}/job/#{jobname}/api/json"
22
22
  end
23
23
 
@@ -91,11 +91,10 @@ module Serverspec::Type
91
91
  inspection['fullName'] == text
92
92
  end
93
93
 
94
- def has_job?(job)
95
- inspection['jobs'].find { |job| job['name'] == job }
94
+ def has_job?(_job)
95
+ inspection['jobs'].find { |job| job['name'] == _job }
96
96
  end
97
97
 
98
-
99
98
  def has_job_count?(count)
100
99
  inspection['jobs'].length == count
101
100
  end
@@ -109,15 +108,17 @@ module Serverspec::Type
109
108
  end
110
109
 
111
110
  def has_empty_job_list?
112
- inspection['jobs'].length == 0
111
+ inspection['jobs'].empty?
113
112
  end
114
113
 
115
114
  private
116
115
 
116
+ # rubocop:disable Naming/AccessorMethodName
117
117
  def get_inspection
118
- userpass = @user ? "-u #{@user}:#{@password}" : ""
118
+ userpass = @user ? "-u #{@user}:#{@password}" : ''
119
119
  command = "curl -s #{userpass} #{url} #{@insecure ? '-k' : ''} #{@redirects ? '-L' : ''}"
120
120
  @get_inspection ||= @runner.run_command(command)
121
121
  end
122
+ # rubocop:enable Naming/AccessorMethodName
122
123
  end
123
124
  end
@@ -16,8 +16,12 @@ module Serverspec::Type
16
16
  @inspection ||= ::MultiJson.load(get_inspection.stdout)['plugins'].find { |plugin| plugin['shortName'] == @name }
17
17
  end
18
18
 
19
- def installed?
20
- inspection != nil
19
+ def installed?(_provider = nil, version = nil)
20
+ if version
21
+ !inspection.nil? && inspection['version'].to_s == version.to_s
22
+ else
23
+ !inspection.nil?
24
+ end
21
25
  end
22
26
 
23
27
  def exist?
@@ -42,14 +46,14 @@ module Serverspec::Type
42
46
  end
43
47
  end
44
48
 
45
-
46
-
47
49
  private
48
50
 
51
+ # rubocop:disable Naming/AccessorMethodName
49
52
  def get_inspection
50
53
  userpass = @user ? "-u #{@user}:#{@password}" : ''
51
54
  command = "curl -s #{userpass} #{url} #{@insecure ? '-k' : ''} #{@redirects ? '-L' : ''}"
52
55
  @get_inspection ||= @runner.run_command(command)
53
56
  end
57
+ # rubocop:enable Naming/AccessorMethodName
54
58
  end
55
59
  end
@@ -17,11 +17,10 @@ module Serverspec::Type
17
17
 
18
18
  def has_host?(host_id, option = nil)
19
19
  if option
20
- host(host_id).include?(option)
20
+ check_options(host_id, option)
21
21
  else
22
- hosts.has_key?(host_id)
22
+ hosts.key?(host_id)
23
23
  end
24
-
25
24
  end
26
25
 
27
26
  def hosts
@@ -43,9 +42,22 @@ module Serverspec::Type
43
42
  @inspection ||= get_inspection.stdout
44
43
  end
45
44
 
45
+ # rubocop:disable Naming/AccessorMethodName
46
46
  def get_inspection
47
47
  command = "grep #{@export} /etc/exports"
48
48
  @get_inspection ||= @runner.run_command(command)
49
49
  end
50
+ # rubocop:enable Naming/AccessorMethodName
51
+
52
+ private
53
+
54
+ def check_options(host_id, opts)
55
+ options = opts.include?(',') ? opts.spilt(',') : opts
56
+ if options.is_a? Array
57
+ host(host_id).split(',').include?(options)
58
+ else
59
+ host(host_id).include?(options)
60
+ end
61
+ end
50
62
  end
51
- end
63
+ end
@@ -29,17 +29,17 @@ module Serverspec::Type
29
29
  end
30
30
  end
31
31
 
32
-
33
-
34
32
  private
35
33
 
36
34
  def extra_args
37
35
  "-u #{@user}:#{@password}"
38
36
  end
39
37
 
38
+ # rubocop:disable Naming/AccessorMethodName
40
39
  def get_inspection
41
40
  command = curl_command
42
41
  @get_inspection ||= @runner.run_command(command)
43
42
  end
43
+ # rubocop:enable Naming/AccessorMethodName
44
44
  end
45
45
  end
@@ -9,7 +9,7 @@ module Serverspec::Type
9
9
  end
10
10
 
11
11
  def to_s
12
- "RabbitMQ node list"
12
+ 'RabbitMQ node list'
13
13
  end
14
14
 
15
15
  def inspection
@@ -9,7 +9,7 @@ module Serverspec::Type
9
9
  end
10
10
 
11
11
  def to_s
12
- "RabbitMQ VHosts List"
12
+ 'RabbitMQ VHosts List'
13
13
  end
14
14
 
15
15
  def url
@@ -50,7 +50,19 @@ module Serverspec::Type
50
50
  end
51
51
 
52
52
  def mirror_all?
53
- inspection['apply-to'] == 'all'
53
+ apply_to?('all')
54
+ end
55
+
56
+ def mirror_queues?
57
+ apply_to?('queues')
58
+ end
59
+
60
+ def mirror_exchanges?
61
+ apply_to?('exchanges')
62
+ end
63
+
64
+ def apply_to?(arg)
65
+ inspection['apply-to'] == arg
54
66
  end
55
67
 
56
68
  # TODO: priority method and matcher
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'serverspec'
2
4
  require 'serverspec/type/base'
3
5
  require 'multi_json'
@@ -5,7 +7,6 @@ require 'serverspec_extra_types/helpers/properties'
5
7
 
6
8
  module Serverspec::Type
7
9
  class SudoUser < Base
8
-
9
10
  def initialize(name)
10
11
  super
11
12
  @user = name
@@ -19,8 +20,6 @@ module Serverspec::Type
19
20
  end
20
21
  end
21
22
 
22
-
23
-
24
23
  def allowed_to_run_command?(command, user = nil, checkpw = false)
25
24
  perm = permission(command)
26
25
  if user
@@ -34,10 +33,8 @@ module Serverspec::Type
34
33
  end
35
34
  end
36
35
 
37
-
38
-
39
36
  def permission(command)
40
- permissions.find {|x| x[:command] == command}
37
+ permissions.find { |x| x[:command] == command }
41
38
  end
42
39
 
43
40
  def permissions
@@ -52,39 +49,45 @@ module Serverspec::Type
52
49
  @inspection ||= get_sudo_perms(get_inspection.stdout)
53
50
  end
54
51
 
55
-
56
52
  private
53
+
54
+ # rubocop:disable Naming/AccessorMethodName
57
55
  def get_inspection
58
56
  @get_inspection ||= @runner.run_command("sudo -l -U #{@user}")
59
57
  end
58
+ # rubocop:enable Naming/AccessorMethodName
60
59
 
61
60
  def chunk_permission(perm)
62
61
  chunks = {}
63
- parts = perm.sub(' : ', ':').split(/\s+/).reject{ |x| x == '' || x == "\n"}
62
+ parts = perm.sub(' : ', ':').split(/\s+/).reject { |x| x == '' || x == "\n" }
64
63
  user = parts[0].sub('(', '').sub(')', '')
64
+ chunk(chunks, parts, perm, user)
65
+ chunks
66
+ end
67
+
68
+ def chunk(chunks, parts, perm, user)
65
69
  if user.include?(':')
66
70
  chunks[:user] = user.split(':')[0]
67
71
  chunks[:group] = user.split(':')[1]
68
72
  else
69
73
  chunks[:user] = user
70
74
  end
71
- if /NOPASSWD:/.match perm
75
+ if /NOPASSWD:/.match? perm
72
76
  chunks[:nopasswd] = true
73
- chunks[:command] = parts[2..-1].join(" ")
77
+ chunks[:command] = parts[2..-1].join(' ')
74
78
  else
75
79
  chunks[:nopasswd] = false
76
80
  chunks[:command] = parts[1..-1].join(' ')
77
81
  end
78
- chunks
79
82
  end
80
83
 
81
84
  def get_sudo_perms(output)
82
85
  matches = /Matching Defaults entries for #{@user} on .*\n(.*)\n/.match output
83
- defaults = matches[1].split(', ').map(&:strip)
84
- matches = (/User #{@user} may run the following commands on .*\n((\W.*\n)*)/).match output
86
+ defaults = matches ? matches[1].split(', ').map(&:strip) : {}
87
+ matches = /User #{@user} may run the following commands on .*\n((\W.*\n)*)/.match output
85
88
 
86
- permissions = matches[1].split("\n").map{ |x| chunk_permission(x.strip) }
89
+ permissions = matches ? matches[1].split("\n").map { |x| chunk_permission(x.strip) } : {}
87
90
  { defaults: defaults, permissions: permissions }
88
91
  end
89
92
  end
90
- end
93
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ServerspecExtraTypes
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
@@ -26,8 +26,6 @@ targets:
26
26
  backend: exec
27
27
  spec_type: docker_network
28
28
 
29
-
30
-
31
29
  rabbitmq:
32
30
  backend: exec
33
31
  spec_type: rabbit
@@ -51,11 +49,39 @@ targets:
51
49
 
52
50
  sudo:
53
51
  backend: docker
54
- docker_build_dir: spec/resources
52
+ docker_build_dir: spec/resources/dockerfiles/sudo
55
53
  spec_type: sudo
56
54
 
55
+ sudo_matchers:
56
+ backend: docker
57
+ docker_build_dir: spec/resources/dockerfiles/sudo
58
+ spec_type: matchers/sudo_matcher
59
+
57
60
 
58
61
  sudo_user:
59
62
  backend: docker
60
- docker_build_dir: spec/resources
61
- spec_type: sudo_user
63
+ docker_build_dir: spec/resources/dockerfiles/sudo
64
+ spec_type: sudo_user
65
+
66
+ nfs_export:
67
+ backend: docker
68
+ docker_build_dir: spec/resources/dockerfiles/nfs
69
+ spec_type: nfs_export
70
+
71
+ jenkins_plugin:
72
+ backend: exec
73
+ spec_type: jenkins_plugin
74
+ variables:
75
+ jenkins_url: http://localhost:38080
76
+
77
+ jenkins_credential:
78
+ backend: exec
79
+ spec_type: jenkins_credential
80
+ variables:
81
+ jenkins_url: http://localhost:38080
82
+
83
+ jenkins_job:
84
+ backend: exec
85
+ spec_type: jenkins_job
86
+ variables:
87
+ jenkins_url: http://localhost:38080
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'rspec', '~> 3.8.0'
28
28
  spec.add_development_dependency 'rubocop'
29
29
  spec.add_development_dependency 'simplecov'
30
- spec.add_development_dependency 'serverspec_launcher', '~> 0.3.0'
30
+ spec.add_development_dependency 'serverspec_launcher', '~> 0.4.0'
31
31
  spec.add_development_dependency 'rspec-collection_matchers'
32
32
  spec.add_development_dependency 'rest-client'
33
33
  spec.add_development_dependency 'docker-swarm-sdk'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverspec-extra-types
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Wardrobe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-11 00:00:00.000000000 Z
11
+ date: 2019-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.3.0
89
+ version: 0.4.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.3.0
96
+ version: 0.4.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec-collection_matchers
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -172,8 +172,10 @@ extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
174
  - ".gitignore"
175
+ - ".gitlab-ci.yml"
175
176
  - ".rspec"
176
177
  - ".rubocop.yml"
178
+ - ".simplecov"
177
179
  - ".travis.yml"
178
180
  - CODE_OF_CONDUCT.md
179
181
  - Gemfile
@@ -185,11 +187,13 @@ files:
185
187
  - bin/http_doc_gem.rb
186
188
  - bin/setup
187
189
  - http_matchers.md
190
+ - lib/serverspec-extra-types.rb
188
191
  - lib/serverspec_extra_types.rb
189
192
  - lib/serverspec_extra_types/helpers/properties.rb
190
193
  - lib/serverspec_extra_types/matchers.rb
191
194
  - lib/serverspec_extra_types/matchers/allowed_to_run_anything.rb
192
195
  - lib/serverspec_extra_types/matchers/allowed_to_run_command.rb
196
+ - lib/serverspec_extra_types/matchers/apply_to.rb
193
197
  - lib/serverspec_extra_types/matchers/be_a_manager_node.rb
194
198
  - lib/serverspec_extra_types/matchers/be_a_worker_node.rb
195
199
  - lib/serverspec_extra_types/matchers/be_active.rb