module AceClient::Niftycloud::Computing

Constants

DEFAULT_DELETE_INSTANCES_SLEEP
DEFAULT_DELETE_INSTANCES_TIMEOUT
DEFAULT_STOP_INSTANCES_SLEEP
DEFAULT_STOP_INSTANCES_TIMEOUT

Public Class Methods

build_client(options={}) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 10
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

Public Instance Methods

delete_images() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 167
def delete_images
  self.images.each do |image|
    if image['imageOwnerId'] == 'self'
      self.action('DeleteImage', 'ImageId' => image['imageId'])
    end
  end
end
delete_instances(options={}) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 81
def delete_instances(options={})
  options[:timeout] ||= DEFAULT_DELETE_INSTANCES_TIMEOUT
  options[:sleep] ||= DEFAULT_DELETE_INSTANCES_SLEEP

  timeout(options[:timeout]) do
    until instances.empty? do
      instances.each do |instance|
        response = self.action('DescribeInstanceAttribute', {'InstanceId' => instance['instanceId'], 'Attribute' => 'disableApiTermination'})
        if response['DescribeInstanceAttributeResponse']['disableApiTermination']['value'] == 'true'
          self.action('ModifyInstanceAttribute', {'InstanceId' => instance['instanceId'], 'Attribute' => 'disableApiTermination', 'Value' => 'false'})
        end
        self.action('TerminateInstances', {'InstanceId.1' => instance['instanceId']})
      end
      uploads.each do |upload|
        self.action('CancelUpload', {'ConversionTaskId' => upload['conversionTaskId']})
      end
      sleep options[:sleep]
    end
  end
end
delete_key_pairs() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 102
def delete_key_pairs
  key_pairs.each do |key_pair|
    self.action('DeleteKeyPair', {'KeyName' => key_pair['keyName']})
  end
end
delete_load_balancers() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 152
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_resources(options={}) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 181
def delete_resources(options={})
  stop_instances(
    timeout: options[:stop_instances_timeout],
    sleep: options[:stop_instances_sleep]
  )
  delete_instances(
    timeout: options[:delete_instances_timeout],
    sleep: options[:delete_instances_sleep]
  )
  delete_key_pairs
  delete_security_group_rules
  delete_security_groups
  delete_load_balancers
  delete_volumes
  delete_images
  delete_ssl_certificates
end
delete_security_group_rules() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 121
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_groups() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 143
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_certificates() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 175
def delete_ssl_certificates
  self.ssl_certificates.each do |sc|
    self.action('DeleteSslCertificate', 'FqdnId' => sc['fqdnId'])
  end
end
delete_volumes() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 161
def delete_volumes
  self.volumes.each do |volume|
    self.action('DeleteVolume', 'VolumeId' => volume['volumeId'])
  end
end
find_instance_by_id(instance_id) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 60
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) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 108
def find_security_group_by_name(name)
  response = self.action('DescribeSecurityGroups', {'GroupName.1' => name})
  response['DescribeSecurityGroupsResponse']['securityGroupInfo']['item'] rescue nil
end
instances() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 21
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) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 31
def items(options)
   response = self.action(options[:action], {})
   [response[options[:action] + 'Response'][options[:key]]['item']].flatten rescue []
end
load_balancers() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 52
def load_balancers
  response = self.action('DescribeLoadBalancers', {})
  [response['DescribeLoadBalancersResponse']['DescribeLoadBalancersResult']['LoadBalancerDescriptions']['member']].flatten rescue []
end
security_group_rules() click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 57
def security_group_rules
end
stop_instances(options={}) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 65
def stop_instances(options={})
  options[:timeout] ||= DEFAULT_STOP_INSTANCES_TIMEOUT
  options[:sleep] ||= DEFAULT_STOP_INSTANCES_SLEEP

  timeout(options[:timeout]) do
    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 options[:sleep]
    end
  end
end
wait_security_group_status(name, status) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 113
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

Private Instance Methods

build_client(options={}) click to toggle source
# File lib/ace-client/niftycloud/computing.rb, line 10
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