Module: AceClient::Niftycloud::Computing

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_client(options = {}) ⇒ Object



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

def build_client(options={})
  options = options.merge(
    :before_signature => lambda {|params|
      params['AccessKeyId'] = params.delete('AWSAccessKeyId')
    }
  )
  client = AceClient::Query2.new(options)
  client.extend(AceClient::Niftycloud::Computing)
  client
end

Instance Method Details

#delete_imagesObject



148
149
150
151
152
153
154
# File 'lib/ace-client/niftycloud/computing.rb', line 148

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

#delete_instancesObject



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/ace-client/niftycloud/computing.rb', line 71

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



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

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

#delete_load_balancersObject



133
134
135
136
137
138
139
140
# File 'lib/ace-client/niftycloud/computing.rb', line 133

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



162
163
164
165
166
167
168
169
170
171
172
# File 'lib/ace-client/niftycloud/computing.rb', line 162

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



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/ace-client/niftycloud/computing.rb', line 102

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



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

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



156
157
158
159
160
# File 'lib/ace-client/niftycloud/computing.rb', line 156

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

#delete_volumesObject



142
143
144
145
146
# File 'lib/ace-client/niftycloud/computing.rb', line 142

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

#find_instance_by_id(instance_id) ⇒ Object



55
56
57
58
# File 'lib/ace-client/niftycloud/computing.rb', line 55

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



89
90
91
92
# File 'lib/ace-client/niftycloud/computing.rb', line 89

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

#instancesObject



16
17
18
19
20
21
22
23
24
# File 'lib/ace-client/niftycloud/computing.rb', line 16

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



26
27
28
29
# File 'lib/ace-client/niftycloud/computing.rb', line 26

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

#load_balancersObject



47
48
49
50
# File 'lib/ace-client/niftycloud/computing.rb', line 47

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

#security_group_rulesObject



52
53
# File 'lib/ace-client/niftycloud/computing.rb', line 52

def security_group_rules
end

#stop_instancesObject



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

def stop_instances
  until instances.all? {|instance| instance['instanceState']['name'] != 'running'} || instances.empty? 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



94
95
96
97
98
99
100
# File 'lib/ace-client/niftycloud/computing.rb', line 94

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