Module: AceClient::Niftycloud::Computing

Defined in:
lib/ace-client/niftycloud/computing.rb

Instance Method Summary collapse

Instance Method Details

#delete_imagesObject



137
138
139
140
141
142
143
# File 'lib/ace-client/niftycloud/computing.rb', line 137

def delete_images
  self.images.each do |image|
    if image['imageOwnerId'] == 'self'
      self.action('DeleteImage', 'ImageId' => image['imageId'])
    end
  end
end

#delete_instancesObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/ace-client/niftycloud/computing.rb', line 60

def delete_instances
  until instances.empty? do
    instances.each do |instance|
      self.action('TerminateInstances', {'InstanceId.1' => instance['instanceId']})
    end
    uploads.each do |upload|
      self.action('CancelUpload', {'ConversionTaskId' => upload['conversionTaskId']})
    end
    sleep 5
  end
end

#delete_key_pairsObject



72
73
74
75
76
# File 'lib/ace-client/niftycloud/computing.rb', line 72

def delete_key_pairs
  key_pairs.each do |key_pair|
    self.action('DeleteKeyPair', {'KeyName' => key_pair['keyName']})
  end
end

#delete_load_balancersObject



122
123
124
125
126
127
128
129
# File 'lib/ace-client/niftycloud/computing.rb', line 122

def delete_load_balancers
  self.load_balancers.each do |lb|
    name = lb['LoadBalancerName']
    port = lb['ListenerDescriptions']['member']['Listener']['LoadBalancerPort']
    instance_port = lb['ListenerDescriptions']['member']['Listener']['InstancePort']
    self.action('DeleteLoadBalancer', 'LoadBalancerName' => name, 'LoadBalancerPort' => port, 'InstancePort' => instance_port)
  end
end

#delete_resourcesObject



151
152
153
154
155
156
157
158
159
160
161
# File 'lib/ace-client/niftycloud/computing.rb', line 151

def delete_resources
  stop_instances
  delete_instances 
  delete_key_pairs
  delete_security_group_rules
  delete_security_groups
  delete_load_balancers
  delete_volumes
  delete_images
  delete_ssl_certificates
end

#delete_security_group_rulesObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/ace-client/niftycloud/computing.rb', line 91

def delete_security_group_rules
  security_groups.each do |group|
    rules = [group['ipPermissions']['item']].flatten rescue []
    next if rules.empty?
    rules.each do |rule|
      hash = {}
      hash["IpPermissions.1.IpProtocol"] = rule['ipProtocol']
      hash["IpPermissions.1.FromPort"] = rule['fromPort'] if rule['fromPort']
      hash["IpPermissions.1.ToPort"] = rule['toPort'] if rule['toPort']
      hash["IpPermissions.1.InOut"] = rule['inOut'] if rule['inOut']
      if rule.key?('ipRanges')
        hash["IpPermissions.1.IpRanges.1.CidrIp"] = rule['ipRanges']['item']['cidrIp'] # TODO: can't delete cidr ip rules
      elsif rule.key?('groups')
        hash["IpPermissions.1.Groups.1.GroupName"] = rule['groups']['item']['groupName']
      end
      hash['GroupName'] = group['groupName']
      self.action('RevokeSecurityGroupIngress', hash)
      wait_security_group_status(group['groupName'], 'applied')
    end
  end
end

#delete_security_groupsObject



113
114
115
116
117
118
119
120
# File 'lib/ace-client/niftycloud/computing.rb', line 113

def delete_security_groups
  until security_groups.empty? do
    security_groups.each do |group|
      self.action('DeleteSecurityGroup', 'GroupName' => group['groupName'])
    end
    sleep 5
  end
end

#delete_ssl_certificatesObject



145
146
147
148
149
# File 'lib/ace-client/niftycloud/computing.rb', line 145

def delete_ssl_certificates
  self.ssl_certificates.each do |sc|
    self.action('DeleteSslCertificate', 'FqdnId' => sc['fqdnId'])
  end
end

#delete_volumesObject



131
132
133
134
135
# File 'lib/ace-client/niftycloud/computing.rb', line 131

def delete_volumes
  self.volumes.each do |volume|
    self.action('DeleteVolume', 'VolumeId' => volume['volumeId'])
  end
end

#find_instance_by_id(instance_id) ⇒ Object



44
45
46
47
# File 'lib/ace-client/niftycloud/computing.rb', line 44

def find_instance_by_id(instance_id)
  response = self.action('DescribeInstances', {'InstanceId.1' => instance_id})
  response['DescribeInstancesResponse']['reservationSet']['item']['instancesSet']['item'] rescue nil
end

#find_security_group_by_name(name) ⇒ Object



78
79
80
81
# File 'lib/ace-client/niftycloud/computing.rb', line 78

def find_security_group_by_name(name)
  response = self.action('DescribeSecurityGroups', {'GroupName.1' => name})
  response['DescribeSecurityGroupsResponse']['securityGroupInfo']['item'] rescue nil
end

#instancesObject



5
6
7
8
9
10
11
12
13
# File 'lib/ace-client/niftycloud/computing.rb', line 5

def instances
  response = self.action('DescribeInstances', {})
  begin
    items = [response['DescribeInstancesResponse']['reservationSet']['item']].flatten
    items.map{|item| item['instancesSet']['item'] }.flatten
  rescue
    []
  end
end

#items(options) ⇒ Object



15
16
17
18
# File 'lib/ace-client/niftycloud/computing.rb', line 15

def items(options)
   response = self.action(options[:action], {})
   [response[options[:action] + 'Response'][options[:key]]['item']].flatten rescue []
end

#load_balancersObject



36
37
38
39
# File 'lib/ace-client/niftycloud/computing.rb', line 36

def load_balancers
  response = self.action('DescribeLoadBalancers', {})
  [response['DescribeLoadBalancersResponse']['DescribeLoadBalancersResult']['LoadBalancerDescriptions']['member']].flatten rescue []
end

#security_group_rulesObject



41
42
# File 'lib/ace-client/niftycloud/computing.rb', line 41

def security_group_rules
end

#stop_instancesObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/ace-client/niftycloud/computing.rb', line 49

def stop_instances
  until instances.all? {|instance| instance['instanceState']['name'] != 'running'} do
    instances.each do |instance|
      if instance['instanceState']['name'] != 'stopped'
        self.action('StopInstances', {'InstanceId.1' => instance['instanceId']})
      end
    end
    sleep 5
  end
end

#wait_security_group_status(name, status) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/ace-client/niftycloud/computing.rb', line 83

def wait_security_group_status(name, status)
  loop do
    group = find_security_group_by_name(name)
    break if group['groupStatus'] == status
    sleep 1
  end
end