module GClouder::Resource

Public Class Methods

describe(resource, name, args = nil, force: true, failure: true, silent: false, project_id: nil) click to toggle source
# File lib/gclouder/resource.rb, line 32
def self.describe(resource, name, args = nil, force: true, failure: true, silent: false, project_id: nil)
  return if resource?(resource, name, silent: silent, project_id: project_id)
  gcloud "#{resource} describe #{name} #{args}", force: force, failure: failure, silent: silent, project_id: project_id
end
ensure(resource, name, args = nil, project_id: nil, extra_info: nil, silent: false, indent: 3, filter_key: "name", filter_value: nil, filter: " click to toggle source
# File lib/gclouder/resource.rb, line 37
def self.ensure(resource, name, args = nil, project_id: nil, extra_info: nil, silent: false, indent: 3, filter_key: "name", filter_value: nil, filter: "#{filter_key} ~ ^#{filter_value || name}$")
  return if resource?(resource, name, project_id: project_id, extra_info: extra_info, silent: silent, indent: indent, filter_key: filter_key, filter_value: filter_value, filter: filter)
  feedback("add", resource, name, extra_info: extra_info, indent: indent, silent: silent)
  gcloud "#{resource} create #{name} #{args}", project_id: project_id, silent: silent
end
feedback(action, resource, name, extra_info: nil, indent: 3, silent: false) click to toggle source
# File lib/gclouder/resource.rb, line 9
def self.feedback(action, resource, name, extra_info: nil, indent: 3, silent: false)
  return if silent
  send action, "#{name} #{extra_info}", indent: indent
end
list(resource, args = nil, snake_case: false, project_id: nil) click to toggle source
# File lib/gclouder/resource.rb, line 50
def self.list(resource, args = nil, snake_case: false, project_id: nil)
  list = gcloud "#{resource} list #{args}", force: true, project_id: project_id
  snake_case ? list.to_snake_keys : list
end
purge(resource, name, args = nil, project_id: nil, silent: false, indent: 3, filter_key: "name", filter_value: nil, filter: " click to toggle source
# File lib/gclouder/resource.rb, line 43
def self.purge(resource, name, args = nil, project_id: nil, silent: false, indent: 3, filter_key: "name", filter_value: nil, filter: "#{filter_key} ~ ^#{filter_value || name}$")
  return unless resource?(resource, name, project_id: project_id, silent: true, indent: indent, filter_key: filter_key, filter_value: filter_value, filter: filter)
  extra_info = "[skipped] (--purge not specified)" unless cli_args[:purge]
  feedback("remove", resource, name, extra_info: extra_info, indent: indent, silent: silent)
  gcloud "#{resource} delete #{name} #{args}", project_id: project_id if cli_args[:purge]
end
resource?(resource, name, args = nil, filter_key: "name", filter_value: nil, filter: " click to toggle source
# File lib/gclouder/resource.rb, line 14
def self.resource?(resource, name, args = nil, filter_key: "name", filter_value: nil, filter: "#{filter_key} ~ ^#{filter_value || name}$", project_id: nil, silent: false, extra_info: nil, indent: 3)

  exists = \
    gcloud("#{resource} list --filter '#{filter}' #{args} | jq '. | length'", force: true, project_id: project_id) > 0

  # if silent is specified then shell call returns boolean, otherwise integer
  if exists.is_a?(Integer)
    exists = exists > 0 ? true : false
  end

  if exists
    feedback("good", resource, name, extra_info: extra_info, indent: indent, silent: silent) unless silent
    return true
  end

  false
end
set(resource, name, value, args = nil, project_id: nil, extra_info: nil, silent: false, indent: 3) click to toggle source
# File lib/gclouder/resource.rb, line 55
def self.set(resource, name, value, args = nil, project_id: nil, extra_info: nil, silent: false, indent: 3)
  feedback("good", resource, name, extra_info: "[#{value}]", indent: indent, silent: silent)
  gcloud "#{resource} set #{name} #{value} #{args}", project_id: project_id, silent: silent
end