Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: third_party/gsutil/third_party/boto/boto/cloudhsm/layer1.py

Issue 1377933002: [catapult] - Copy Telemetry's gsutilz over to third_party. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: Rename to gsutil. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/third_party/boto/boto/cloudhsm/layer1.py
diff --git a/third_party/gsutil/third_party/boto/boto/cloudhsm/layer1.py b/third_party/gsutil/third_party/boto/boto/cloudhsm/layer1.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0877736e2e2ed9d090d70a521ef3015c30c9537
--- /dev/null
+++ b/third_party/gsutil/third_party/boto/boto/cloudhsm/layer1.py
@@ -0,0 +1,448 @@
+# Copyright (c) 2015 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.
+#
+
+import boto
+from boto.compat import json
+from boto.connection import AWSQueryConnection
+from boto.regioninfo import RegionInfo
+from boto.exception import JSONResponseError
+from boto.cloudhsm import exceptions
+
+
+class CloudHSMConnection(AWSQueryConnection):
+ """
+ AWS CloudHSM Service
+ """
+ APIVersion = "2014-05-30"
+ DefaultRegionName = "us-east-1"
+ DefaultRegionEndpoint = "cloudhsm.us-east-1.amazonaws.com"
+ ServiceName = "CloudHSM"
+ TargetPrefix = "CloudHsmFrontendService"
+ ResponseError = JSONResponseError
+
+ _faults = {
+ "InvalidRequestException": exceptions.InvalidRequestException,
+ "CloudHsmServiceException": exceptions.CloudHsmServiceException,
+ "CloudHsmInternalException": exceptions.CloudHsmInternalException,
+ }
+
+
+ def __init__(self, **kwargs):
+ region = kwargs.pop('region', None)
+ if not region:
+ region = RegionInfo(self, self.DefaultRegionName,
+ self.DefaultRegionEndpoint)
+
+ if 'host' not in kwargs or kwargs['host'] is None:
+ kwargs['host'] = region.endpoint
+
+ super(CloudHSMConnection, self).__init__(**kwargs)
+ self.region = region
+
+ def _required_auth_capability(self):
+ return ['hmac-v4']
+
+ def create_hapg(self, label):
+ """
+ Creates a high-availability partition group. A high-
+ availability partition group is a group of partitions that
+ spans multiple physical HSMs.
+
+ :type label: string
+ :param label: The label of the new high-availability partition group.
+
+ """
+ params = {'Label': label, }
+ return self.make_request(action='CreateHapg',
+ body=json.dumps(params))
+
+ def create_hsm(self, subnet_id, ssh_key, iam_role_arn, subscription_type,
+ eni_ip=None, external_id=None, client_token=None,
+ syslog_ip=None):
+ """
+ Creates an uninitialized HSM instance. Running this command
+ provisions an HSM appliance and will result in charges to your
+ AWS account for the HSM.
+
+ :type subnet_id: string
+ :param subnet_id: The identifier of the subnet in your VPC in which to
+ place the HSM.
+
+ :type ssh_key: string
+ :param ssh_key: The SSH public key to install on the HSM.
+
+ :type eni_ip: string
+ :param eni_ip: The IP address to assign to the HSM's ENI.
+
+ :type iam_role_arn: string
+ :param iam_role_arn: The ARN of an IAM role to enable the AWS CloudHSM
+ service to allocate an ENI on your behalf.
+
+ :type external_id: string
+ :param external_id: The external ID from **IamRoleArn**, if present.
+
+ :type subscription_type: string
+ :param subscription_type: The subscription type.
+
+ :type client_token: string
+ :param client_token: A user-defined token to ensure idempotence.
+ Subsequent calls to this action with the same token will be
+ ignored.
+
+ :type syslog_ip: string
+ :param syslog_ip: The IP address for the syslog monitoring server.
+
+ """
+ params = {
+ 'SubnetId': subnet_id,
+ 'SshKey': ssh_key,
+ 'IamRoleArn': iam_role_arn,
+ 'SubscriptionType': subscription_type,
+ }
+ if eni_ip is not None:
+ params['EniIp'] = eni_ip
+ if external_id is not None:
+ params['ExternalId'] = external_id
+ if client_token is not None:
+ params['ClientToken'] = client_token
+ if syslog_ip is not None:
+ params['SyslogIp'] = syslog_ip
+ return self.make_request(action='CreateHsm',
+ body=json.dumps(params))
+
+ def create_luna_client(self, certificate, label=None):
+ """
+ Creates an HSM client.
+
+ :type label: string
+ :param label: The label for the client.
+
+ :type certificate: string
+ :param certificate: The contents of a Base64-Encoded X.509 v3
+ certificate to be installed on the HSMs used by this client.
+
+ """
+ params = {'Certificate': certificate, }
+ if label is not None:
+ params['Label'] = label
+ return self.make_request(action='CreateLunaClient',
+ body=json.dumps(params))
+
+ def delete_hapg(self, hapg_arn):
+ """
+ Deletes a high-availability partition group.
+
+ :type hapg_arn: string
+ :param hapg_arn: The ARN of the high-availability partition group to
+ delete.
+
+ """
+ params = {'HapgArn': hapg_arn, }
+ return self.make_request(action='DeleteHapg',
+ body=json.dumps(params))
+
+ def delete_hsm(self, hsm_arn):
+ """
+ Deletes an HSM. Once complete, this operation cannot be undone
+ and your key material cannot be recovered.
+
+ :type hsm_arn: string
+ :param hsm_arn: The ARN of the HSM to delete.
+
+ """
+ params = {'HsmArn': hsm_arn, }
+ return self.make_request(action='DeleteHsm',
+ body=json.dumps(params))
+
+ def delete_luna_client(self, client_arn):
+ """
+ Deletes a client.
+
+ :type client_arn: string
+ :param client_arn: The ARN of the client to delete.
+
+ """
+ params = {'ClientArn': client_arn, }
+ return self.make_request(action='DeleteLunaClient',
+ body=json.dumps(params))
+
+ def describe_hapg(self, hapg_arn):
+ """
+ Retrieves information about a high-availability partition
+ group.
+
+ :type hapg_arn: string
+ :param hapg_arn: The ARN of the high-availability partition group to
+ describe.
+
+ """
+ params = {'HapgArn': hapg_arn, }
+ return self.make_request(action='DescribeHapg',
+ body=json.dumps(params))
+
+ def describe_hsm(self, hsm_arn=None, hsm_serial_number=None):
+ """
+ Retrieves information about an HSM. You can identify the HSM
+ by its ARN or its serial number.
+
+ :type hsm_arn: string
+ :param hsm_arn: The ARN of the HSM. Either the HsmArn or the
+ SerialNumber parameter must be specified.
+
+ :type hsm_serial_number: string
+ :param hsm_serial_number: The serial number of the HSM. Either the
+ HsmArn or the HsmSerialNumber parameter must be specified.
+
+ """
+ params = {}
+ if hsm_arn is not None:
+ params['HsmArn'] = hsm_arn
+ if hsm_serial_number is not None:
+ params['HsmSerialNumber'] = hsm_serial_number
+ return self.make_request(action='DescribeHsm',
+ body=json.dumps(params))
+
+ def describe_luna_client(self, client_arn=None,
+ certificate_fingerprint=None):
+ """
+ Retrieves information about an HSM client.
+
+ :type client_arn: string
+ :param client_arn: The ARN of the client.
+
+ :type certificate_fingerprint: string
+ :param certificate_fingerprint: The certificate fingerprint.
+
+ """
+ params = {}
+ if client_arn is not None:
+ params['ClientArn'] = client_arn
+ if certificate_fingerprint is not None:
+ params['CertificateFingerprint'] = certificate_fingerprint
+ return self.make_request(action='DescribeLunaClient',
+ body=json.dumps(params))
+
+ def get_config(self, client_arn, client_version, hapg_list):
+ """
+ Gets the configuration files necessary to connect to all high
+ availability partition groups the client is associated with.
+
+ :type client_arn: string
+ :param client_arn: The ARN of the client.
+
+ :type client_version: string
+ :param client_version: The client version.
+
+ :type hapg_list: list
+ :param hapg_list: A list of ARNs that identify the high-availability
+ partition groups that are associated with the client.
+
+ """
+ params = {
+ 'ClientArn': client_arn,
+ 'ClientVersion': client_version,
+ 'HapgList': hapg_list,
+ }
+ return self.make_request(action='GetConfig',
+ body=json.dumps(params))
+
+ def list_available_zones(self):
+ """
+ Lists the Availability Zones that have available AWS CloudHSM
+ capacity.
+
+
+ """
+ params = {}
+ return self.make_request(action='ListAvailableZones',
+ body=json.dumps(params))
+
+ def list_hapgs(self, next_token=None):
+ """
+ Lists the high-availability partition groups for the account.
+
+ This operation supports pagination with the use of the
+ NextToken member. If more results are available, the NextToken
+ member of the response contains a token that you pass in the
+ next call to ListHapgs to retrieve the next set of items.
+
+ :type next_token: string
+ :param next_token: The NextToken value from a previous call to
+ ListHapgs. Pass null if this is the first call.
+
+ """
+ params = {}
+ if next_token is not None:
+ params['NextToken'] = next_token
+ return self.make_request(action='ListHapgs',
+ body=json.dumps(params))
+
+ def list_hsms(self, next_token=None):
+ """
+ Retrieves the identifiers of all of the HSMs provisioned for
+ the current customer.
+
+ This operation supports pagination with the use of the
+ NextToken member. If more results are available, the NextToken
+ member of the response contains a token that you pass in the
+ next call to ListHsms to retrieve the next set of items.
+
+ :type next_token: string
+ :param next_token: The NextToken value from a previous call to
+ ListHsms. Pass null if this is the first call.
+
+ """
+ params = {}
+ if next_token is not None:
+ params['NextToken'] = next_token
+ return self.make_request(action='ListHsms',
+ body=json.dumps(params))
+
+ def list_luna_clients(self, next_token=None):
+ """
+ Lists all of the clients.
+
+ This operation supports pagination with the use of the
+ NextToken member. If more results are available, the NextToken
+ member of the response contains a token that you pass in the
+ next call to ListLunaClients to retrieve the next set of
+ items.
+
+ :type next_token: string
+ :param next_token: The NextToken value from a previous call to
+ ListLunaClients. Pass null if this is the first call.
+
+ """
+ params = {}
+ if next_token is not None:
+ params['NextToken'] = next_token
+ return self.make_request(action='ListLunaClients',
+ body=json.dumps(params))
+
+ def modify_hapg(self, hapg_arn, label=None, partition_serial_list=None):
+ """
+ Modifies an existing high-availability partition group.
+
+ :type hapg_arn: string
+ :param hapg_arn: The ARN of the high-availability partition group to
+ modify.
+
+ :type label: string
+ :param label: The new label for the high-availability partition group.
+
+ :type partition_serial_list: list
+ :param partition_serial_list: The list of partition serial numbers to
+ make members of the high-availability partition group.
+
+ """
+ params = {'HapgArn': hapg_arn, }
+ if label is not None:
+ params['Label'] = label
+ if partition_serial_list is not None:
+ params['PartitionSerialList'] = partition_serial_list
+ return self.make_request(action='ModifyHapg',
+ body=json.dumps(params))
+
+ def modify_hsm(self, hsm_arn, subnet_id=None, eni_ip=None,
+ iam_role_arn=None, external_id=None, syslog_ip=None):
+ """
+ Modifies an HSM.
+
+ :type hsm_arn: string
+ :param hsm_arn: The ARN of the HSM to modify.
+
+ :type subnet_id: string
+ :param subnet_id: The new identifier of the subnet that the HSM is in.
+
+ :type eni_ip: string
+ :param eni_ip: The new IP address for the elastic network interface
+ attached to the HSM.
+
+ :type iam_role_arn: string
+ :param iam_role_arn: The new IAM role ARN.
+
+ :type external_id: string
+ :param external_id: The new external ID.
+
+ :type syslog_ip: string
+ :param syslog_ip: The new IP address for the syslog monitoring server.
+
+ """
+ params = {'HsmArn': hsm_arn, }
+ if subnet_id is not None:
+ params['SubnetId'] = subnet_id
+ if eni_ip is not None:
+ params['EniIp'] = eni_ip
+ if iam_role_arn is not None:
+ params['IamRoleArn'] = iam_role_arn
+ if external_id is not None:
+ params['ExternalId'] = external_id
+ if syslog_ip is not None:
+ params['SyslogIp'] = syslog_ip
+ return self.make_request(action='ModifyHsm',
+ body=json.dumps(params))
+
+ def modify_luna_client(self, client_arn, certificate):
+ """
+ Modifies the certificate used by the client.
+
+ This action can potentially start a workflow to install the
+ new certificate on the client's HSMs.
+
+ :type client_arn: string
+ :param client_arn: The ARN of the client.
+
+ :type certificate: string
+ :param certificate: The new certificate for the client.
+
+ """
+ params = {
+ 'ClientArn': client_arn,
+ 'Certificate': certificate,
+ }
+ return self.make_request(action='ModifyLunaClient',
+ body=json.dumps(params))
+
+ def make_request(self, action, body):
+ headers = {
+ 'X-Amz-Target': '%s.%s' % (self.TargetPrefix, action),
+ 'Host': self.region.endpoint,
+ 'Content-Type': 'application/x-amz-json-1.1',
+ 'Content-Length': str(len(body)),
+ }
+ http_request = self.build_base_http_request(
+ method='POST', path='/', auth_path='/', params={},
+ headers=headers, data=body)
+ response = self._mexe(http_request, sender=None,
+ override_num_retries=10)
+ response_body = response.read().decode('utf-8')
+ boto.log.debug(response_body)
+ if response.status == 200:
+ if response_body:
+ return json.loads(response_body)
+ else:
+ json_body = json.loads(response_body)
+ fault_name = json_body.get('__type', None)
+ exception_class = self._faults.get(fault_name, self.ResponseError)
+ raise exception_class(response.status, response.reason,
+ body=json_body)
+

Powered by Google App Engine
This is Rietveld 408576698