octopus-serverspec-extensions 0.15.4 → 0.15.5

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
  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