class Serverspec::Type::OctopusDeployTentacle
Public Class Methods
new(serverUrl, apiKey, instance, spaceId = 'Spaces-1')
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 15 def initialize(serverUrl, apiKey, instance, spaceId = 'Spaces-1') @name = "Octopus Deploy Tentacle #{instance}" @runner = Specinfra::Runner @serverUrl = serverUrl @apiKey = apiKey @spaceId = spaceId if (serverUrl.nil?) raise "'serverUrl' was not provided. Unable to connect to Octopus server to validate configuration." end if (apiKey.nil?) raise "'apiKey' was not provided. Unable to connect to Octopus server to validate configuration." end if (exists?) thumbprint = `"c:\\program files\\Octopus Deploy\\Tentacle\\Tentacle.exe" show-thumbprint --console --nologo --instance #{instance}` thumbprint = thumbprint.gsub('==== ShowThumbprintCommand starting ====', '').strip thumbprint = thumbprint.gsub('The thumbprint of this Tentacle is: ', '').strip thumbprint = thumbprint.gsub('==== ShowThumbprintCommand completed ====', '').strip thumbprint = thumbprint.gsub('==== ShowThumbprintCommand ====', '').strip @serverSupportsSpaces = check_supports_spaces(serverUrl) if (@serverSupportsSpaces) @spaceFragment = "#{@spaceId}/" end @machine = get_machine_via_api(serverUrl, apiKey, thumbprint) else puts "tentacle.exe does not exist" end end
Public Instance Methods
exists?()
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 144 def exists? ::File.exists?("c:\\program files\\Octopus Deploy\\Tentacle\\Tentacle.exe") end
has_display_name?(name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 115 def has_display_name?(name) return false if @machine.nil? @machine["Name"] == name end
has_endpoint?(uri)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 120 def has_endpoint?(uri) return false if @machine.nil? return false if @machine["Uri"].nil? # polling tentacles have null endpoint. catch that. puts "Expected uri '#{uri}' for Tentacle #{@name}, but got '#{@machine["Uri"]}'" unless (@machine["Uri"].casecmp(uri) == 0) @machine["Uri"].casecmp(uri) == 0 end
has_policy?(policy_name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 100 def has_policy?(policy_name) return false if @machine.nil? url = "#{@serverUrl}/api/#{@spaceFragment}machinepolicies/all?api-key=#{@apiKey}" resp = Net::HTTP.get_response(URI.parse(url)) policies = JSON.parse(resp.body) policy_id = policies.select {|e| e["Name"] == policy_name}.first["Id"] @machine["MachinePolicyId"] == policy_id end
has_role?(role_name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 109 def has_role?(role_name) return false if @machine.nil? roles = @machine["Roles"] !roles.select {|e| e == role_name}.empty? end
has_tenant?(tenant_name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 85 def has_tenant?(tenant_name) return false if @machine.nil? url = "#{@serverUrl}/api/#{@spaceFragment}tenants/all?api-key=#{@apiKey}" resp = Net::HTTP.get_response(URI.parse(url)) tenants = JSON.parse(resp.body) tenant_id = tenants.select {|e| e["Name"] == tenant_name}.first["Id"] !@machine["TenantIds"].select {|e| e == tenant_id}.empty? end
has_tenant_tag?(tag_set, tag)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 94 def has_tenant_tag?(tag_set, tag) return false if @machine.nil? tenant_tags = @machine["TenantTags"] !tenant_tags.select {|e| e == "#{tag_set}/#{tag}"}.empty? end
has_tenanted_deployment_participation?(mode)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 127 def has_tenanted_deployment_participation?(mode) return false if @machine.nil? @machine["TenantedDeploymentParticipation"] == mode end
in_environment?(environment_name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 66 def in_environment?(environment_name) return false if @machine.nil? url = "#{@serverUrl}/api/#{@spaceFragment}environments/all?api-key=#{@apiKey}" resp = Net::HTTP.get_response(URI.parse(url)) environments = JSON.parse(resp.body) environment_id = environments.select {|e| e["Name"] == environment_name}.first["Id"] !@machine["EnvironmentIds"].select {|e| e == environment_id}.empty? end
in_space?(space_name)
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 75 def in_space?(space_name) return false if @machine.nil? return false if @serverSupportsSpaces url = "#{@serverUrl}/api/spaces/all?api-key=#{@apiKey}" resp = Net::HTTP.get_response(URI.parse(url)) spaces = JSON.parse(resp.body) space_id = spaces.select {|e| e["Name"] == space_name}.first["Id"] @machine["SpaceId"] == space_id end
listening_tentacle?()
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 132 def listening_tentacle? return false if @machine.nil? puts "Expected CommunicationStyle 'TentaclePassive' for Tentacle #{@name}, but got '#{@machine["Endpoint"]["CommunicationStyle"]}'" if (@machine["Endpoint"]["CommunicationStyle"] != "TentaclePassive") @machine["Endpoint"]["CommunicationStyle"] == "TentaclePassive" end
online?()
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 52 def online? return nil if @machine.nil? @machine = poll_until_machine_has_completed_healthcheck(@serverUrl, @apiKey, @machine["Thumbprint"]) status = @machine['Status'] if ("#{status}" == "") status = @machine['HealthStatus'] if "#{status}" == "" puts "Expected status 'Healthy|HasWarnings' for Tentacle #{@name}, but got '#{status}'" if (status != "Healthy" && status != "HasWarnings") status == "Healthy" || status == "HasWarnings" else puts "Expected status 'Online|CalamariNeedsUpgrade|NeedsUpgrade' for Tentacle #{@name}, but got '#{status}'" if (status != "Online" && status != "CalamariNeedsUpgrade" && status != "NeedsUpgrade") status == "Online" || status == "CalamariNeedsUpgrade" || status == "NeedsUpgrade" end end
polling_tentacle?()
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 138 def polling_tentacle? return false if @machine.nil? puts "Expected CommunicationStyle 'TentacleActive' for Tentacle #{@name}, but got '#{@machine["Endpoint"]["CommunicationStyle"]}'" if (@machine["Endpoint"]["CommunicationStyle"] != "TentacleActive") @machine["Endpoint"]["CommunicationStyle"] == "TentacleActive" end
registered_with_the_server?()
click to toggle source
# File lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb, line 48 def registered_with_the_server? !@machine.nil? end