Mercurial > repos > guerler > springsuite
diff planemo/lib/python3.7/site-packages/boto/opsworks/layer1.py @ 0:d30785e31577 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:18:57 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/lib/python3.7/site-packages/boto/opsworks/layer1.py Fri Jul 31 00:18:57 2020 -0400 @@ -0,0 +1,3094 @@ +# Copyright (c) 2014 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.opsworks import exceptions + + +class OpsWorksConnection(AWSQueryConnection): + """ + AWS OpsWorks + Welcome to the AWS OpsWorks API Reference . This guide provides + descriptions, syntax, and usage examples about AWS OpsWorks + actions and data types, including common parameters and error + codes. + + AWS OpsWorks is an application management service that provides an + integrated experience for overseeing the complete application + lifecycle. For information about this product, go to the `AWS + OpsWorks`_ details page. + + **SDKs and CLI** + + The most common way to use the AWS OpsWorks API is by using the + AWS Command Line Interface (CLI) or by using one of the AWS SDKs + to implement applications in your preferred language. For more + information, see: + + + + `AWS CLI`_ + + `AWS SDK for Java`_ + + `AWS SDK for .NET`_ + + `AWS SDK for PHP 2`_ + + `AWS SDK for Ruby`_ + + `AWS SDK for Node.js`_ + + `AWS SDK for Python(Boto)`_ + + + **Endpoints** + + AWS OpsWorks supports only one endpoint, opsworks.us- + east-1.amazonaws.com (HTTPS), so you must connect to that + endpoint. You can then use the API to direct AWS OpsWorks to + create stacks in any AWS Region. + + **Chef Versions** + + When you call CreateStack, CloneStack, or UpdateStack we recommend + you use the `ConfigurationManager` parameter to specify the Chef + version, 0.9, 11.4, or 11.10. The default value is currently + 11.10. For more information, see `Chef Versions`_. + + You can still specify Chef 0.9 for your stack, but new features + are not available for Chef 0.9 stacks, and support is scheduled to + end on July 24, 2014. We do not recommend using Chef 0.9 for new + stacks, and we recommend migrating your existing Chef 0.9 stacks + to Chef 11.10 as soon as possible. + """ + APIVersion = "2013-02-18" + DefaultRegionName = "us-east-1" + DefaultRegionEndpoint = "opsworks.us-east-1.amazonaws.com" + ServiceName = "OpsWorks" + TargetPrefix = "OpsWorks_20130218" + ResponseError = JSONResponseError + + _faults = { + "ResourceNotFoundException": exceptions.ResourceNotFoundException, + "ValidationException": exceptions.ValidationException, + } + + + 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(OpsWorksConnection, self).__init__(**kwargs) + self.region = region + + def _required_auth_capability(self): + return ['hmac-v4'] + + def assign_instance(self, instance_id, layer_ids): + """ + Assign a registered instance to a custom layer. You cannot use + this action with instances that were created with AWS + OpsWorks. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + :type layer_ids: list + :param layer_ids: The layer ID, which must correspond to a custom + layer. You cannot assign a registered instance to a built-in layer. + + """ + params = { + 'InstanceId': instance_id, + 'LayerIds': layer_ids, + } + return self.make_request(action='AssignInstance', + body=json.dumps(params)) + + def assign_volume(self, volume_id, instance_id=None): + """ + Assigns one of the stack's registered Amazon EBS volumes to a + specified instance. The volume must first be registered with + the stack by calling RegisterVolume. For more information, see + `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type volume_id: string + :param volume_id: The volume ID. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'VolumeId': volume_id, } + if instance_id is not None: + params['InstanceId'] = instance_id + return self.make_request(action='AssignVolume', + body=json.dumps(params)) + + def associate_elastic_ip(self, elastic_ip, instance_id=None): + """ + Associates one of the stack's registered Elastic IP addresses + with a specified instance. The address must first be + registered with the stack by calling RegisterElasticIp. For + more information, see `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_ip: string + :param elastic_ip: The Elastic IP address. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'ElasticIp': elastic_ip, } + if instance_id is not None: + params['InstanceId'] = instance_id + return self.make_request(action='AssociateElasticIp', + body=json.dumps(params)) + + def attach_elastic_load_balancer(self, elastic_load_balancer_name, + layer_id): + """ + Attaches an Elastic Load Balancing load balancer to a + specified layer. For more information, see `Elastic Load + Balancing`_. + + + You must create the Elastic Load Balancing instance + separately, by using the Elastic Load Balancing console, API, + or CLI. For more information, see ` Elastic Load Balancing + Developer Guide`_. + + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_load_balancer_name: string + :param elastic_load_balancer_name: The Elastic Load Balancing + instance's name. + + :type layer_id: string + :param layer_id: The ID of the layer that the Elastic Load Balancing + instance is to be attached to. + + """ + params = { + 'ElasticLoadBalancerName': elastic_load_balancer_name, + 'LayerId': layer_id, + } + return self.make_request(action='AttachElasticLoadBalancer', + body=json.dumps(params)) + + def clone_stack(self, source_stack_id, service_role_arn, name=None, + region=None, vpc_id=None, attributes=None, + default_instance_profile_arn=None, default_os=None, + hostname_theme=None, default_availability_zone=None, + default_subnet_id=None, custom_json=None, + configuration_manager=None, chef_configuration=None, + use_custom_cookbooks=None, + use_opsworks_security_groups=None, + custom_cookbooks_source=None, default_ssh_key_name=None, + clone_permissions=None, clone_app_ids=None, + default_root_device_type=None): + """ + Creates a clone of a specified stack. For more information, + see `Clone a Stack`_. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type source_stack_id: string + :param source_stack_id: The source stack ID. + + :type name: string + :param name: The cloned stack name. + + :type region: string + :param region: The cloned stack AWS region, such as "us-east-1". For + more information about AWS regions, see `Regions and Endpoints`_. + + :type vpc_id: string + :param vpc_id: The ID of the VPC that the cloned stack is to be + launched into. It must be in the specified region. All instances + are launched into this VPC, and you cannot change the ID later. + + + If your account supports EC2 Classic, the default value is no VPC. + + If your account does not support EC2 Classic, the default value is + the default VPC for the specified region. + + + If the VPC ID corresponds to a default VPC and you have specified + either the `DefaultAvailabilityZone` or the `DefaultSubnetId` + parameter only, AWS OpsWorks infers the value of the other + parameter. If you specify neither parameter, AWS OpsWorks sets + these parameters to the first valid Availability Zone for the + specified region and the corresponding default VPC subnet ID, + respectively. + + If you specify a nondefault VPC ID, note the following: + + + + It must belong to a VPC in your account that is in the specified + region. + + You must specify a value for `DefaultSubnetId`. + + + For more information on how to use AWS OpsWorks with a VPC, see + `Running a Stack in a VPC`_. For more information on default VPC + and EC2 Classic, see `Supported Platforms`_. + + :type attributes: map + :param attributes: A list of stack attributes and values as key/value + pairs to be added to the cloned stack. + + :type service_role_arn: string + :param service_role_arn: + The stack AWS Identity and Access Management (IAM) role, which allows + AWS OpsWorks to work with AWS resources on your behalf. You must + set this parameter to the Amazon Resource Name (ARN) for an + existing IAM role. If you create a stack by using the AWS OpsWorks + console, it creates the role for you. You can obtain an existing + stack's IAM ARN programmatically by calling DescribePermissions. + For more information about IAM ARNs, see `Using Identifiers`_. + + + You must set this parameter to a valid service role ARN or the action + will fail; there is no default value. You can specify the source + stack's service role ARN, if you prefer, but you must do so + explicitly. + + :type default_instance_profile_arn: string + :param default_instance_profile_arn: The ARN of an IAM profile that is + the default profile for all of the stack's EC2 instances. For more + information about IAM ARNs, see `Using Identifiers`_. + + :type default_os: string + :param default_os: The stacks's operating system, which must be set to + one of the following. + + + Standard operating systems: an Amazon Linux version such as `Amazon + Linux 2014.09`, `Ubuntu 12.04 LTS`, or `Ubuntu 14.04 LTS`. + + Custom AMIs: `Custom`. You specify the custom AMI you want to use + when you create instances. + + + The default option is the current Amazon Linux version. + + :type hostname_theme: string + :param hostname_theme: The stack's host name theme, with spaces are + replaced by underscores. The theme is used to generate host names + for the stack's instances. By default, `HostnameTheme` is set to + `Layer_Dependent`, which creates host names by appending integers + to the layer's short name. The other themes are: + + + `Baked_Goods` + + `Clouds` + + `European_Cities` + + `Fruits` + + `Greek_Deities` + + `Legendary_Creatures_from_Japan` + + `Planets_and_Moons` + + `Roman_Deities` + + `Scottish_Islands` + + `US_Cities` + + `Wild_Cats` + + + To obtain a generated host name, call `GetHostNameSuggestion`, which + returns a host name based on the current theme. + + :type default_availability_zone: string + :param default_availability_zone: The cloned stack's default + Availability Zone, which must be in the specified region. For more + information, see `Regions and Endpoints`_. If you also specify a + value for `DefaultSubnetId`, the subnet must be in the same zone. + For more information, see the `VpcId` parameter description. + + :type default_subnet_id: string + :param default_subnet_id: The stack's default VPC subnet ID. This + parameter is required if you specify a value for the `VpcId` + parameter. All instances are launched into this subnet unless you + specify otherwise when you create the instance. If you also specify + a value for `DefaultAvailabilityZone`, the subnet must be in that + zone. For information on default values and when this parameter is + required, see the `VpcId` parameter description. + + :type custom_json: string + :param custom_json: A string that contains user-defined, custom JSON. + It is used to override the corresponding default stack + configuration JSON values. The string should be in the following + format and must escape characters such as '"'.: + `"{\"key1\": \"value1\", \"key2\": \"value2\",...}"` + + For more information on custom JSON, see `Use Custom JSON to Modify the + Stack Configuration JSON`_ + + :type configuration_manager: dict + :param configuration_manager: The configuration manager. When you clone + a stack we recommend that you use the configuration manager to + specify the Chef version, 0.9, 11.4, or 11.10. The default value is + currently 11.4. + + :type chef_configuration: dict + :param chef_configuration: A `ChefConfiguration` object that specifies + whether to enable Berkshelf and the Berkshelf version on Chef 11.10 + stacks. For more information, see `Create a New Stack`_. + + :type use_custom_cookbooks: boolean + :param use_custom_cookbooks: Whether to use custom cookbooks. + + :type use_opsworks_security_groups: boolean + :param use_opsworks_security_groups: Whether to associate the AWS + OpsWorks built-in security groups with the stack's layers. + AWS OpsWorks provides a standard set of built-in security groups, one + for each layer, which are associated with layers by default. With + `UseOpsworksSecurityGroups` you can instead provide your own custom + security groups. `UseOpsworksSecurityGroups` has the following + settings: + + + + True - AWS OpsWorks automatically associates the appropriate built-in + security group with each layer (default setting). You can associate + additional security groups with a layer after you create it but you + cannot delete the built-in security group. + + False - AWS OpsWorks does not associate built-in security groups with + layers. You must create appropriate EC2 security groups and + associate a security group with each layer that you create. + However, you can still manually associate a built-in security group + with a layer on creation; custom security groups are required only + for those layers that need custom settings. + + + For more information, see `Create a New Stack`_. + + :type custom_cookbooks_source: dict + :param custom_cookbooks_source: Contains the information required to + retrieve an app or cookbook from a repository. For more + information, see `Creating Apps`_ or `Custom Recipes and + Cookbooks`_. + + :type default_ssh_key_name: string + :param default_ssh_key_name: A default SSH key for the stack instances. + You can override this value when you create or update an instance. + + :type clone_permissions: boolean + :param clone_permissions: Whether to clone the source stack's + permissions. + + :type clone_app_ids: list + :param clone_app_ids: A list of source stack app IDs to be included in + the cloned stack. + + :type default_root_device_type: string + :param default_root_device_type: The default root device type. This + value is used by default for all instances in the cloned stack, but + you can override it when you create an instance. For more + information, see `Storage for the Root Device`_. + + """ + params = { + 'SourceStackId': source_stack_id, + 'ServiceRoleArn': service_role_arn, + } + if name is not None: + params['Name'] = name + if region is not None: + params['Region'] = region + if vpc_id is not None: + params['VpcId'] = vpc_id + if attributes is not None: + params['Attributes'] = attributes + if default_instance_profile_arn is not None: + params['DefaultInstanceProfileArn'] = default_instance_profile_arn + if default_os is not None: + params['DefaultOs'] = default_os + if hostname_theme is not None: + params['HostnameTheme'] = hostname_theme + if default_availability_zone is not None: + params['DefaultAvailabilityZone'] = default_availability_zone + if default_subnet_id is not None: + params['DefaultSubnetId'] = default_subnet_id + if custom_json is not None: + params['CustomJson'] = custom_json + if configuration_manager is not None: + params['ConfigurationManager'] = configuration_manager + if chef_configuration is not None: + params['ChefConfiguration'] = chef_configuration + if use_custom_cookbooks is not None: + params['UseCustomCookbooks'] = use_custom_cookbooks + if use_opsworks_security_groups is not None: + params['UseOpsworksSecurityGroups'] = use_opsworks_security_groups + if custom_cookbooks_source is not None: + params['CustomCookbooksSource'] = custom_cookbooks_source + if default_ssh_key_name is not None: + params['DefaultSshKeyName'] = default_ssh_key_name + if clone_permissions is not None: + params['ClonePermissions'] = clone_permissions + if clone_app_ids is not None: + params['CloneAppIds'] = clone_app_ids + if default_root_device_type is not None: + params['DefaultRootDeviceType'] = default_root_device_type + return self.make_request(action='CloneStack', + body=json.dumps(params)) + + def create_app(self, stack_id, name, type, shortname=None, + description=None, data_sources=None, app_source=None, + domains=None, enable_ssl=None, ssl_configuration=None, + attributes=None, environment=None): + """ + Creates an app for a specified stack. For more information, + see `Creating Apps`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type shortname: string + :param shortname: The app's short name. + + :type name: string + :param name: The app name. + + :type description: string + :param description: A description of the app. + + :type data_sources: list + :param data_sources: The app's data source. + + :type type: string + :param type: The app type. Each supported type is associated with a + particular layer. For example, PHP applications are associated with + a PHP layer. AWS OpsWorks deploys an application to those instances + that are members of the corresponding layer. + + :type app_source: dict + :param app_source: A `Source` object that specifies the app repository. + + :type domains: list + :param domains: The app virtual host settings, with multiple domains + separated by commas. For example: `'www.example.com, example.com'` + + :type enable_ssl: boolean + :param enable_ssl: Whether to enable SSL for the app. + + :type ssl_configuration: dict + :param ssl_configuration: An `SslConfiguration` object with the SSL + configuration. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type environment: list + :param environment: + An array of `EnvironmentVariable` objects that specify environment + variables to be associated with the app. You can specify up to ten + environment variables. After you deploy the app, these variables + are defined on the associated app server instance. + + This parameter is supported only by Chef 11.10 stacks. If you have + specified one or more environment variables, you cannot modify the + stack's Chef version. + + """ + params = {'StackId': stack_id, 'Name': name, 'Type': type, } + if shortname is not None: + params['Shortname'] = shortname + if description is not None: + params['Description'] = description + if data_sources is not None: + params['DataSources'] = data_sources + if app_source is not None: + params['AppSource'] = app_source + if domains is not None: + params['Domains'] = domains + if enable_ssl is not None: + params['EnableSsl'] = enable_ssl + if ssl_configuration is not None: + params['SslConfiguration'] = ssl_configuration + if attributes is not None: + params['Attributes'] = attributes + if environment is not None: + params['Environment'] = environment + return self.make_request(action='CreateApp', + body=json.dumps(params)) + + def create_deployment(self, stack_id, command, app_id=None, + instance_ids=None, comment=None, custom_json=None): + """ + Runs deployment or stack commands. For more information, see + `Deploying Apps`_ and `Run Stack Commands`_. + + **Required Permissions**: To use this action, an IAM user must + have a Deploy or Manage permissions level for the stack, or an + attached policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type app_id: string + :param app_id: The app ID. This parameter is required for app + deployments, but not for other deployment commands. + + :type instance_ids: list + :param instance_ids: The instance IDs for the deployment targets. + + :type command: dict + :param command: A `DeploymentCommand` object that specifies the + deployment command and any associated arguments. + + :type comment: string + :param comment: A user-defined comment. + + :type custom_json: string + :param custom_json: A string that contains user-defined, custom JSON. + It is used to override the corresponding default stack + configuration JSON values. The string should be in the following + format and must escape characters such as '"'.: + `"{\"key1\": \"value1\", \"key2\": \"value2\",...}"` + + For more information on custom JSON, see `Use Custom JSON to Modify the + Stack Configuration JSON`_. + + """ + params = {'StackId': stack_id, 'Command': command, } + if app_id is not None: + params['AppId'] = app_id + if instance_ids is not None: + params['InstanceIds'] = instance_ids + if comment is not None: + params['Comment'] = comment + if custom_json is not None: + params['CustomJson'] = custom_json + return self.make_request(action='CreateDeployment', + body=json.dumps(params)) + + def create_instance(self, stack_id, layer_ids, instance_type, + auto_scaling_type=None, hostname=None, os=None, + ami_id=None, ssh_key_name=None, + availability_zone=None, virtualization_type=None, + subnet_id=None, architecture=None, + root_device_type=None, install_updates_on_boot=None, + ebs_optimized=None): + """ + Creates an instance in a specified stack. For more + information, see `Adding an Instance to a Layer`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type layer_ids: list + :param layer_ids: An array that contains the instance layer IDs. + + :type instance_type: string + :param instance_type: The instance type. AWS OpsWorks supports all + instance types except Cluster Compute, Cluster GPU, and High Memory + Cluster. For more information, see `Instance Families and Types`_. + The parameter values that you use to specify the various types are + in the API Name column of the Available Instance Types table. + + :type auto_scaling_type: string + :param auto_scaling_type: For load-based or time-based instances, the + type. + + :type hostname: string + :param hostname: The instance host name. + + :type os: string + :param os: The instance's operating system, which must be set to one of + the following. + + + Standard operating systems: an Amazon Linux version such as `Amazon + Linux 2014.09`, `Ubuntu 12.04 LTS`, or `Ubuntu 14.04 LTS`. + + Custom AMIs: `Custom` + + + The default option is the current Amazon Linux version. If you set this + parameter to `Custom`, you must use the CreateInstance action's + AmiId parameter to specify the custom AMI that you want to use. For + more information on the standard operating systems, see `Operating + Systems`_For more information on how to use custom AMIs with + OpsWorks, see `Using Custom AMIs`_. + + :type ami_id: string + :param ami_id: + A custom AMI ID to be used to create the instance. The AMI should be + based on one of the standard AWS OpsWorks AMIs: Amazon Linux, + Ubuntu 12.04 LTS, or Ubuntu 14.04 LTS. For more information, see + `Instances`_. + + If you specify a custom AMI, you must set `Os` to `Custom`. + + :type ssh_key_name: string + :param ssh_key_name: The instance SSH key name. + + :type availability_zone: string + :param availability_zone: The instance Availability Zone. For more + information, see `Regions and Endpoints`_. + + :type virtualization_type: string + :param virtualization_type: The instance's virtualization type, + `paravirtual` or `hvm`. + + :type subnet_id: string + :param subnet_id: The ID of the instance's subnet. If the stack is + running in a VPC, you can use this parameter to override the + stack's default subnet ID value and direct AWS OpsWorks to launch + the instance in a different subnet. + + :type architecture: string + :param architecture: The instance architecture. The default option is + `x86_64`. Instance types do not necessarily support both + architectures. For a list of the architectures that are supported + by the different instance types, see `Instance Families and + Types`_. + + :type root_device_type: string + :param root_device_type: The instance root device type. For more + information, see `Storage for the Root Device`_. + + :type install_updates_on_boot: boolean + :param install_updates_on_boot: + Whether to install operating system and package updates when the + instance boots. The default value is `True`. To control when + updates are installed, set this value to `False`. You must then + update your instances manually by using CreateDeployment to run the + `update_dependencies` stack command or manually running `yum` + (Amazon Linux) or `apt-get` (Ubuntu) on the instances. + + + We strongly recommend using the default value of `True` to ensure that + your instances have the latest security updates. + + :type ebs_optimized: boolean + :param ebs_optimized: Whether to create an Amazon EBS-optimized + instance. + + """ + params = { + 'StackId': stack_id, + 'LayerIds': layer_ids, + 'InstanceType': instance_type, + } + if auto_scaling_type is not None: + params['AutoScalingType'] = auto_scaling_type + if hostname is not None: + params['Hostname'] = hostname + if os is not None: + params['Os'] = os + if ami_id is not None: + params['AmiId'] = ami_id + if ssh_key_name is not None: + params['SshKeyName'] = ssh_key_name + if availability_zone is not None: + params['AvailabilityZone'] = availability_zone + if virtualization_type is not None: + params['VirtualizationType'] = virtualization_type + if subnet_id is not None: + params['SubnetId'] = subnet_id + if architecture is not None: + params['Architecture'] = architecture + if root_device_type is not None: + params['RootDeviceType'] = root_device_type + if install_updates_on_boot is not None: + params['InstallUpdatesOnBoot'] = install_updates_on_boot + if ebs_optimized is not None: + params['EbsOptimized'] = ebs_optimized + return self.make_request(action='CreateInstance', + body=json.dumps(params)) + + def create_layer(self, stack_id, type, name, shortname, attributes=None, + custom_instance_profile_arn=None, + custom_security_group_ids=None, packages=None, + volume_configurations=None, enable_auto_healing=None, + auto_assign_elastic_ips=None, + auto_assign_public_ips=None, custom_recipes=None, + install_updates_on_boot=None, + use_ebs_optimized_instances=None, + lifecycle_event_configuration=None): + """ + Creates a layer. For more information, see `How to Create a + Layer`_. + + + You should use **CreateLayer** for noncustom layer types such + as PHP App Server only if the stack does not have an existing + layer of that type. A stack can have at most one instance of + each noncustom layer; if you attempt to create a second + instance, **CreateLayer** fails. A stack can have an arbitrary + number of custom layers, so you can call **CreateLayer** as + many times as you like for that layer type. + + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The layer stack ID. + + :type type: string + :param type: The layer type. A stack cannot have more than one built-in + layer of the same type. It can have any number of custom layers. + + :type name: string + :param name: The layer name, which is used by the console. + + :type shortname: string + :param shortname: The layer short name, which is used internally by AWS + OpsWorks and by Chef recipes. The short name is also used as the + name for the directory where your app files are installed. It can + have a maximum of 200 characters, which are limited to the + alphanumeric characters, '-', '_', and '.'. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type custom_instance_profile_arn: string + :param custom_instance_profile_arn: The ARN of an IAM profile that to + be used for the layer's EC2 instances. For more information about + IAM ARNs, see `Using Identifiers`_. + + :type custom_security_group_ids: list + :param custom_security_group_ids: An array containing the layer custom + security group IDs. + + :type packages: list + :param packages: An array of `Package` objects that describe the layer + packages. + + :type volume_configurations: list + :param volume_configurations: A `VolumeConfigurations` object that + describes the layer's Amazon EBS volumes. + + :type enable_auto_healing: boolean + :param enable_auto_healing: Whether to disable auto healing for the + layer. + + :type auto_assign_elastic_ips: boolean + :param auto_assign_elastic_ips: Whether to automatically assign an + `Elastic IP address`_ to the layer's instances. For more + information, see `How to Edit a Layer`_. + + :type auto_assign_public_ips: boolean + :param auto_assign_public_ips: For stacks that are running in a VPC, + whether to automatically assign a public IP address to the layer's + instances. For more information, see `How to Edit a Layer`_. + + :type custom_recipes: dict + :param custom_recipes: A `LayerCustomRecipes` object that specifies the + layer custom recipes. + + :type install_updates_on_boot: boolean + :param install_updates_on_boot: + Whether to install operating system and package updates when the + instance boots. The default value is `True`. To control when + updates are installed, set this value to `False`. You must then + update your instances manually by using CreateDeployment to run the + `update_dependencies` stack command or manually running `yum` + (Amazon Linux) or `apt-get` (Ubuntu) on the instances. + + + We strongly recommend using the default value of `True`, to ensure that + your instances have the latest security updates. + + :type use_ebs_optimized_instances: boolean + :param use_ebs_optimized_instances: Whether to use Amazon EBS-optimized + instances. + + :type lifecycle_event_configuration: dict + :param lifecycle_event_configuration: A LifeCycleEventConfiguration + object that you can use to configure the Shutdown event to specify + an execution timeout and enable or disable Elastic Load Balancer + connection draining. + + """ + params = { + 'StackId': stack_id, + 'Type': type, + 'Name': name, + 'Shortname': shortname, + } + if attributes is not None: + params['Attributes'] = attributes + if custom_instance_profile_arn is not None: + params['CustomInstanceProfileArn'] = custom_instance_profile_arn + if custom_security_group_ids is not None: + params['CustomSecurityGroupIds'] = custom_security_group_ids + if packages is not None: + params['Packages'] = packages + if volume_configurations is not None: + params['VolumeConfigurations'] = volume_configurations + if enable_auto_healing is not None: + params['EnableAutoHealing'] = enable_auto_healing + if auto_assign_elastic_ips is not None: + params['AutoAssignElasticIps'] = auto_assign_elastic_ips + if auto_assign_public_ips is not None: + params['AutoAssignPublicIps'] = auto_assign_public_ips + if custom_recipes is not None: + params['CustomRecipes'] = custom_recipes + if install_updates_on_boot is not None: + params['InstallUpdatesOnBoot'] = install_updates_on_boot + if use_ebs_optimized_instances is not None: + params['UseEbsOptimizedInstances'] = use_ebs_optimized_instances + if lifecycle_event_configuration is not None: + params['LifecycleEventConfiguration'] = lifecycle_event_configuration + return self.make_request(action='CreateLayer', + body=json.dumps(params)) + + def create_stack(self, name, region, service_role_arn, + default_instance_profile_arn, vpc_id=None, + attributes=None, default_os=None, hostname_theme=None, + default_availability_zone=None, default_subnet_id=None, + custom_json=None, configuration_manager=None, + chef_configuration=None, use_custom_cookbooks=None, + use_opsworks_security_groups=None, + custom_cookbooks_source=None, default_ssh_key_name=None, + default_root_device_type=None): + """ + Creates a new stack. For more information, see `Create a New + Stack`_. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type name: string + :param name: The stack name. + + :type region: string + :param region: The stack AWS region, such as "us-east-1". For more + information about Amazon regions, see `Regions and Endpoints`_. + + :type vpc_id: string + :param vpc_id: The ID of the VPC that the stack is to be launched into. + It must be in the specified region. All instances are launched into + this VPC, and you cannot change the ID later. + + + If your account supports EC2 Classic, the default value is no VPC. + + If your account does not support EC2 Classic, the default value is + the default VPC for the specified region. + + + If the VPC ID corresponds to a default VPC and you have specified + either the `DefaultAvailabilityZone` or the `DefaultSubnetId` + parameter only, AWS OpsWorks infers the value of the other + parameter. If you specify neither parameter, AWS OpsWorks sets + these parameters to the first valid Availability Zone for the + specified region and the corresponding default VPC subnet ID, + respectively. + + If you specify a nondefault VPC ID, note the following: + + + + It must belong to a VPC in your account that is in the specified + region. + + You must specify a value for `DefaultSubnetId`. + + + For more information on how to use AWS OpsWorks with a VPC, see + `Running a Stack in a VPC`_. For more information on default VPC + and EC2 Classic, see `Supported Platforms`_. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type service_role_arn: string + :param service_role_arn: The stack AWS Identity and Access Management + (IAM) role, which allows AWS OpsWorks to work with AWS resources on + your behalf. You must set this parameter to the Amazon Resource + Name (ARN) for an existing IAM role. For more information about IAM + ARNs, see `Using Identifiers`_. + + :type default_instance_profile_arn: string + :param default_instance_profile_arn: The ARN of an IAM profile that is + the default profile for all of the stack's EC2 instances. For more + information about IAM ARNs, see `Using Identifiers`_. + + :type default_os: string + :param default_os: The stack's operating system, which must be set to + one of the following. + + + Standard operating systems: an Amazon Linux version such as `Amazon + Linux 2014.09`, `Ubuntu 12.04 LTS`, or `Ubuntu 14.04 LTS`. + + Custom AMIs: `Custom`. You specify the custom AMI you want to use + when you create instances. + + + The default option is the current Amazon Linux version. + + :type hostname_theme: string + :param hostname_theme: The stack's host name theme, with spaces are + replaced by underscores. The theme is used to generate host names + for the stack's instances. By default, `HostnameTheme` is set to + `Layer_Dependent`, which creates host names by appending integers + to the layer's short name. The other themes are: + + + `Baked_Goods` + + `Clouds` + + `European_Cities` + + `Fruits` + + `Greek_Deities` + + `Legendary_Creatures_from_Japan` + + `Planets_and_Moons` + + `Roman_Deities` + + `Scottish_Islands` + + `US_Cities` + + `Wild_Cats` + + + To obtain a generated host name, call `GetHostNameSuggestion`, which + returns a host name based on the current theme. + + :type default_availability_zone: string + :param default_availability_zone: The stack's default Availability + Zone, which must be in the specified region. For more information, + see `Regions and Endpoints`_. If you also specify a value for + `DefaultSubnetId`, the subnet must be in the same zone. For more + information, see the `VpcId` parameter description. + + :type default_subnet_id: string + :param default_subnet_id: The stack's default VPC subnet ID. This + parameter is required if you specify a value for the `VpcId` + parameter. All instances are launched into this subnet unless you + specify otherwise when you create the instance. If you also specify + a value for `DefaultAvailabilityZone`, the subnet must be in that + zone. For information on default values and when this parameter is + required, see the `VpcId` parameter description. + + :type custom_json: string + :param custom_json: A string that contains user-defined, custom JSON. + It is used to override the corresponding default stack + configuration JSON values. The string should be in the following + format and must escape characters such as '"'.: + `"{\"key1\": \"value1\", \"key2\": \"value2\",...}"` + + For more information on custom JSON, see `Use Custom JSON to Modify the + Stack Configuration JSON`_. + + :type configuration_manager: dict + :param configuration_manager: The configuration manager. When you clone + a stack we recommend that you use the configuration manager to + specify the Chef version, 0.9, 11.4, or 11.10. The default value is + currently 11.4. + + :type chef_configuration: dict + :param chef_configuration: A `ChefConfiguration` object that specifies + whether to enable Berkshelf and the Berkshelf version on Chef 11.10 + stacks. For more information, see `Create a New Stack`_. + + :type use_custom_cookbooks: boolean + :param use_custom_cookbooks: Whether the stack uses custom cookbooks. + + :type use_opsworks_security_groups: boolean + :param use_opsworks_security_groups: Whether to associate the AWS + OpsWorks built-in security groups with the stack's layers. + AWS OpsWorks provides a standard set of built-in security groups, one + for each layer, which are associated with layers by default. With + `UseOpsworksSecurityGroups` you can instead provide your own custom + security groups. `UseOpsworksSecurityGroups` has the following + settings: + + + + True - AWS OpsWorks automatically associates the appropriate built-in + security group with each layer (default setting). You can associate + additional security groups with a layer after you create it but you + cannot delete the built-in security group. + + False - AWS OpsWorks does not associate built-in security groups with + layers. You must create appropriate EC2 security groups and + associate a security group with each layer that you create. + However, you can still manually associate a built-in security group + with a layer on creation; custom security groups are required only + for those layers that need custom settings. + + + For more information, see `Create a New Stack`_. + + :type custom_cookbooks_source: dict + :param custom_cookbooks_source: Contains the information required to + retrieve an app or cookbook from a repository. For more + information, see `Creating Apps`_ or `Custom Recipes and + Cookbooks`_. + + :type default_ssh_key_name: string + :param default_ssh_key_name: A default SSH key for the stack instances. + You can override this value when you create or update an instance. + + :type default_root_device_type: string + :param default_root_device_type: The default root device type. This + value is used by default for all instances in the stack, but you + can override it when you create an instance. The default option is + `instance-store`. For more information, see `Storage for the Root + Device`_. + + """ + params = { + 'Name': name, + 'Region': region, + 'ServiceRoleArn': service_role_arn, + 'DefaultInstanceProfileArn': default_instance_profile_arn, + } + if vpc_id is not None: + params['VpcId'] = vpc_id + if attributes is not None: + params['Attributes'] = attributes + if default_os is not None: + params['DefaultOs'] = default_os + if hostname_theme is not None: + params['HostnameTheme'] = hostname_theme + if default_availability_zone is not None: + params['DefaultAvailabilityZone'] = default_availability_zone + if default_subnet_id is not None: + params['DefaultSubnetId'] = default_subnet_id + if custom_json is not None: + params['CustomJson'] = custom_json + if configuration_manager is not None: + params['ConfigurationManager'] = configuration_manager + if chef_configuration is not None: + params['ChefConfiguration'] = chef_configuration + if use_custom_cookbooks is not None: + params['UseCustomCookbooks'] = use_custom_cookbooks + if use_opsworks_security_groups is not None: + params['UseOpsworksSecurityGroups'] = use_opsworks_security_groups + if custom_cookbooks_source is not None: + params['CustomCookbooksSource'] = custom_cookbooks_source + if default_ssh_key_name is not None: + params['DefaultSshKeyName'] = default_ssh_key_name + if default_root_device_type is not None: + params['DefaultRootDeviceType'] = default_root_device_type + return self.make_request(action='CreateStack', + body=json.dumps(params)) + + def create_user_profile(self, iam_user_arn, ssh_username=None, + ssh_public_key=None, allow_self_management=None): + """ + Creates a new user profile. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type iam_user_arn: string + :param iam_user_arn: The user's IAM ARN. + + :type ssh_username: string + :param ssh_username: The user's SSH user name. The allowable characters + are [a-z], [A-Z], [0-9], '-', and '_'. If the specified name + includes other punctuation marks, AWS OpsWorks removes them. For + example, `my.name` will be changed to `myname`. If you do not + specify an SSH user name, AWS OpsWorks generates one from the IAM + user name. + + :type ssh_public_key: string + :param ssh_public_key: The user's public SSH key. + + :type allow_self_management: boolean + :param allow_self_management: Whether users can specify their own SSH + public key through the My Settings page. For more information, see + `Setting an IAM User's Public SSH Key`_. + + """ + params = {'IamUserArn': iam_user_arn, } + if ssh_username is not None: + params['SshUsername'] = ssh_username + if ssh_public_key is not None: + params['SshPublicKey'] = ssh_public_key + if allow_self_management is not None: + params['AllowSelfManagement'] = allow_self_management + return self.make_request(action='CreateUserProfile', + body=json.dumps(params)) + + def delete_app(self, app_id): + """ + Deletes a specified app. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type app_id: string + :param app_id: The app ID. + + """ + params = {'AppId': app_id, } + return self.make_request(action='DeleteApp', + body=json.dumps(params)) + + def delete_instance(self, instance_id, delete_elastic_ip=None, + delete_volumes=None): + """ + Deletes a specified instance, which terminates the associated + Amazon EC2 instance. You must stop an instance before you can + delete it. + + For more information, see `Deleting Instances`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + :type delete_elastic_ip: boolean + :param delete_elastic_ip: Whether to delete the instance Elastic IP + address. + + :type delete_volumes: boolean + :param delete_volumes: Whether to delete the instance's Amazon EBS + volumes. + + """ + params = {'InstanceId': instance_id, } + if delete_elastic_ip is not None: + params['DeleteElasticIp'] = delete_elastic_ip + if delete_volumes is not None: + params['DeleteVolumes'] = delete_volumes + return self.make_request(action='DeleteInstance', + body=json.dumps(params)) + + def delete_layer(self, layer_id): + """ + Deletes a specified layer. You must first stop and then delete + all associated instances or unassign registered instances. For + more information, see `How to Delete a Layer`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type layer_id: string + :param layer_id: The layer ID. + + """ + params = {'LayerId': layer_id, } + return self.make_request(action='DeleteLayer', + body=json.dumps(params)) + + def delete_stack(self, stack_id): + """ + Deletes a specified stack. You must first delete all + instances, layers, and apps or deregister registered + instances. For more information, see `Shut Down a Stack`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'StackId': stack_id, } + return self.make_request(action='DeleteStack', + body=json.dumps(params)) + + def delete_user_profile(self, iam_user_arn): + """ + Deletes a user profile. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type iam_user_arn: string + :param iam_user_arn: The user's IAM ARN. + + """ + params = {'IamUserArn': iam_user_arn, } + return self.make_request(action='DeleteUserProfile', + body=json.dumps(params)) + + def deregister_elastic_ip(self, elastic_ip): + """ + Deregisters a specified Elastic IP address. The address can + then be registered by another stack. For more information, see + `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_ip: string + :param elastic_ip: The Elastic IP address. + + """ + params = {'ElasticIp': elastic_ip, } + return self.make_request(action='DeregisterElasticIp', + body=json.dumps(params)) + + def deregister_instance(self, instance_id): + """ + Deregister a registered Amazon EC2 or on-premises instance. + This action removes the instance from the stack and returns it + to your control. This action can not be used with instances + that were created with AWS OpsWorks. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'InstanceId': instance_id, } + return self.make_request(action='DeregisterInstance', + body=json.dumps(params)) + + def deregister_rds_db_instance(self, rds_db_instance_arn): + """ + Deregisters an Amazon RDS instance. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type rds_db_instance_arn: string + :param rds_db_instance_arn: The Amazon RDS instance's ARN. + + """ + params = {'RdsDbInstanceArn': rds_db_instance_arn, } + return self.make_request(action='DeregisterRdsDbInstance', + body=json.dumps(params)) + + def deregister_volume(self, volume_id): + """ + Deregisters an Amazon EBS volume. The volume can then be + registered by another stack. For more information, see + `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type volume_id: string + :param volume_id: The volume ID. + + """ + params = {'VolumeId': volume_id, } + return self.make_request(action='DeregisterVolume', + body=json.dumps(params)) + + def describe_apps(self, stack_id=None, app_ids=None): + """ + Requests a description of a specified set of apps. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The app stack ID. If you use this parameter, + `DescribeApps` returns a description of the apps in the specified + stack. + + :type app_ids: list + :param app_ids: An array of app IDs for the apps to be described. If + you use this parameter, `DescribeApps` returns a description of the + specified apps. Otherwise, it returns a description of every app. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if app_ids is not None: + params['AppIds'] = app_ids + return self.make_request(action='DescribeApps', + body=json.dumps(params)) + + def describe_commands(self, deployment_id=None, instance_id=None, + command_ids=None): + """ + Describes the results of specified commands. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type deployment_id: string + :param deployment_id: The deployment ID. If you include this parameter, + `DescribeCommands` returns a description of the commands associated + with the specified deployment. + + :type instance_id: string + :param instance_id: The instance ID. If you include this parameter, + `DescribeCommands` returns a description of the commands associated + with the specified instance. + + :type command_ids: list + :param command_ids: An array of command IDs. If you include this + parameter, `DescribeCommands` returns a description of the + specified commands. Otherwise, it returns a description of every + command. + + """ + params = {} + if deployment_id is not None: + params['DeploymentId'] = deployment_id + if instance_id is not None: + params['InstanceId'] = instance_id + if command_ids is not None: + params['CommandIds'] = command_ids + return self.make_request(action='DescribeCommands', + body=json.dumps(params)) + + def describe_deployments(self, stack_id=None, app_id=None, + deployment_ids=None): + """ + Requests a description of a specified set of deployments. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. If you include this parameter, + `DescribeDeployments` returns a description of the commands + associated with the specified stack. + + :type app_id: string + :param app_id: The app ID. If you include this parameter, + `DescribeDeployments` returns a description of the commands + associated with the specified app. + + :type deployment_ids: list + :param deployment_ids: An array of deployment IDs to be described. If + you include this parameter, `DescribeDeployments` returns a + description of the specified deployments. Otherwise, it returns a + description of every deployment. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if app_id is not None: + params['AppId'] = app_id + if deployment_ids is not None: + params['DeploymentIds'] = deployment_ids + return self.make_request(action='DescribeDeployments', + body=json.dumps(params)) + + def describe_elastic_ips(self, instance_id=None, stack_id=None, ips=None): + """ + Describes `Elastic IP addresses`_. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. If you include this parameter, + `DescribeElasticIps` returns a description of the Elastic IP + addresses associated with the specified instance. + + :type stack_id: string + :param stack_id: A stack ID. If you include this parameter, + `DescribeElasticIps` returns a description of the Elastic IP + addresses that are registered with the specified stack. + + :type ips: list + :param ips: An array of Elastic IP addresses to be described. If you + include this parameter, `DescribeElasticIps` returns a description + of the specified Elastic IP addresses. Otherwise, it returns a + description of every Elastic IP address. + + """ + params = {} + if instance_id is not None: + params['InstanceId'] = instance_id + if stack_id is not None: + params['StackId'] = stack_id + if ips is not None: + params['Ips'] = ips + return self.make_request(action='DescribeElasticIps', + body=json.dumps(params)) + + def describe_elastic_load_balancers(self, stack_id=None, layer_ids=None): + """ + Describes a stack's Elastic Load Balancing instances. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: A stack ID. The action describes the stack's Elastic + Load Balancing instances. + + :type layer_ids: list + :param layer_ids: A list of layer IDs. The action describes the Elastic + Load Balancing instances for the specified layers. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if layer_ids is not None: + params['LayerIds'] = layer_ids + return self.make_request(action='DescribeElasticLoadBalancers', + body=json.dumps(params)) + + def describe_instances(self, stack_id=None, layer_id=None, + instance_ids=None): + """ + Requests a description of a set of instances. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: A stack ID. If you use this parameter, + `DescribeInstances` returns descriptions of the instances + associated with the specified stack. + + :type layer_id: string + :param layer_id: A layer ID. If you use this parameter, + `DescribeInstances` returns descriptions of the instances + associated with the specified layer. + + :type instance_ids: list + :param instance_ids: An array of instance IDs to be described. If you + use this parameter, `DescribeInstances` returns a description of + the specified instances. Otherwise, it returns a description of + every instance. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if layer_id is not None: + params['LayerId'] = layer_id + if instance_ids is not None: + params['InstanceIds'] = instance_ids + return self.make_request(action='DescribeInstances', + body=json.dumps(params)) + + def describe_layers(self, stack_id=None, layer_ids=None): + """ + Requests a description of one or more layers in a specified + stack. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type layer_ids: list + :param layer_ids: An array of layer IDs that specify the layers to be + described. If you omit this parameter, `DescribeLayers` returns a + description of every layer in the specified stack. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if layer_ids is not None: + params['LayerIds'] = layer_ids + return self.make_request(action='DescribeLayers', + body=json.dumps(params)) + + def describe_load_based_auto_scaling(self, layer_ids): + """ + Describes load-based auto scaling configurations for specified + layers. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type layer_ids: list + :param layer_ids: An array of layer IDs. + + """ + params = {'LayerIds': layer_ids, } + return self.make_request(action='DescribeLoadBasedAutoScaling', + body=json.dumps(params)) + + def describe_my_user_profile(self): + """ + Describes a user's SSH information. + + **Required Permissions**: To use this action, an IAM user must + have self-management enabled or an attached policy that + explicitly grants permissions. For more information on user + permissions, see `Managing User Permissions`_. + + + """ + params = {} + return self.make_request(action='DescribeMyUserProfile', + body=json.dumps(params)) + + def describe_permissions(self, iam_user_arn=None, stack_id=None): + """ + Describes the permissions for a specified stack. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type iam_user_arn: string + :param iam_user_arn: The user's IAM ARN. For more information about IAM + ARNs, see `Using Identifiers`_. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {} + if iam_user_arn is not None: + params['IamUserArn'] = iam_user_arn + if stack_id is not None: + params['StackId'] = stack_id + return self.make_request(action='DescribePermissions', + body=json.dumps(params)) + + def describe_raid_arrays(self, instance_id=None, stack_id=None, + raid_array_ids=None): + """ + Describe an instance's RAID arrays. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. If you use this parameter, + `DescribeRaidArrays` returns descriptions of the RAID arrays + associated with the specified instance. + + :type stack_id: string + :param stack_id: The stack ID. + + :type raid_array_ids: list + :param raid_array_ids: An array of RAID array IDs. If you use this + parameter, `DescribeRaidArrays` returns descriptions of the + specified arrays. Otherwise, it returns a description of every + array. + + """ + params = {} + if instance_id is not None: + params['InstanceId'] = instance_id + if stack_id is not None: + params['StackId'] = stack_id + if raid_array_ids is not None: + params['RaidArrayIds'] = raid_array_ids + return self.make_request(action='DescribeRaidArrays', + body=json.dumps(params)) + + def describe_rds_db_instances(self, stack_id, rds_db_instance_arns=None): + """ + Describes Amazon RDS instances. + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID that the instances are registered with. + The operation returns descriptions of all registered Amazon RDS + instances. + + :type rds_db_instance_arns: list + :param rds_db_instance_arns: An array containing the ARNs of the + instances to be described. + + """ + params = {'StackId': stack_id, } + if rds_db_instance_arns is not None: + params['RdsDbInstanceArns'] = rds_db_instance_arns + return self.make_request(action='DescribeRdsDbInstances', + body=json.dumps(params)) + + def describe_service_errors(self, stack_id=None, instance_id=None, + service_error_ids=None): + """ + Describes AWS OpsWorks service errors. + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. If you use this parameter, + `DescribeServiceErrors` returns descriptions of the errors + associated with the specified stack. + + :type instance_id: string + :param instance_id: The instance ID. If you use this parameter, + `DescribeServiceErrors` returns descriptions of the errors + associated with the specified instance. + + :type service_error_ids: list + :param service_error_ids: An array of service error IDs. If you use + this parameter, `DescribeServiceErrors` returns descriptions of the + specified errors. Otherwise, it returns a description of every + error. + + """ + params = {} + if stack_id is not None: + params['StackId'] = stack_id + if instance_id is not None: + params['InstanceId'] = instance_id + if service_error_ids is not None: + params['ServiceErrorIds'] = service_error_ids + return self.make_request(action='DescribeServiceErrors', + body=json.dumps(params)) + + def describe_stack_provisioning_parameters(self, stack_id): + """ + Requests a description of a stack's provisioning parameters. + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the stack + or an attached policy that explicitly grants permissions. For + more information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID + + """ + params = {'StackId': stack_id, } + return self.make_request(action='DescribeStackProvisioningParameters', + body=json.dumps(params)) + + def describe_stack_summary(self, stack_id): + """ + Describes the number of layers and apps in a specified stack, + and the number of instances in each state, such as + `running_setup` or `online`. + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'StackId': stack_id, } + return self.make_request(action='DescribeStackSummary', + body=json.dumps(params)) + + def describe_stacks(self, stack_ids=None): + """ + Requests a description of one or more stacks. + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type stack_ids: list + :param stack_ids: An array of stack IDs that specify the stacks to be + described. If you omit this parameter, `DescribeStacks` returns a + description of every stack. + + """ + params = {} + if stack_ids is not None: + params['StackIds'] = stack_ids + return self.make_request(action='DescribeStacks', + body=json.dumps(params)) + + def describe_time_based_auto_scaling(self, instance_ids): + """ + Describes time-based auto scaling configurations for specified + instances. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type instance_ids: list + :param instance_ids: An array of instance IDs. + + """ + params = {'InstanceIds': instance_ids, } + return self.make_request(action='DescribeTimeBasedAutoScaling', + body=json.dumps(params)) + + def describe_user_profiles(self, iam_user_arns=None): + """ + Describe specified users. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type iam_user_arns: list + :param iam_user_arns: An array of IAM user ARNs that identify the users + to be described. + + """ + params = {} + if iam_user_arns is not None: + params['IamUserArns'] = iam_user_arns + return self.make_request(action='DescribeUserProfiles', + body=json.dumps(params)) + + def describe_volumes(self, instance_id=None, stack_id=None, + raid_array_id=None, volume_ids=None): + """ + Describes an instance's Amazon EBS volumes. + + + You must specify at least one of the parameters. + + + **Required Permissions**: To use this action, an IAM user must + have a Show, Deploy, or Manage permissions level for the + stack, or an attached policy that explicitly grants + permissions. For more information on user permissions, see + `Managing User Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. If you use this parameter, + `DescribeVolumes` returns descriptions of the volumes associated + with the specified instance. + + :type stack_id: string + :param stack_id: A stack ID. The action describes the stack's + registered Amazon EBS volumes. + + :type raid_array_id: string + :param raid_array_id: The RAID array ID. If you use this parameter, + `DescribeVolumes` returns descriptions of the volumes associated + with the specified RAID array. + + :type volume_ids: list + :param volume_ids: Am array of volume IDs. If you use this parameter, + `DescribeVolumes` returns descriptions of the specified volumes. + Otherwise, it returns a description of every volume. + + """ + params = {} + if instance_id is not None: + params['InstanceId'] = instance_id + if stack_id is not None: + params['StackId'] = stack_id + if raid_array_id is not None: + params['RaidArrayId'] = raid_array_id + if volume_ids is not None: + params['VolumeIds'] = volume_ids + return self.make_request(action='DescribeVolumes', + body=json.dumps(params)) + + def detach_elastic_load_balancer(self, elastic_load_balancer_name, + layer_id): + """ + Detaches a specified Elastic Load Balancing instance from its + layer. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_load_balancer_name: string + :param elastic_load_balancer_name: The Elastic Load Balancing + instance's name. + + :type layer_id: string + :param layer_id: The ID of the layer that the Elastic Load Balancing + instance is attached to. + + """ + params = { + 'ElasticLoadBalancerName': elastic_load_balancer_name, + 'LayerId': layer_id, + } + return self.make_request(action='DetachElasticLoadBalancer', + body=json.dumps(params)) + + def disassociate_elastic_ip(self, elastic_ip): + """ + Disassociates an Elastic IP address from its instance. The + address remains registered with the stack. For more + information, see `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_ip: string + :param elastic_ip: The Elastic IP address. + + """ + params = {'ElasticIp': elastic_ip, } + return self.make_request(action='DisassociateElasticIp', + body=json.dumps(params)) + + def get_hostname_suggestion(self, layer_id): + """ + Gets a generated host name for the specified layer, based on + the current host name theme. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type layer_id: string + :param layer_id: The layer ID. + + """ + params = {'LayerId': layer_id, } + return self.make_request(action='GetHostnameSuggestion', + body=json.dumps(params)) + + def reboot_instance(self, instance_id): + """ + Reboots a specified instance. For more information, see + `Starting, Stopping, and Rebooting Instances`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'InstanceId': instance_id, } + return self.make_request(action='RebootInstance', + body=json.dumps(params)) + + def register_elastic_ip(self, elastic_ip, stack_id): + """ + Registers an Elastic IP address with a specified stack. An + address can be registered with only one stack at a time. If + the address is already registered, you must first deregister + it by calling DeregisterElasticIp. For more information, see + `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_ip: string + :param elastic_ip: The Elastic IP address. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'ElasticIp': elastic_ip, 'StackId': stack_id, } + return self.make_request(action='RegisterElasticIp', + body=json.dumps(params)) + + def register_instance(self, stack_id, hostname=None, public_ip=None, + private_ip=None, rsa_public_key=None, + rsa_public_key_fingerprint=None, + instance_identity=None): + """ + Registers instances with a specified stack that were created + outside of AWS OpsWorks. + + We do not recommend using this action to register instances. + The complete registration operation has two primary steps, + installing the AWS OpsWorks agent on the instance and + registering the instance with the stack. `RegisterInstance` + handles only the second step. You should instead use the AWS + CLI `register` command, which performs the entire registration + operation. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The ID of the stack that the instance is to be + registered with. + + :type hostname: string + :param hostname: The instance's hostname. + + :type public_ip: string + :param public_ip: The instance's public IP address. + + :type private_ip: string + :param private_ip: The instance's private IP address. + + :type rsa_public_key: string + :param rsa_public_key: The instances public RSA key. This key is used + to encrypt communication between the instance and the service. + + :type rsa_public_key_fingerprint: string + :param rsa_public_key_fingerprint: The instances public RSA key + fingerprint. + + :type instance_identity: dict + :param instance_identity: An InstanceIdentity object that contains the + instance's identity. + + """ + params = {'StackId': stack_id, } + if hostname is not None: + params['Hostname'] = hostname + if public_ip is not None: + params['PublicIp'] = public_ip + if private_ip is not None: + params['PrivateIp'] = private_ip + if rsa_public_key is not None: + params['RsaPublicKey'] = rsa_public_key + if rsa_public_key_fingerprint is not None: + params['RsaPublicKeyFingerprint'] = rsa_public_key_fingerprint + if instance_identity is not None: + params['InstanceIdentity'] = instance_identity + return self.make_request(action='RegisterInstance', + body=json.dumps(params)) + + def register_rds_db_instance(self, stack_id, rds_db_instance_arn, + db_user, db_password): + """ + Registers an Amazon RDS instance with a stack. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type rds_db_instance_arn: string + :param rds_db_instance_arn: The Amazon RDS instance's ARN. + + :type db_user: string + :param db_user: The database's master user name. + + :type db_password: string + :param db_password: The database password. + + """ + params = { + 'StackId': stack_id, + 'RdsDbInstanceArn': rds_db_instance_arn, + 'DbUser': db_user, + 'DbPassword': db_password, + } + return self.make_request(action='RegisterRdsDbInstance', + body=json.dumps(params)) + + def register_volume(self, stack_id, ec_2_volume_id=None): + """ + Registers an Amazon EBS volume with a specified stack. A + volume can be registered with only one stack at a time. If the + volume is already registered, you must first deregister it by + calling DeregisterVolume. For more information, see `Resource + Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type ec_2_volume_id: string + :param ec_2_volume_id: The Amazon EBS volume ID. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'StackId': stack_id, } + if ec_2_volume_id is not None: + params['Ec2VolumeId'] = ec_2_volume_id + return self.make_request(action='RegisterVolume', + body=json.dumps(params)) + + def set_load_based_auto_scaling(self, layer_id, enable=None, + up_scaling=None, down_scaling=None): + """ + Specify the load-based auto scaling configuration for a + specified layer. For more information, see `Managing Load with + Time-based and Load-based Instances`_. + + + To use load-based auto scaling, you must create a set of load- + based auto scaling instances. Load-based auto scaling operates + only on the instances from that set, so you must ensure that + you have created enough instances to handle the maximum + anticipated load. + + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type layer_id: string + :param layer_id: The layer ID. + + :type enable: boolean + :param enable: Enables load-based auto scaling for the layer. + + :type up_scaling: dict + :param up_scaling: An `AutoScalingThresholds` object with the upscaling + threshold configuration. If the load exceeds these thresholds for a + specified amount of time, AWS OpsWorks starts a specified number of + instances. + + :type down_scaling: dict + :param down_scaling: An `AutoScalingThresholds` object with the + downscaling threshold configuration. If the load falls below these + thresholds for a specified amount of time, AWS OpsWorks stops a + specified number of instances. + + """ + params = {'LayerId': layer_id, } + if enable is not None: + params['Enable'] = enable + if up_scaling is not None: + params['UpScaling'] = up_scaling + if down_scaling is not None: + params['DownScaling'] = down_scaling + return self.make_request(action='SetLoadBasedAutoScaling', + body=json.dumps(params)) + + def set_permission(self, stack_id, iam_user_arn, allow_ssh=None, + allow_sudo=None, level=None): + """ + Specifies a user's permissions. For more information, see + `Security and Permissions`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type iam_user_arn: string + :param iam_user_arn: The user's IAM ARN. + + :type allow_ssh: boolean + :param allow_ssh: The user is allowed to use SSH to communicate with + the instance. + + :type allow_sudo: boolean + :param allow_sudo: The user is allowed to use **sudo** to elevate + privileges. + + :type level: string + :param level: The user's permission level, which must be set to one of + the following strings. You cannot set your own permissions level. + + + `deny` + + `show` + + `deploy` + + `manage` + + `iam_only` + + + For more information on the permissions associated with these levels, + see `Managing User Permissions`_ + + """ + params = {'StackId': stack_id, 'IamUserArn': iam_user_arn, } + if allow_ssh is not None: + params['AllowSsh'] = allow_ssh + if allow_sudo is not None: + params['AllowSudo'] = allow_sudo + if level is not None: + params['Level'] = level + return self.make_request(action='SetPermission', + body=json.dumps(params)) + + def set_time_based_auto_scaling(self, instance_id, + auto_scaling_schedule=None): + """ + Specify the time-based auto scaling configuration for a + specified instance. For more information, see `Managing Load + with Time-based and Load-based Instances`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + :type auto_scaling_schedule: dict + :param auto_scaling_schedule: An `AutoScalingSchedule` with the + instance schedule. + + """ + params = {'InstanceId': instance_id, } + if auto_scaling_schedule is not None: + params['AutoScalingSchedule'] = auto_scaling_schedule + return self.make_request(action='SetTimeBasedAutoScaling', + body=json.dumps(params)) + + def start_instance(self, instance_id): + """ + Starts a specified instance. For more information, see + `Starting, Stopping, and Rebooting Instances`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'InstanceId': instance_id, } + return self.make_request(action='StartInstance', + body=json.dumps(params)) + + def start_stack(self, stack_id): + """ + Starts a stack's instances. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'StackId': stack_id, } + return self.make_request(action='StartStack', + body=json.dumps(params)) + + def stop_instance(self, instance_id): + """ + Stops a specified instance. When you stop a standard instance, + the data disappears and must be reinstalled when you restart + the instance. You can stop an Amazon EBS-backed instance + without losing data. For more information, see `Starting, + Stopping, and Rebooting Instances`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'InstanceId': instance_id, } + return self.make_request(action='StopInstance', + body=json.dumps(params)) + + def stop_stack(self, stack_id): + """ + Stops a specified stack. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + """ + params = {'StackId': stack_id, } + return self.make_request(action='StopStack', + body=json.dumps(params)) + + def unassign_instance(self, instance_id): + """ + Unassigns a registered instance from all of it's layers. The + instance remains in the stack as an unassigned instance and + can be assigned to another layer, as needed. You cannot use + this action with instances that were created with AWS + OpsWorks. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + """ + params = {'InstanceId': instance_id, } + return self.make_request(action='UnassignInstance', + body=json.dumps(params)) + + def unassign_volume(self, volume_id): + """ + Unassigns an assigned Amazon EBS volume. The volume remains + registered with the stack. For more information, see `Resource + Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type volume_id: string + :param volume_id: The volume ID. + + """ + params = {'VolumeId': volume_id, } + return self.make_request(action='UnassignVolume', + body=json.dumps(params)) + + def update_app(self, app_id, name=None, description=None, + data_sources=None, type=None, app_source=None, + domains=None, enable_ssl=None, ssl_configuration=None, + attributes=None, environment=None): + """ + Updates a specified app. + + **Required Permissions**: To use this action, an IAM user must + have a Deploy or Manage permissions level for the stack, or an + attached policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type app_id: string + :param app_id: The app ID. + + :type name: string + :param name: The app name. + + :type description: string + :param description: A description of the app. + + :type data_sources: list + :param data_sources: The app's data sources. + + :type type: string + :param type: The app type. + + :type app_source: dict + :param app_source: A `Source` object that specifies the app repository. + + :type domains: list + :param domains: The app's virtual host settings, with multiple domains + separated by commas. For example: `'www.example.com, example.com'` + + :type enable_ssl: boolean + :param enable_ssl: Whether SSL is enabled for the app. + + :type ssl_configuration: dict + :param ssl_configuration: An `SslConfiguration` object with the SSL + configuration. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type environment: list + :param environment: + An array of `EnvironmentVariable` objects that specify environment + variables to be associated with the app. You can specify up to ten + environment variables. After you deploy the app, these variables + are defined on the associated app server instances. + + This parameter is supported only by Chef 11.10 stacks. If you have + specified one or more environment variables, you cannot modify the + stack's Chef version. + + """ + params = {'AppId': app_id, } + if name is not None: + params['Name'] = name + if description is not None: + params['Description'] = description + if data_sources is not None: + params['DataSources'] = data_sources + if type is not None: + params['Type'] = type + if app_source is not None: + params['AppSource'] = app_source + if domains is not None: + params['Domains'] = domains + if enable_ssl is not None: + params['EnableSsl'] = enable_ssl + if ssl_configuration is not None: + params['SslConfiguration'] = ssl_configuration + if attributes is not None: + params['Attributes'] = attributes + if environment is not None: + params['Environment'] = environment + return self.make_request(action='UpdateApp', + body=json.dumps(params)) + + def update_elastic_ip(self, elastic_ip, name=None): + """ + Updates a registered Elastic IP address's name. For more + information, see `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type elastic_ip: string + :param elastic_ip: The address. + + :type name: string + :param name: The new name. + + """ + params = {'ElasticIp': elastic_ip, } + if name is not None: + params['Name'] = name + return self.make_request(action='UpdateElasticIp', + body=json.dumps(params)) + + def update_instance(self, instance_id, layer_ids=None, + instance_type=None, auto_scaling_type=None, + hostname=None, os=None, ami_id=None, + ssh_key_name=None, architecture=None, + install_updates_on_boot=None, ebs_optimized=None): + """ + Updates a specified instance. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type instance_id: string + :param instance_id: The instance ID. + + :type layer_ids: list + :param layer_ids: The instance's layer IDs. + + :type instance_type: string + :param instance_type: The instance type. AWS OpsWorks supports all + instance types except Cluster Compute, Cluster GPU, and High Memory + Cluster. For more information, see `Instance Families and Types`_. + The parameter values that you use to specify the various types are + in the API Name column of the Available Instance Types table. + + :type auto_scaling_type: string + :param auto_scaling_type: For load-based or time-based instances, the + type. + + :type hostname: string + :param hostname: The instance host name. + + :type os: string + :param os: The instance's operating system, which must be set to one of + the following. + + + Standard operating systems: An Amazon Linux version such as `Amazon + Linux 2014.09`, `Ubuntu 12.04 LTS`, or `Ubuntu 14.04 LTS`. + + Custom AMIs: `Custom` + + + The default option is the current Amazon Linux version, such as `Amazon + Linux 2014.09`. If you set this parameter to `Custom`, you must use + the CreateInstance action's AmiId parameter to specify the custom + AMI that you want to use. For more information on the standard + operating systems, see `Operating Systems`_For more information on + how to use custom AMIs with OpsWorks, see `Using Custom AMIs`_. + + :type ami_id: string + :param ami_id: + A custom AMI ID to be used to create the instance. The AMI should be + based on one of the standard AWS OpsWorks AMIs: Amazon Linux, + Ubuntu 12.04 LTS, or Ubuntu 14.04 LTS. For more information, see + `Instances`_ + + If you specify a custom AMI, you must set `Os` to `Custom`. + + :type ssh_key_name: string + :param ssh_key_name: The instance SSH key name. + + :type architecture: string + :param architecture: The instance architecture. Instance types do not + necessarily support both architectures. For a list of the + architectures that are supported by the different instance types, + see `Instance Families and Types`_. + + :type install_updates_on_boot: boolean + :param install_updates_on_boot: + Whether to install operating system and package updates when the + instance boots. The default value is `True`. To control when + updates are installed, set this value to `False`. You must then + update your instances manually by using CreateDeployment to run the + `update_dependencies` stack command or manually running `yum` + (Amazon Linux) or `apt-get` (Ubuntu) on the instances. + + + We strongly recommend using the default value of `True`, to ensure that + your instances have the latest security updates. + + :type ebs_optimized: boolean + :param ebs_optimized: Whether this is an Amazon EBS-optimized instance. + + """ + params = {'InstanceId': instance_id, } + if layer_ids is not None: + params['LayerIds'] = layer_ids + if instance_type is not None: + params['InstanceType'] = instance_type + if auto_scaling_type is not None: + params['AutoScalingType'] = auto_scaling_type + if hostname is not None: + params['Hostname'] = hostname + if os is not None: + params['Os'] = os + if ami_id is not None: + params['AmiId'] = ami_id + if ssh_key_name is not None: + params['SshKeyName'] = ssh_key_name + if architecture is not None: + params['Architecture'] = architecture + if install_updates_on_boot is not None: + params['InstallUpdatesOnBoot'] = install_updates_on_boot + if ebs_optimized is not None: + params['EbsOptimized'] = ebs_optimized + return self.make_request(action='UpdateInstance', + body=json.dumps(params)) + + def update_layer(self, layer_id, name=None, shortname=None, + attributes=None, custom_instance_profile_arn=None, + custom_security_group_ids=None, packages=None, + volume_configurations=None, enable_auto_healing=None, + auto_assign_elastic_ips=None, + auto_assign_public_ips=None, custom_recipes=None, + install_updates_on_boot=None, + use_ebs_optimized_instances=None, + lifecycle_event_configuration=None): + """ + Updates a specified layer. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type layer_id: string + :param layer_id: The layer ID. + + :type name: string + :param name: The layer name, which is used by the console. + + :type shortname: string + :param shortname: The layer short name, which is used internally by AWS + OpsWorksand by Chef. The short name is also used as the name for + the directory where your app files are installed. It can have a + maximum of 200 characters and must be in the following format: + /\A[a-z0-9\-\_\.]+\Z/. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type custom_instance_profile_arn: string + :param custom_instance_profile_arn: The ARN of an IAM profile to be + used for all of the layer's EC2 instances. For more information + about IAM ARNs, see `Using Identifiers`_. + + :type custom_security_group_ids: list + :param custom_security_group_ids: An array containing the layer's + custom security group IDs. + + :type packages: list + :param packages: An array of `Package` objects that describe the + layer's packages. + + :type volume_configurations: list + :param volume_configurations: A `VolumeConfigurations` object that + describes the layer's Amazon EBS volumes. + + :type enable_auto_healing: boolean + :param enable_auto_healing: Whether to disable auto healing for the + layer. + + :type auto_assign_elastic_ips: boolean + :param auto_assign_elastic_ips: Whether to automatically assign an + `Elastic IP address`_ to the layer's instances. For more + information, see `How to Edit a Layer`_. + + :type auto_assign_public_ips: boolean + :param auto_assign_public_ips: For stacks that are running in a VPC, + whether to automatically assign a public IP address to the layer's + instances. For more information, see `How to Edit a Layer`_. + + :type custom_recipes: dict + :param custom_recipes: A `LayerCustomRecipes` object that specifies the + layer's custom recipes. + + :type install_updates_on_boot: boolean + :param install_updates_on_boot: + Whether to install operating system and package updates when the + instance boots. The default value is `True`. To control when + updates are installed, set this value to `False`. You must then + update your instances manually by using CreateDeployment to run the + `update_dependencies` stack command or manually running `yum` + (Amazon Linux) or `apt-get` (Ubuntu) on the instances. + + + We strongly recommend using the default value of `True`, to ensure that + your instances have the latest security updates. + + :type use_ebs_optimized_instances: boolean + :param use_ebs_optimized_instances: Whether to use Amazon EBS-optimized + instances. + + :type lifecycle_event_configuration: dict + :param lifecycle_event_configuration: + + """ + params = {'LayerId': layer_id, } + if name is not None: + params['Name'] = name + if shortname is not None: + params['Shortname'] = shortname + if attributes is not None: + params['Attributes'] = attributes + if custom_instance_profile_arn is not None: + params['CustomInstanceProfileArn'] = custom_instance_profile_arn + if custom_security_group_ids is not None: + params['CustomSecurityGroupIds'] = custom_security_group_ids + if packages is not None: + params['Packages'] = packages + if volume_configurations is not None: + params['VolumeConfigurations'] = volume_configurations + if enable_auto_healing is not None: + params['EnableAutoHealing'] = enable_auto_healing + if auto_assign_elastic_ips is not None: + params['AutoAssignElasticIps'] = auto_assign_elastic_ips + if auto_assign_public_ips is not None: + params['AutoAssignPublicIps'] = auto_assign_public_ips + if custom_recipes is not None: + params['CustomRecipes'] = custom_recipes + if install_updates_on_boot is not None: + params['InstallUpdatesOnBoot'] = install_updates_on_boot + if use_ebs_optimized_instances is not None: + params['UseEbsOptimizedInstances'] = use_ebs_optimized_instances + if lifecycle_event_configuration is not None: + params['LifecycleEventConfiguration'] = lifecycle_event_configuration + return self.make_request(action='UpdateLayer', + body=json.dumps(params)) + + def update_my_user_profile(self, ssh_public_key=None): + """ + Updates a user's SSH public key. + + **Required Permissions**: To use this action, an IAM user must + have self-management enabled or an attached policy that + explicitly grants permissions. For more information on user + permissions, see `Managing User Permissions`_. + + :type ssh_public_key: string + :param ssh_public_key: The user's SSH public key. + + """ + params = {} + if ssh_public_key is not None: + params['SshPublicKey'] = ssh_public_key + return self.make_request(action='UpdateMyUserProfile', + body=json.dumps(params)) + + def update_rds_db_instance(self, rds_db_instance_arn, db_user=None, + db_password=None): + """ + Updates an Amazon RDS instance. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type rds_db_instance_arn: string + :param rds_db_instance_arn: The Amazon RDS instance's ARN. + + :type db_user: string + :param db_user: The master user name. + + :type db_password: string + :param db_password: The database password. + + """ + params = {'RdsDbInstanceArn': rds_db_instance_arn, } + if db_user is not None: + params['DbUser'] = db_user + if db_password is not None: + params['DbPassword'] = db_password + return self.make_request(action='UpdateRdsDbInstance', + body=json.dumps(params)) + + def update_stack(self, stack_id, name=None, attributes=None, + service_role_arn=None, + default_instance_profile_arn=None, default_os=None, + hostname_theme=None, default_availability_zone=None, + default_subnet_id=None, custom_json=None, + configuration_manager=None, chef_configuration=None, + use_custom_cookbooks=None, custom_cookbooks_source=None, + default_ssh_key_name=None, + default_root_device_type=None, + use_opsworks_security_groups=None): + """ + Updates a specified stack. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type stack_id: string + :param stack_id: The stack ID. + + :type name: string + :param name: The stack's new name. + + :type attributes: map + :param attributes: One or more user-defined key/value pairs to be added + to the stack attributes. + + :type service_role_arn: string + :param service_role_arn: + The stack AWS Identity and Access Management (IAM) role, which allows + AWS OpsWorks to work with AWS resources on your behalf. You must + set this parameter to the Amazon Resource Name (ARN) for an + existing IAM role. For more information about IAM ARNs, see `Using + Identifiers`_. + + + You must set this parameter to a valid service role ARN or the action + will fail; there is no default value. You can specify the stack's + current service role ARN, if you prefer, but you must do so + explicitly. + + :type default_instance_profile_arn: string + :param default_instance_profile_arn: The ARN of an IAM profile that is + the default profile for all of the stack's EC2 instances. For more + information about IAM ARNs, see `Using Identifiers`_. + + :type default_os: string + :param default_os: The stack's operating system, which must be set to + one of the following. + + + Standard operating systems: an Amazon Linux version such as `Amazon + Linux 2014.09`, `Ubuntu 12.04 LTS`, or `Ubuntu 14.04 LTS`. + + Custom AMIs: `Custom`. You specify the custom AMI you want to use + when you create instances. + + + The default option is the current Amazon Linux version. + + :type hostname_theme: string + :param hostname_theme: The stack's new host name theme, with spaces are + replaced by underscores. The theme is used to generate host names + for the stack's instances. By default, `HostnameTheme` is set to + `Layer_Dependent`, which creates host names by appending integers + to the layer's short name. The other themes are: + + + `Baked_Goods` + + `Clouds` + + `European_Cities` + + `Fruits` + + `Greek_Deities` + + `Legendary_Creatures_from_Japan` + + `Planets_and_Moons` + + `Roman_Deities` + + `Scottish_Islands` + + `US_Cities` + + `Wild_Cats` + + + To obtain a generated host name, call `GetHostNameSuggestion`, which + returns a host name based on the current theme. + + :type default_availability_zone: string + :param default_availability_zone: The stack's default Availability + Zone, which must be in the specified region. For more information, + see `Regions and Endpoints`_. If you also specify a value for + `DefaultSubnetId`, the subnet must be in the same zone. For more + information, see CreateStack. + + :type default_subnet_id: string + :param default_subnet_id: The stack's default VPC subnet ID. This + parameter is required if you specify a value for the `VpcId` + parameter. All instances are launched into this subnet unless you + specify otherwise when you create the instance. If you also specify + a value for `DefaultAvailabilityZone`, the subnet must be in that + zone. For information on default values and when this parameter is + required, see the `VpcId` parameter description. + + :type custom_json: string + :param custom_json: A string that contains user-defined, custom JSON. + It is used to override the corresponding default stack + configuration JSON values. The string should be in the following + format and must escape characters such as '"'.: + `"{\"key1\": \"value1\", \"key2\": \"value2\",...}"` + + For more information on custom JSON, see `Use Custom JSON to Modify the + Stack Configuration JSON`_. + + :type configuration_manager: dict + :param configuration_manager: The configuration manager. When you clone + a stack we recommend that you use the configuration manager to + specify the Chef version, 0.9, 11.4, or 11.10. The default value is + currently 11.4. + + :type chef_configuration: dict + :param chef_configuration: A `ChefConfiguration` object that specifies + whether to enable Berkshelf and the Berkshelf version on Chef 11.10 + stacks. For more information, see `Create a New Stack`_. + + :type use_custom_cookbooks: boolean + :param use_custom_cookbooks: Whether the stack uses custom cookbooks. + + :type custom_cookbooks_source: dict + :param custom_cookbooks_source: Contains the information required to + retrieve an app or cookbook from a repository. For more + information, see `Creating Apps`_ or `Custom Recipes and + Cookbooks`_. + + :type default_ssh_key_name: string + :param default_ssh_key_name: A default SSH key for the stack instances. + You can override this value when you create or update an instance. + + :type default_root_device_type: string + :param default_root_device_type: The default root device type. This + value is used by default for all instances in the stack, but you + can override it when you create an instance. For more information, + see `Storage for the Root Device`_. + + :type use_opsworks_security_groups: boolean + :param use_opsworks_security_groups: Whether to associate the AWS + OpsWorks built-in security groups with the stack's layers. + AWS OpsWorks provides a standard set of built-in security groups, one + for each layer, which are associated with layers by default. + `UseOpsworksSecurityGroups` allows you to instead provide your own + custom security groups. `UseOpsworksSecurityGroups` has the + following settings: + + + + True - AWS OpsWorks automatically associates the appropriate built-in + security group with each layer (default setting). You can associate + additional security groups with a layer after you create it but you + cannot delete the built-in security group. + + False - AWS OpsWorks does not associate built-in security groups with + layers. You must create appropriate EC2 security groups and + associate a security group with each layer that you create. + However, you can still manually associate a built-in security group + with a layer on creation; custom security groups are required only + for those layers that need custom settings. + + + For more information, see `Create a New Stack`_. + + """ + params = {'StackId': stack_id, } + if name is not None: + params['Name'] = name + if attributes is not None: + params['Attributes'] = attributes + if service_role_arn is not None: + params['ServiceRoleArn'] = service_role_arn + if default_instance_profile_arn is not None: + params['DefaultInstanceProfileArn'] = default_instance_profile_arn + if default_os is not None: + params['DefaultOs'] = default_os + if hostname_theme is not None: + params['HostnameTheme'] = hostname_theme + if default_availability_zone is not None: + params['DefaultAvailabilityZone'] = default_availability_zone + if default_subnet_id is not None: + params['DefaultSubnetId'] = default_subnet_id + if custom_json is not None: + params['CustomJson'] = custom_json + if configuration_manager is not None: + params['ConfigurationManager'] = configuration_manager + if chef_configuration is not None: + params['ChefConfiguration'] = chef_configuration + if use_custom_cookbooks is not None: + params['UseCustomCookbooks'] = use_custom_cookbooks + if custom_cookbooks_source is not None: + params['CustomCookbooksSource'] = custom_cookbooks_source + if default_ssh_key_name is not None: + params['DefaultSshKeyName'] = default_ssh_key_name + if default_root_device_type is not None: + params['DefaultRootDeviceType'] = default_root_device_type + if use_opsworks_security_groups is not None: + params['UseOpsworksSecurityGroups'] = use_opsworks_security_groups + return self.make_request(action='UpdateStack', + body=json.dumps(params)) + + def update_user_profile(self, iam_user_arn, ssh_username=None, + ssh_public_key=None, allow_self_management=None): + """ + Updates a specified user profile. + + **Required Permissions**: To use this action, an IAM user must + have an attached policy that explicitly grants permissions. + For more information on user permissions, see `Managing User + Permissions`_. + + :type iam_user_arn: string + :param iam_user_arn: The user IAM ARN. + + :type ssh_username: string + :param ssh_username: The user's SSH user name. The allowable characters + are [a-z], [A-Z], [0-9], '-', and '_'. If the specified name + includes other punctuation marks, AWS OpsWorks removes them. For + example, `my.name` will be changed to `myname`. If you do not + specify an SSH user name, AWS OpsWorks generates one from the IAM + user name. + + :type ssh_public_key: string + :param ssh_public_key: The user's new SSH public key. + + :type allow_self_management: boolean + :param allow_self_management: Whether users can specify their own SSH + public key through the My Settings page. For more information, see + `Managing User Permissions`_. + + """ + params = {'IamUserArn': iam_user_arn, } + if ssh_username is not None: + params['SshUsername'] = ssh_username + if ssh_public_key is not None: + params['SshPublicKey'] = ssh_public_key + if allow_self_management is not None: + params['AllowSelfManagement'] = allow_self_management + return self.make_request(action='UpdateUserProfile', + body=json.dumps(params)) + + def update_volume(self, volume_id, name=None, mount_point=None): + """ + Updates an Amazon EBS volume's name or mount point. For more + information, see `Resource Management`_. + + **Required Permissions**: To use this action, an IAM user must + have a Manage permissions level for the stack, or an attached + policy that explicitly grants permissions. For more + information on user permissions, see `Managing User + Permissions`_. + + :type volume_id: string + :param volume_id: The volume ID. + + :type name: string + :param name: The new name. + + :type mount_point: string + :param mount_point: The new mount point. + + """ + params = {'VolumeId': volume_id, } + if name is not None: + params['Name'] = name + if mount_point is not None: + params['MountPoint'] = mount_point + return self.make_request(action='UpdateVolume', + 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) +