class GClouderUndefinedResources::RemoteResources::Resource
Attributes
data[RW]
name[RW]
Public Class Methods
new(name, data)
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 10 def initialize(name, data) if name.nil? ap data raise StandardError, "can't find name for resource" end @name = name @data = data end
Public Instance Methods
custom_marker?(type)
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 107 def custom_marker?(type) filter.key?("marker") end
defined?()
click to toggle source
check for local regional and local global definitions
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 59 def defined? local_resources = GClouderUndefinedResources.local_resources if global? local_resources.global?(type, name) else local_resources.regional?(region, type, name) end end
filter()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 174 def filter @filter_rule end
filter_description()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 136 def filter_description description = status_and_description[1] if description "# #{description}".gray else "# filter has no description".gray end end
filtered?()
click to toggle source
check to see if this resource has been filtered
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 70 def filtered? unless CLIArgs.cli_args[:filter_config_given] puts "no filter config given" if CLIArgs.cli_args["verbose"] return false end unless filters.key?("filters") raise StandardError, "no filters key found in filter config" end original_type = @data["@type"] filters["filters"].each do |filter| if filter["region"] != region && filter["region"] != "*" next end if filter["zone"] != zone && filter["zone"] != "*" next end if filter["type"] != original_type && filter["type"] != "*" next end if (name !~ Regexp.new(filter["name"]) ? true : false) && filter["name"] != "*" next end @filter_rule = filter return true end false end
formatted_filter_rule()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 193 def formatted_filter_rule filter.ai.gsub("\n", "\n ").gsub(/^{/, " {") end
global?()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 46 def global? return true if zone.nil? && region.nil? #return true if @data.key?("location") && @data["location"] == "global" return unless @data.key?("selfLink") !@data["selfLink"].match(/.*\/projects\/[^\/]+\/global/).nil? end
marker(marker, type)
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 111 def marker(marker, type) if filters.dig("markers", marker.to_s).nil? raise StandardError, "undefined marker type: #{marker}" end if filters.dig("markers", marker.to_s, type.to_s).nil? raise StandardError, "undefined type for marker '#{marker}': #{type}" end if filters.dig("markers", marker.to_s, type.to_s, "description") description = filters["markers"][marker.to_s][type.to_s]["description"] else description = nil end symbol = filters["markers"][marker.to_s][type.to_s]["symbol"] colour = filters["markers"][marker.to_s][type.to_s]["colour"] [symbol.send(colour), description] end
region()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 22 def region # if location is set and its "global" then return.. return if (@data.key?("location") && @data["location"] == "global") #match = @data["location"].downcase if @data.key?("location") && !match[1] puts @data["location"] if @data.key?("location") # if no selfLink exists then it's not possible to establish the region return unless @data.key?("selfLink") # establish region from from selfLink match = @data["selfLink"].match(/.*\/regions\/([^\/]+)/) return match[1] if match # if region cant be established but a zone exists, then take region from zone string zone[0..-3] if zone end
status()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 132 def status status_and_description[0] end
status_and_description()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 145 def status_and_description if self.defined? && !self.filtered? return marker(:unfiltered_default, :defined) end if !self.defined? && !self.filtered? return marker(:unfiltered_default, :undefined) end if self.defined? && self.filtered? if custom_marker?(:defined) return marker(filter["marker"], :defined) else return marker(:filtered_default, :defined) end end if !self.defined? && self.filtered? if custom_marker?(:undefined) return marker(filter["marker"], :undefined) else return marker(:filtered_default, :undefined) end end # shouldn't reach this raise StandardError, "there was a problem establishing resource state" end
to_s()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 186 def to_s s = "#{status} #{name}" s += " #{filter_description}" if CLIArgs.cli_args[:show_filter_name] and filtered? s += "\n#{formatted_filter_rule}" if CLIArgs.cli_args[:show_filter_rule] and filtered? s end
type()
click to toggle source
type is the Remote
version of Local path.., use this to check against local data structure
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 54 def type @type ||= get_type end
zone()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 40 def zone return unless @data.key?("selfLink") match = @data["selfLink"].match(/.*\/zones\/([^\/]+)/) match[1] if match end
Private Instance Methods
filters()
click to toggle source
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 199 def filters @filters ||= YAML.load_file(CLIArgs.cli_args[:filter_config]) rescue => error puts "failed to load filter config: #{error}" exit 1 end
get_type()
click to toggle source
FIXME - add more types
# File lib/gclouder_undefined_resources/remote_resources/resource.rb, line 207 def get_type case @data["@type"] when "serviceAccount" ["service_accounts"] # TODO: not yet implemented in gclouder when "type.googleapis.com/cloud.bigstore.api.Bucket" ["buckets"] when "type.googleapis.com/cloud.dns.api.ManagedZone" ["dns", "zones"] # TODO: not yet implemented in gclouder when "type.googleapis.com/cloud.resourcemanager.Organization" ["resource_manager", "organization"] when "type.googleapis.com/compute.BackendBucket" ["compute", "backend-buckets"] when "type.googleapis.com/compute.Disk" ["compute", "disks"] when "type.googleapis.com/compute.Firewall" ["firewall", "rules"] when "type.googleapis.com/compute.HealthCheck" ["compute", "health_check"] when "type.googleapis.com/compute.HttpHealthCheck" ["compute", "http_health_check"] when "type.googleapis.com/compute.HttpsHealthCheck" ["compute", "https_health_check"] when "type.googleapis.com/compute.Image" ["compute", "images"] when "type.googleapis.com/compute.Instance" ["compute", "instances"] when "type.googleapis.com/compute.InstanceTemplate" ["compute", "instance_templates"] when "type.googleapis.com/compute.Network" ["networks"] when "type.googleapis.com/compute.Router" ["compute", "router"] # TODO: not yet implemented in gclouder when "type.googleapis.com/compute.SslCertificate" ["compute", "ssl_certificate"] when "type.googleapis.com/compute.Subnetwork" ["subnets"] when "type.googleapis.com/compute.TargetHttpProxy" ["compute", "target_http_proxies"] when "type.googleapis.com/compute.TargetHttpsProxy" ["compute", "target_https_proxies"] when "type.googleapis.com/compute.UrlMap" ["compute", "url_maps"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.api.servicemanagement.v1.ManagedService" ["service_management", "service"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.appengine.v1.Application" ["app", "app"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.appengine.v1.Service" ["app", "service"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.appengine.v1.Version" ["app", "version"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.cloud.billing.v1.BillingAccount" ["billing", "account"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.cloud.dataproc.v1.Cluster" ["dataproc", "cluster"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.cloudresourcemanager.projects.v1beta1.Project" ["project"] # TODO: not yet implemented in gclouder when "type.googleapis.com/google.cloud.dataproc.v1.Job" ["dataproc", "job"] else puts "error: unknown or no '@type' property found for data:" ap @data exit 1 end end