Index: tools/telemetry/third_party/gsutil/third_party/boto/boto/ec2/instance.py |
diff --git a/tools/telemetry/third_party/gsutil/third_party/boto/boto/ec2/instance.py b/tools/telemetry/third_party/gsutil/third_party/boto/boto/ec2/instance.py |
deleted file mode 100644 |
index eb7c9ec615e79daa75b8f7a2df4015a6720530b7..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/gsutil/third_party/boto/boto/ec2/instance.py |
+++ /dev/null |
@@ -1,678 +0,0 @@ |
-# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/ |
-# Copyright (c) 2010, Eucalyptus Systems, Inc. |
-# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved |
-# |
-# Permission is hereby granted, free of charge, to any person obtaining a |
-# copy of this software and associated documentation files (the |
-# "Software"), to deal in the Software without restriction, including |
-# without limitation the rights to use, copy, modify, merge, publish, dis- |
-# tribute, sublicense, and/or sell copies of the Software, and to permit |
-# persons to whom the Software is furnished to do so, subject to the fol- |
-# lowing conditions: |
-# |
-# The above copyright notice and this permission notice shall be included |
-# in all copies or substantial portions of the Software. |
-# |
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
-# IN THE SOFTWARE. |
- |
-""" |
-Represents an EC2 Instance |
-""" |
-import boto |
-from boto.ec2.ec2object import EC2Object, TaggedEC2Object |
-from boto.resultset import ResultSet |
-from boto.ec2.address import Address |
-from boto.ec2.blockdevicemapping import BlockDeviceMapping |
-from boto.ec2.image import ProductCodes |
-from boto.ec2.networkinterface import NetworkInterface |
-from boto.ec2.group import Group |
-import base64 |
- |
- |
-class InstanceState(object): |
- """ |
- The state of the instance. |
- |
- :ivar code: The low byte represents the state. The high byte is an |
- opaque internal value and should be ignored. Valid values: |
- |
- * 0 (pending) |
- * 16 (running) |
- * 32 (shutting-down) |
- * 48 (terminated) |
- * 64 (stopping) |
- * 80 (stopped) |
- |
- :ivar name: The name of the state of the instance. Valid values: |
- |
- * "pending" |
- * "running" |
- * "shutting-down" |
- * "terminated" |
- * "stopping" |
- * "stopped" |
- """ |
- def __init__(self, code=0, name=None): |
- self.code = code |
- self.name = name |
- |
- def __repr__(self): |
- return '%s(%d)' % (self.name, self.code) |
- |
- def startElement(self, name, attrs, connection): |
- pass |
- |
- def endElement(self, name, value, connection): |
- if name == 'code': |
- self.code = int(value) |
- elif name == 'name': |
- self.name = value |
- else: |
- setattr(self, name, value) |
- |
- |
-class InstancePlacement(object): |
- """ |
- The location where the instance launched. |
- |
- :ivar zone: The Availability Zone of the instance. |
- :ivar group_name: The name of the placement group the instance is |
- in (for cluster compute instances). |
- :ivar tenancy: The tenancy of the instance (if the instance is |
- running within a VPC). An instance with a tenancy of dedicated |
- runs on single-tenant hardware. |
- """ |
- def __init__(self, zone=None, group_name=None, tenancy=None): |
- self.zone = zone |
- self.group_name = group_name |
- self.tenancy = tenancy |
- |
- def __repr__(self): |
- return self.zone |
- |
- def startElement(self, name, attrs, connection): |
- pass |
- |
- def endElement(self, name, value, connection): |
- if name == 'availabilityZone': |
- self.zone = value |
- elif name == 'groupName': |
- self.group_name = value |
- elif name == 'tenancy': |
- self.tenancy = value |
- else: |
- setattr(self, name, value) |
- |
- |
-class Reservation(EC2Object): |
- """ |
- Represents a Reservation response object. |
- |
- :ivar id: The unique ID of the Reservation. |
- :ivar owner_id: The unique ID of the owner of the Reservation. |
- :ivar groups: A list of Group objects representing the security |
- groups associated with launched instances. |
- :ivar instances: A list of Instance objects launched in this |
- Reservation. |
- """ |
- def __init__(self, connection=None): |
- super(Reservation, self).__init__(connection) |
- self.id = None |
- self.owner_id = None |
- self.groups = [] |
- self.instances = [] |
- |
- def __repr__(self): |
- return 'Reservation:%s' % self.id |
- |
- def startElement(self, name, attrs, connection): |
- if name == 'instancesSet': |
- self.instances = ResultSet([('item', Instance)]) |
- return self.instances |
- elif name == 'groupSet': |
- self.groups = ResultSet([('item', Group)]) |
- return self.groups |
- else: |
- return None |
- |
- def endElement(self, name, value, connection): |
- if name == 'reservationId': |
- self.id = value |
- elif name == 'ownerId': |
- self.owner_id = value |
- else: |
- setattr(self, name, value) |
- |
- def stop_all(self, dry_run=False): |
- for instance in self.instances: |
- instance.stop(dry_run=dry_run) |
- |
- |
-class Instance(TaggedEC2Object): |
- """ |
- Represents an instance. |
- |
- :ivar id: The unique ID of the Instance. |
- :ivar groups: A list of Group objects representing the security |
- groups associated with the instance. |
- :ivar public_dns_name: The public dns name of the instance. |
- :ivar private_dns_name: The private dns name of the instance. |
- :ivar state: The string representation of the instance's current state. |
- :ivar state_code: An integer representation of the instance's |
- current state. |
- :ivar previous_state: The string representation of the instance's |
- previous state. |
- :ivar previous_state_code: An integer representation of the |
- instance's current state. |
- :ivar key_name: The name of the SSH key associated with the instance. |
- :ivar instance_type: The type of instance (e.g. m1.small). |
- :ivar launch_time: The time the instance was launched. |
- :ivar image_id: The ID of the AMI used to launch this instance. |
- :ivar placement: The availability zone in which the instance is running. |
- :ivar placement_group: The name of the placement group the instance |
- is in (for cluster compute instances). |
- :ivar placement_tenancy: The tenancy of the instance, if the instance |
- is running within a VPC. An instance with a tenancy of dedicated |
- runs on a single-tenant hardware. |
- :ivar kernel: The kernel associated with the instance. |
- :ivar ramdisk: The ramdisk associated with the instance. |
- :ivar architecture: The architecture of the image (i386|x86_64). |
- :ivar hypervisor: The hypervisor used. |
- :ivar virtualization_type: The type of virtualization used. |
- :ivar product_codes: A list of product codes associated with this instance. |
- :ivar ami_launch_index: This instances position within it's launch group. |
- :ivar monitored: A boolean indicating whether monitoring is enabled or not. |
- :ivar monitoring_state: A string value that contains the actual value |
- of the monitoring element returned by EC2. |
- :ivar spot_instance_request_id: The ID of the spot instance request |
- if this is a spot instance. |
- :ivar subnet_id: The VPC Subnet ID, if running in VPC. |
- :ivar vpc_id: The VPC ID, if running in VPC. |
- :ivar private_ip_address: The private IP address of the instance. |
- :ivar ip_address: The public IP address of the instance. |
- :ivar platform: Platform of the instance (e.g. Windows) |
- :ivar root_device_name: The name of the root device. |
- :ivar root_device_type: The root device type (ebs|instance-store). |
- :ivar block_device_mapping: The Block Device Mapping for the instance. |
- :ivar state_reason: The reason for the most recent state transition. |
- :ivar groups: List of security Groups associated with the instance. |
- :ivar interfaces: List of Elastic Network Interfaces associated with |
- this instance. |
- :ivar ebs_optimized: Whether instance is using optimized EBS volumes |
- or not. |
- :ivar instance_profile: A Python dict containing the instance |
- profile id and arn associated with this instance. |
- """ |
- |
- def __init__(self, connection=None): |
- super(Instance, self).__init__(connection) |
- self.id = None |
- self.dns_name = None |
- self.public_dns_name = None |
- self.private_dns_name = None |
- self.key_name = None |
- self.instance_type = None |
- self.launch_time = None |
- self.image_id = None |
- self.kernel = None |
- self.ramdisk = None |
- self.product_codes = ProductCodes() |
- self.ami_launch_index = None |
- self.monitored = False |
- self.monitoring_state = None |
- self.spot_instance_request_id = None |
- self.subnet_id = None |
- self.vpc_id = None |
- self.private_ip_address = None |
- self.ip_address = None |
- self.requester_id = None |
- self._in_monitoring_element = False |
- self.persistent = False |
- self.root_device_name = None |
- self.root_device_type = None |
- self.block_device_mapping = None |
- self.state_reason = None |
- self.group_name = None |
- self.client_token = None |
- self.eventsSet = None |
- self.groups = [] |
- self.platform = None |
- self.interfaces = [] |
- self.hypervisor = None |
- self.virtualization_type = None |
- self.architecture = None |
- self.instance_profile = None |
- self._previous_state = None |
- self._state = InstanceState() |
- self._placement = InstancePlacement() |
- |
- def __repr__(self): |
- return 'Instance:%s' % self.id |
- |
- @property |
- def state(self): |
- return self._state.name |
- |
- @property |
- def state_code(self): |
- return self._state.code |
- |
- @property |
- def previous_state(self): |
- if self._previous_state: |
- return self._previous_state.name |
- return None |
- |
- @property |
- def previous_state_code(self): |
- if self._previous_state: |
- return self._previous_state.code |
- return 0 |
- |
- @property |
- def placement(self): |
- return self._placement.zone |
- |
- @property |
- def placement_group(self): |
- return self._placement.group_name |
- |
- @property |
- def placement_tenancy(self): |
- return self._placement.tenancy |
- |
- def startElement(self, name, attrs, connection): |
- retval = super(Instance, self).startElement(name, attrs, connection) |
- if retval is not None: |
- return retval |
- if name == 'monitoring': |
- self._in_monitoring_element = True |
- elif name == 'blockDeviceMapping': |
- self.block_device_mapping = BlockDeviceMapping() |
- return self.block_device_mapping |
- elif name == 'productCodes': |
- return self.product_codes |
- elif name == 'stateReason': |
- self.state_reason = SubParse('stateReason') |
- return self.state_reason |
- elif name == 'groupSet': |
- self.groups = ResultSet([('item', Group)]) |
- return self.groups |
- elif name == "eventsSet": |
- self.eventsSet = SubParse('eventsSet') |
- return self.eventsSet |
- elif name == 'networkInterfaceSet': |
- self.interfaces = ResultSet([('item', NetworkInterface)]) |
- return self.interfaces |
- elif name == 'iamInstanceProfile': |
- self.instance_profile = SubParse('iamInstanceProfile') |
- return self.instance_profile |
- elif name == 'currentState': |
- return self._state |
- elif name == 'previousState': |
- self._previous_state = InstanceState() |
- return self._previous_state |
- elif name == 'instanceState': |
- return self._state |
- elif name == 'placement': |
- return self._placement |
- return None |
- |
- def endElement(self, name, value, connection): |
- if name == 'instanceId': |
- self.id = value |
- elif name == 'imageId': |
- self.image_id = value |
- elif name == 'dnsName' or name == 'publicDnsName': |
- self.dns_name = value # backwards compatibility |
- self.public_dns_name = value |
- elif name == 'privateDnsName': |
- self.private_dns_name = value |
- elif name == 'keyName': |
- self.key_name = value |
- elif name == 'amiLaunchIndex': |
- self.ami_launch_index = value |
- elif name == 'previousState': |
- self.previous_state = value |
- elif name == 'instanceType': |
- self.instance_type = value |
- elif name == 'rootDeviceName': |
- self.root_device_name = value |
- elif name == 'rootDeviceType': |
- self.root_device_type = value |
- elif name == 'launchTime': |
- self.launch_time = value |
- elif name == 'platform': |
- self.platform = value |
- elif name == 'kernelId': |
- self.kernel = value |
- elif name == 'ramdiskId': |
- self.ramdisk = value |
- elif name == 'state': |
- if self._in_monitoring_element: |
- self.monitoring_state = value |
- if value == 'enabled': |
- self.monitored = True |
- self._in_monitoring_element = False |
- elif name == 'spotInstanceRequestId': |
- self.spot_instance_request_id = value |
- elif name == 'subnetId': |
- self.subnet_id = value |
- elif name == 'vpcId': |
- self.vpc_id = value |
- elif name == 'privateIpAddress': |
- self.private_ip_address = value |
- elif name == 'ipAddress': |
- self.ip_address = value |
- elif name == 'requesterId': |
- self.requester_id = value |
- elif name == 'persistent': |
- if value == 'true': |
- self.persistent = True |
- else: |
- self.persistent = False |
- elif name == 'groupName': |
- if self._in_monitoring_element: |
- self.group_name = value |
- elif name == 'clientToken': |
- self.client_token = value |
- elif name == "eventsSet": |
- self.events = value |
- elif name == 'hypervisor': |
- self.hypervisor = value |
- elif name == 'virtualizationType': |
- self.virtualization_type = value |
- elif name == 'architecture': |
- self.architecture = value |
- elif name == 'ebsOptimized': |
- self.ebs_optimized = (value == 'true') |
- else: |
- setattr(self, name, value) |
- |
- def _update(self, updated): |
- self.__dict__.update(updated.__dict__) |
- |
- def update(self, validate=False, dry_run=False): |
- """ |
- Update the instance's state information by making a call to fetch |
- the current instance attributes from the service. |
- |
- :type validate: bool |
- :param validate: By default, if EC2 returns no data about the |
- instance the update method returns quietly. If |
- the validate param is True, however, it will |
- raise a ValueError exception if no data is |
- returned from EC2. |
- """ |
- rs = self.connection.get_all_reservations([self.id], dry_run=dry_run) |
- if len(rs) > 0: |
- r = rs[0] |
- for i in r.instances: |
- if i.id == self.id: |
- self._update(i) |
- elif validate: |
- raise ValueError('%s is not a valid Instance ID' % self.id) |
- return self.state |
- |
- def terminate(self, dry_run=False): |
- """ |
- Terminate the instance |
- """ |
- rs = self.connection.terminate_instances([self.id], dry_run=dry_run) |
- if len(rs) > 0: |
- self._update(rs[0]) |
- |
- def stop(self, force=False, dry_run=False): |
- """ |
- Stop the instance |
- |
- :type force: bool |
- :param force: Forces the instance to stop |
- |
- :rtype: list |
- :return: A list of the instances stopped |
- """ |
- rs = self.connection.stop_instances([self.id], force, dry_run=dry_run) |
- if len(rs) > 0: |
- self._update(rs[0]) |
- |
- def start(self, dry_run=False): |
- """ |
- Start the instance. |
- """ |
- rs = self.connection.start_instances([self.id], dry_run=dry_run) |
- if len(rs) > 0: |
- self._update(rs[0]) |
- |
- def reboot(self, dry_run=False): |
- return self.connection.reboot_instances([self.id], dry_run=dry_run) |
- |
- def get_console_output(self, dry_run=False): |
- """ |
- Retrieves the console output for the instance. |
- |
- :rtype: :class:`boto.ec2.instance.ConsoleOutput` |
- :return: The console output as a ConsoleOutput object |
- """ |
- return self.connection.get_console_output(self.id, dry_run=dry_run) |
- |
- def confirm_product(self, product_code, dry_run=False): |
- return self.connection.confirm_product_instance( |
- self.id, |
- product_code, |
- dry_run=dry_run |
- ) |
- |
- def use_ip(self, ip_address, dry_run=False): |
- """ |
- Associates an Elastic IP to the instance. |
- |
- :type ip_address: Either an instance of |
- :class:`boto.ec2.address.Address` or a string. |
- :param ip_address: The IP address to associate |
- with the instance. |
- |
- :rtype: bool |
- :return: True if successful |
- """ |
- |
- if isinstance(ip_address, Address): |
- ip_address = ip_address.public_ip |
- return self.connection.associate_address( |
- self.id, |
- ip_address, |
- dry_run=dry_run |
- ) |
- |
- def monitor(self, dry_run=False): |
- return self.connection.monitor_instance(self.id, dry_run=dry_run) |
- |
- def unmonitor(self, dry_run=False): |
- return self.connection.unmonitor_instance(self.id, dry_run=dry_run) |
- |
- def get_attribute(self, attribute, dry_run=False): |
- """ |
- Gets an attribute from this instance. |
- |
- :type attribute: string |
- :param attribute: The attribute you need information about |
- Valid choices are: |
- |
- * instanceType |
- * kernel |
- * ramdisk |
- * userData |
- * disableApiTermination |
- * instanceInitiatedShutdownBehavior |
- * rootDeviceName |
- * blockDeviceMapping |
- * productCodes |
- * sourceDestCheck |
- * groupSet |
- * ebsOptimized |
- |
- :rtype: :class:`boto.ec2.image.InstanceAttribute` |
- :return: An InstanceAttribute object representing the value of the |
- attribute requested |
- """ |
- return self.connection.get_instance_attribute( |
- self.id, |
- attribute, |
- dry_run=dry_run |
- ) |
- |
- def modify_attribute(self, attribute, value, dry_run=False): |
- """ |
- Changes an attribute of this instance |
- |
- :type attribute: string |
- :param attribute: The attribute you wish to change. |
- |
- * instanceType - A valid instance type (m1.small) |
- * kernel - Kernel ID (None) |
- * ramdisk - Ramdisk ID (None) |
- * userData - Base64 encoded String (None) |
- * disableApiTermination - Boolean (true) |
- * instanceInitiatedShutdownBehavior - stop|terminate |
- * sourceDestCheck - Boolean (true) |
- * groupSet - Set of Security Groups or IDs |
- * ebsOptimized - Boolean (false) |
- |
- :type value: string |
- :param value: The new value for the attribute |
- |
- :rtype: bool |
- :return: Whether the operation succeeded or not |
- """ |
- return self.connection.modify_instance_attribute( |
- self.id, |
- attribute, |
- value, |
- dry_run=dry_run |
- ) |
- |
- def reset_attribute(self, attribute, dry_run=False): |
- """ |
- Resets an attribute of this instance to its default value. |
- |
- :type attribute: string |
- :param attribute: The attribute to reset. Valid values are: |
- kernel|ramdisk |
- |
- :rtype: bool |
- :return: Whether the operation succeeded or not |
- """ |
- return self.connection.reset_instance_attribute( |
- self.id, |
- attribute, |
- dry_run=dry_run |
- ) |
- |
- def create_image(self, name, description=None, no_reboot=False, |
- dry_run=False): |
- """ |
- Will create an AMI from the instance in the running or stopped |
- state. |
- |
- :type name: string |
- :param name: The name of the new image |
- |
- :type description: string |
- :param description: An optional human-readable string describing |
- the contents and purpose of the AMI. |
- |
- :type no_reboot: bool |
- :param no_reboot: An optional flag indicating that the bundling process |
- should not attempt to shutdown the instance before |
- bundling. If this flag is True, the responsibility |
- of maintaining file system integrity is left to the |
- owner of the instance. |
- |
- :rtype: string |
- :return: The new image id |
- """ |
- return self.connection.create_image( |
- self.id, |
- name, |
- description, |
- no_reboot, |
- dry_run=dry_run |
- ) |
- |
- |
-class ConsoleOutput(object): |
- def __init__(self, parent=None): |
- self.parent = parent |
- self.instance_id = None |
- self.timestamp = None |
- self.output = None |
- |
- def startElement(self, name, attrs, connection): |
- return None |
- |
- def endElement(self, name, value, connection): |
- if name == 'instanceId': |
- self.instance_id = value |
- elif name == 'timestamp': |
- self.timestamp = value |
- elif name == 'output': |
- self.output = base64.b64decode(value) |
- else: |
- setattr(self, name, value) |
- |
- |
-class InstanceAttribute(dict): |
- ValidValues = ['instanceType', 'kernel', 'ramdisk', 'userData', |
- 'disableApiTermination', |
- 'instanceInitiatedShutdownBehavior', |
- 'rootDeviceName', 'blockDeviceMapping', 'sourceDestCheck', |
- 'groupSet'] |
- |
- def __init__(self, parent=None): |
- dict.__init__(self) |
- self.instance_id = None |
- self.request_id = None |
- self._current_value = None |
- |
- def startElement(self, name, attrs, connection): |
- if name == 'blockDeviceMapping': |
- self[name] = BlockDeviceMapping() |
- return self[name] |
- elif name == 'groupSet': |
- self[name] = ResultSet([('item', Group)]) |
- return self[name] |
- else: |
- return None |
- |
- def endElement(self, name, value, connection): |
- if name == 'instanceId': |
- self.instance_id = value |
- elif name == 'requestId': |
- self.request_id = value |
- elif name == 'value': |
- if value == 'true': |
- value = True |
- elif value == 'false': |
- value = False |
- self._current_value = value |
- elif name in self.ValidValues: |
- self[name] = self._current_value |
- |
- |
-class SubParse(dict): |
- def __init__(self, section, parent=None): |
- dict.__init__(self) |
- self.section = section |
- |
- def startElement(self, name, attrs, connection): |
- return None |
- |
- def endElement(self, name, value, connection): |
- if name != self.section: |
- self[name] = value |