Module: RightScale::Api::Taggable

Included in:
Deployment, Ec2EbsSnapshot, Ec2EbsVolume, Ec2ServerArray, Instance, McTaggable, Server, ServerEc2EbsVolume, ServerTemplate
Defined in:
lib/rest_connection/rightscale/rightscale_api_taggable.rb

Instance Method Summary collapse

Instance Method Details

#add_tags(*args) ⇒ Object



27
28
29
30
31
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 27

def add_tags(*args)
  return false if args.empty?
  Tag.set(self.href, args.uniq)
  self.tags(true)
end

#clear_tags(namespace = nil) ⇒ Object



107
108
109
110
111
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 107

def clear_tags(namespace = nil)
  tag_ary = self.tags(true)
  tag_ary = tag_ary.select { |tag| tag.start_with?("#{namespace}:") } if namespace
  self.remove_tags(*tag_ary)
end

#get_info_tags(*tag_keys) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 55

def get_info_tags(*tag_keys)
  tags = get_tags_by_namespace("info")
  tags.each { |resource,hsh|
    hsh.reject! { |key,value|
      rej = false
      rej = !tag_keys.include?(key) unless tag_keys.empty?
      rej
    }
  }
  return tags
end

#get_tags_by_namespace(namespace) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 86

def get_tags_by_namespace(namespace)
  ret = {}
  tags = {"self" => self.tags(true)}
  tags.each { |res,ary|
    ret[res] ||= {}
    ary.each { |tag|
      next unless tag.start_with?("#{namespace}:")
      key = tag.split("=").first.split(":")[1..-1].join(":")
      value = tag.split(":")[1..-1].join(":").split("=")[1..-1].join("=")
      ret[res][key] = value
    }
  }
  return ret
end

#remove_info_tags(*tag_keys) ⇒ Object



47
48
49
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 47

def remove_info_tags(*tag_keys)
  remove_tags_by_namespace("info", *tag_keys)
end

#remove_tags(*args) ⇒ Object



33
34
35
36
37
38
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 33

def remove_tags(*args)
  return false if args.empty?
  Tag.unset(self.href, args.uniq)
  @params["tags"] -= args
  self.tags(true)
end

#remove_tags_by_namespace(namespace, *tag_keys) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 67

def remove_tags_by_namespace(namespace, *tag_keys)
  tags_to_unset = []
  tags = get_tags_by_namespace(namespace)
  tags.each { |res,hsh|
    hsh.each { |k,v|
      tags_to_unset << "#{namespace}:#{k}=#{v}" if tag_keys.include?(k)
    }
  }
  self.remove_tags(*tags_to_unset)
end

#set_info_tags(hsh = {}) ⇒ Object



51
52
53
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 51

def set_info_tags(hsh={})
  set_tags_by_namespace("info", hsh)
end

#set_tags_by_namespace(namespace, hsh = {}) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 78

def set_tags_by_namespace(namespace, hsh={})
  keys_to_change = []
  tags_to_set = []
  hsh.each { |k,v| keys_to_change << k; tags_to_set << "#{namespace}:#{k}=#{v}" }
  self.remove_tags_by_namespace(namespace, *keys_to_change)
  self.add_tags(*tags_to_set)
end

#set_tags_to(*args) ⇒ Object



101
102
103
104
105
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 101

def set_tags_to(*args)
  STDERR.puts "set_tags_to(...) is deprecated"
  self.clear_tags("info")
  self.add_tags(*(args.uniq))
end

#tags(reload = false) ⇒ Object



40
41
42
43
44
45
# File 'lib/rest_connection/rightscale/rightscale_api_taggable.rb', line 40

def tags(reload=false)
  @params["tags"] ||= []
  @params["tags"].map! { |item| item.is_a?(Hash) ? item["name"] : item }
  @params["tags"].deep_merge!(Tag.search_by_href(self.href).map { |hsh| hsh["name"] }) if reload or @params["tags"].empty?
  @params["tags"]
end