octopus-serverspec-extensions 0.15.4 → 0.15.5

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
  SHA256:
3
- metadata.gz: '09404e7c6f33ee6dfde8d34818fb89754b9bd29c823a8b6d32a30f36042a8ca2'
4
- data.tar.gz: 7db537c1863d7717b83c0b71aa03a8fa9005f728a8d4294d09f29ac750488bbe
3
+ metadata.gz: 260a7c2b8e6581eacd93f295117fa984b5e496dc51cb23c798d34c02c8411690
4
+ data.tar.gz: 348f4dfda4e0cf997e881e85c79fe10146982692d7af54aa5af8b354701fe755
5
5
  SHA512:
6
- metadata.gz: 51779dd45bc5df85051afe6675e70d2e74347e639d3f136dd0e13e001fab5d0c7f957c8cb4cbd790971601ff9f97ca9e07f6566b8dab44f5c252d8b90bc661ac
7
- data.tar.gz: 5892ca16b7895a43414d99d5fe685f3a645584d370f95bfb5a5922031ee0d63fc1fef6d55d8e61eee1187eaad440ee4e7469e210a795c04cdd6dfa8ee0e878da
6
+ metadata.gz: 68c3951d2313d435d1f106028862489bdf3eef2dd65b1731ba01aa61e24387c750480fbca74713c5be5a25d66d10e2b176442890a7006b29340e68ad8e556314
7
+ data.tar.gz: 8997eca9173dce7dfc46e0ec63af78fe043b0d7d652279128c9233ca110b937ea4d2921b37fa5d0bae9e9cd35ec41e42c3a85c05b2b3963b7da4fff4888c2b1e
@@ -5,6 +5,7 @@ require 'octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb'
5
5
  require 'octopus_serverspec_extensions/type/octopus_deploy_environment.rb'
6
6
  require 'octopus_serverspec_extensions/type/octopus_deploy_project_group.rb'
7
7
  require 'octopus_serverspec_extensions/type/octopus_deploy_worker_pool.rb'
8
+ require 'octopus_serverspec_extensions/type/octopus_deploy_account.rb'
8
9
  require 'octopus_serverspec_extensions/type/windows_dsc.rb'
9
10
  require 'octopus_serverspec_extensions/type/windows_firewall.rb'
10
11
  require 'octopus_serverspec_extensions/type/windows_scheduled_task.rb'
@@ -0,0 +1,165 @@
1
+ require 'serverspec'
2
+ require 'serverspec/type/base'
3
+ require 'net/http'
4
+ require 'json'
5
+
6
+ module Serverspec::Type
7
+ class OctopusDeployAccount < Base
8
+ @account = nil
9
+ @serverUrl = nil
10
+ @apiKey = nil
11
+ @serverSupportsSpaces = nil
12
+ @spaceId = nil
13
+ @spaceFragment = ""
14
+
15
+ # constants for account types
16
+ AZURE = 'AzureSubscription'.freeze
17
+ AWS = 'AmazonWebServicesAccount'.freeze
18
+ SSH = 'SshKeypair'.freeze
19
+ TOKEN = 'Token'.freeze
20
+ USERNAME = 'UsernamePassword'.freeze
21
+ ACCOUNTTYPES = [AZURE, AWS, SSH, TOKEN, USERNAME]
22
+
23
+ def initialize(serverUrl, apiKey, account_name, space_name = nil)
24
+ @name = "Octopus Deploy Account #{account_name}"
25
+ @runner = Specinfra::Runner
26
+ @serverUrl = serverUrl
27
+ @apiKey = apiKey
28
+
29
+ if serverUrl.nil?
30
+ raise "'serverUrl' was not provided. Unable to connect to Octopus server to validate configuration."
31
+ end
32
+ if apiKey.nil?
33
+ raise "'apiKey' was not provided. Unable to connect to Octopus server to validate configuration."
34
+ end
35
+ if account_name.nil?
36
+ raise "'account_name' was not provided. Unable to connect to Octopus server to validate configuration."
37
+ end
38
+
39
+ @serverSupportsSpaces = check_supports_spaces(serverUrl)
40
+
41
+ if @serverSupportsSpaces
42
+ # set the spaceId correctly
43
+
44
+ if space_name.nil?
45
+ @spaceId = 'Spaces-1' # default to Spaces-1
46
+ else
47
+ @spaceId = get_space_id?(space_name)
48
+ end
49
+
50
+ @spaceFragment = "#{@spaceId}/"
51
+ end
52
+
53
+ @account = get_account_via_api(serverUrl, apiKey, account_name)
54
+ end
55
+
56
+ def exists?
57
+ (!@account.nil?) && (@account != [])
58
+ end
59
+
60
+ def has_description?(account_description)
61
+ return false if @account.nil?
62
+ @account["Description"] == account_description
63
+ end
64
+
65
+ def is_account_type?(account_type_name)
66
+ if !ACCOUNTTYPES.include? account_type_name
67
+ raise("'#{account_type_name}' is not a valid account type")
68
+ end
69
+ return false if @account.nil?
70
+
71
+ @account["AccountType"] == account_type_name
72
+ end
73
+
74
+ def is_azure_account?
75
+ return false if @account.nil?
76
+ @account["AccountType"] == AZURE
77
+ # should also have a subscription number, but Octopus manages validation on this
78
+ end
79
+
80
+ def is_aws_account?
81
+ return false if @account.nil?
82
+ @account["AccountType"] == AWS
83
+ end
84
+
85
+ def is_ssh_key_pair?
86
+ return false if @account.nil?
87
+ @account["AccountType"] == SSH
88
+ end
89
+
90
+ def is_username_password?
91
+ return false if @account.nil?
92
+ @account["AccountType"] == USERNAME
93
+ end
94
+
95
+ def is_token?
96
+ return false if @account.nil?
97
+ @account["AccountType"] == TOKEN
98
+ end
99
+
100
+ def in_environment?(environment_name)
101
+ return false if @account.nil?
102
+ url = "#{@serverUrl}/api/#{@spaceFragment}environments/all?api-key=#{@apiKey}"
103
+ resp = Net::HTTP.get_response(URI.parse(url))
104
+ environments = JSON.parse(resp.body)
105
+ environment_id = environments.select {|e| e["Name"] == environment_name}.first["Id"]
106
+ !@account["EnvironmentIds"].select {|e| e == environment_id}.empty?
107
+ end
108
+
109
+ def has_tenanted_deployment_participation?(mode)
110
+ return false if @machine.nil?
111
+ @machine["TenantedDeploymentParticipation"] == mode # copied directly from tentacle
112
+ end
113
+
114
+ def has_property?(property_name, expected_value)
115
+ return false if @account.nil?
116
+ @account[property_name] == expected_value
117
+ end
118
+ end
119
+
120
+ def octopus_deploy_account(serverUrl, apiKey, account_name)
121
+ OctopusDeployAccount.new(serverUrl, apiKey, account_name)
122
+ end
123
+
124
+ private
125
+
126
+ def get_account_via_api(serverUrl, apiKey, account_name)
127
+ account = nil
128
+ url = "#{serverUrl}/api/#{@spaceFragment}accounts/all?api-key=#{apiKey}"
129
+
130
+ begin
131
+ resp = Net::HTTP.get_response(URI.parse(url))
132
+ body = JSON.parse(resp.body)
133
+ account = body.select {|i| i['Name'] == account_name }.first unless body.nil?
134
+ rescue => e
135
+ raise "get_account_via_api: Unable to connect to #{url}: #{e}"
136
+ end
137
+
138
+ account
139
+ end
140
+
141
+ def check_supports_spaces(serverUrl)
142
+ begin
143
+ resp = Net::HTTP.get_response(URI.parse("#{serverUrl}/api/"))
144
+ body = JSON.parse(resp.body)
145
+ version = body['Version']
146
+ return Gem::Version.new(version) > Gem::Version.new('2019.0.0')
147
+ rescue => e
148
+ puts "check_supports_spaces: Unable to connect to #{serverUrl}: #{e}"
149
+ end
150
+
151
+ false
152
+ end
153
+
154
+ def get_space_id?(space_name)
155
+ return false if @serverSupportsSpaces.nil?
156
+ url = "#{@serverUrl}/api/Spaces/all?api-key=#{@apiKey}"
157
+ resp = Net::HTTP.get_response(URI.parse(url))
158
+ spaces = JSON.parse(resp.body)
159
+ space_id = spaces.select {|e| e["Name"] == space_name}.first["Id"]
160
+ space_id
161
+ end
162
+
163
+ end
164
+
165
+ include Serverspec::Type
@@ -1,3 +1,3 @@
1
1
  module OctopusServerSpecExtensions
2
- VERSION = "0.15.4"
2
+ VERSION = "0.15.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopus-serverspec-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.4
4
+ version: 0.15.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Richardson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-13 00:00:00.000000000 Z
11
+ date: 2019-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: serverspec
@@ -160,6 +160,7 @@ files:
160
160
  - lib/octopus_serverspec_extensions/type/chocolatey_package.rb
161
161
  - lib/octopus_serverspec_extensions/type/java_property_file.rb
162
162
  - lib/octopus_serverspec_extensions/type/npm_package.rb
163
+ - lib/octopus_serverspec_extensions/type/octopus_deploy_account.rb
163
164
  - lib/octopus_serverspec_extensions/type/octopus_deploy_environment.rb
164
165
  - lib/octopus_serverspec_extensions/type/octopus_deploy_project_group.rb
165
166
  - lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb