// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.

// Package opsworks provides a client for AWS OpsWorks.
package opsworks

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws/awsutil"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/private/protocol"
	"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
)

const opAssignInstance = "AssignInstance"

// AssignInstanceRequest generates a "aws/request.Request" representing the
// client's request for the AssignInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AssignInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AssignInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AssignInstanceRequest method.
//    req, resp := client.AssignInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) AssignInstanceRequest(input *AssignInstanceInput) (req *request.Request, output *AssignInstanceOutput) {
	op := &request.Operation{
		Name:       opAssignInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssignInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &AssignInstanceOutput{}
	req.Data = output
	return
}

// AssignInstance API operation for AWS OpsWorks.
//
// Assign a registered instance to a layer.
//
//    * You can assign registered on-premises instances to any layer type.
//
//    * You can assign registered Amazon EC2 instances only to custom layers.
//
//    * You cannot use this action with instances that were created with AWS
//    OpsWorks.
//
// Required Permissions: To use this action, an AWS Identity and Access Management
// (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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation AssignInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) AssignInstance(input *AssignInstanceInput) (*AssignInstanceOutput, error) {
	req, out := c.AssignInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opAssignVolume = "AssignVolume"

// AssignVolumeRequest generates a "aws/request.Request" representing the
// client's request for the AssignVolume operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AssignVolume for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AssignVolume method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AssignVolumeRequest method.
//    req, resp := client.AssignVolumeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) AssignVolumeRequest(input *AssignVolumeInput) (req *request.Request, output *AssignVolumeOutput) {
	op := &request.Operation{
		Name:       opAssignVolume,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssignVolumeInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &AssignVolumeOutput{}
	req.Data = output
	return
}

// AssignVolume API operation for AWS OpsWorks.
//
// 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.
// After you register the volume, you must call UpdateVolume to specify a mount
// point before calling AssignVolume. For more information, see Resource Management
// (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation AssignVolume for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) AssignVolume(input *AssignVolumeInput) (*AssignVolumeOutput, error) {
	req, out := c.AssignVolumeRequest(input)
	err := req.Send()
	return out, err
}

const opAssociateElasticIp = "AssociateElasticIp"

// AssociateElasticIpRequest generates a "aws/request.Request" representing the
// client's request for the AssociateElasticIp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AssociateElasticIp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AssociateElasticIp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AssociateElasticIpRequest method.
//    req, resp := client.AssociateElasticIpRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) AssociateElasticIpRequest(input *AssociateElasticIpInput) (req *request.Request, output *AssociateElasticIpOutput) {
	op := &request.Operation{
		Name:       opAssociateElasticIp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AssociateElasticIpInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &AssociateElasticIpOutput{}
	req.Data = output
	return
}

// AssociateElasticIp API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation AssociateElasticIp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) AssociateElasticIp(input *AssociateElasticIpInput) (*AssociateElasticIpOutput, error) {
	req, out := c.AssociateElasticIpRequest(input)
	err := req.Send()
	return out, err
}

const opAttachElasticLoadBalancer = "AttachElasticLoadBalancer"

// AttachElasticLoadBalancerRequest generates a "aws/request.Request" representing the
// client's request for the AttachElasticLoadBalancer operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See AttachElasticLoadBalancer for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the AttachElasticLoadBalancer method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the AttachElasticLoadBalancerRequest method.
//    req, resp := client.AttachElasticLoadBalancerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) AttachElasticLoadBalancerRequest(input *AttachElasticLoadBalancerInput) (req *request.Request, output *AttachElasticLoadBalancerOutput) {
	op := &request.Operation{
		Name:       opAttachElasticLoadBalancer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &AttachElasticLoadBalancerInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &AttachElasticLoadBalancerOutput{}
	req.Data = output
	return
}

// AttachElasticLoadBalancer API operation for AWS OpsWorks.
//
// Attaches an Elastic Load Balancing load balancer to a specified layer. For
// more information, see Elastic Load Balancing (http://docs.aws.amazon.com/opsworks/latest/userguide/load-balancer-elb.html).
//
// 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 (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/Welcome.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation AttachElasticLoadBalancer for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) AttachElasticLoadBalancer(input *AttachElasticLoadBalancerInput) (*AttachElasticLoadBalancerOutput, error) {
	req, out := c.AttachElasticLoadBalancerRequest(input)
	err := req.Send()
	return out, err
}

const opCloneStack = "CloneStack"

// CloneStackRequest generates a "aws/request.Request" representing the
// client's request for the CloneStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CloneStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CloneStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CloneStackRequest method.
//    req, resp := client.CloneStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CloneStackRequest(input *CloneStackInput) (req *request.Request, output *CloneStackOutput) {
	op := &request.Operation{
		Name:       opCloneStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CloneStackInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CloneStackOutput{}
	req.Data = output
	return
}

// CloneStack API operation for AWS OpsWorks.
//
// Creates a clone of a specified stack. For more information, see Clone a Stack
// (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-cloning.html).
// By default, all parameters are set to the values used by the parent 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CloneStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) CloneStack(input *CloneStackInput) (*CloneStackOutput, error) {
	req, out := c.CloneStackRequest(input)
	err := req.Send()
	return out, err
}

const opCreateApp = "CreateApp"

// CreateAppRequest generates a "aws/request.Request" representing the
// client's request for the CreateApp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateApp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateApp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateAppRequest method.
//    req, resp := client.CreateAppRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateAppRequest(input *CreateAppInput) (req *request.Request, output *CreateAppOutput) {
	op := &request.Operation{
		Name:       opCreateApp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateAppInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateAppOutput{}
	req.Data = output
	return
}

// CreateApp API operation for AWS OpsWorks.
//
// Creates an app for a specified stack. For more information, see Creating
// Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateApp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) CreateApp(input *CreateAppInput) (*CreateAppOutput, error) {
	req, out := c.CreateAppRequest(input)
	err := req.Send()
	return out, err
}

const opCreateDeployment = "CreateDeployment"

// CreateDeploymentRequest generates a "aws/request.Request" representing the
// client's request for the CreateDeployment operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateDeployment for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateDeployment method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateDeploymentRequest method.
//    req, resp := client.CreateDeploymentRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateDeploymentRequest(input *CreateDeploymentInput) (req *request.Request, output *CreateDeploymentOutput) {
	op := &request.Operation{
		Name:       opCreateDeployment,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateDeploymentInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateDeploymentOutput{}
	req.Data = output
	return
}

// CreateDeployment API operation for AWS OpsWorks.
//
// Runs deployment or stack commands. For more information, see Deploying Apps
// (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-deploying.html)
// and Run Stack Commands (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-commands.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateDeployment for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) CreateDeployment(input *CreateDeploymentInput) (*CreateDeploymentOutput, error) {
	req, out := c.CreateDeploymentRequest(input)
	err := req.Send()
	return out, err
}

const opCreateInstance = "CreateInstance"

// CreateInstanceRequest generates a "aws/request.Request" representing the
// client's request for the CreateInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateInstanceRequest method.
//    req, resp := client.CreateInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateInstanceRequest(input *CreateInstanceInput) (req *request.Request, output *CreateInstanceOutput) {
	op := &request.Operation{
		Name:       opCreateInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateInstanceOutput{}
	req.Data = output
	return
}

// CreateInstance API operation for AWS OpsWorks.
//
// Creates an instance in a specified stack. For more information, see Adding
// an Instance to a Layer (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) CreateInstance(input *CreateInstanceInput) (*CreateInstanceOutput, error) {
	req, out := c.CreateInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opCreateLayer = "CreateLayer"

// CreateLayerRequest generates a "aws/request.Request" representing the
// client's request for the CreateLayer operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateLayer for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateLayer method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateLayerRequest method.
//    req, resp := client.CreateLayerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateLayerRequest(input *CreateLayerInput) (req *request.Request, output *CreateLayerOutput) {
	op := &request.Operation{
		Name:       opCreateLayer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateLayerInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateLayerOutput{}
	req.Data = output
	return
}

// CreateLayer API operation for AWS OpsWorks.
//
// Creates a layer. For more information, see How to Create a Layer (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-create.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateLayer for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) CreateLayer(input *CreateLayerInput) (*CreateLayerOutput, error) {
	req, out := c.CreateLayerRequest(input)
	err := req.Send()
	return out, err
}

const opCreateStack = "CreateStack"

// CreateStackRequest generates a "aws/request.Request" representing the
// client's request for the CreateStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateStackRequest method.
//    req, resp := client.CreateStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateStackRequest(input *CreateStackInput) (req *request.Request, output *CreateStackOutput) {
	op := &request.Operation{
		Name:       opCreateStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateStackInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateStackOutput{}
	req.Data = output
	return
}

// CreateStack API operation for AWS OpsWorks.
//
// Creates a new stack. For more information, see Create a New Stack (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-edit.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
func (c *OpsWorks) CreateStack(input *CreateStackInput) (*CreateStackOutput, error) {
	req, out := c.CreateStackRequest(input)
	err := req.Send()
	return out, err
}

const opCreateUserProfile = "CreateUserProfile"

// CreateUserProfileRequest generates a "aws/request.Request" representing the
// client's request for the CreateUserProfile operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See CreateUserProfile for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the CreateUserProfile method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the CreateUserProfileRequest method.
//    req, resp := client.CreateUserProfileRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) CreateUserProfileRequest(input *CreateUserProfileInput) (req *request.Request, output *CreateUserProfileOutput) {
	op := &request.Operation{
		Name:       opCreateUserProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &CreateUserProfileInput{}
	}

	req = c.newRequest(op, input, output)
	output = &CreateUserProfileOutput{}
	req.Data = output
	return
}

// CreateUserProfile API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation CreateUserProfile for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
func (c *OpsWorks) CreateUserProfile(input *CreateUserProfileInput) (*CreateUserProfileOutput, error) {
	req, out := c.CreateUserProfileRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteApp = "DeleteApp"

// DeleteAppRequest generates a "aws/request.Request" representing the
// client's request for the DeleteApp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteApp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteApp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteAppRequest method.
//    req, resp := client.DeleteAppRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeleteAppRequest(input *DeleteAppInput) (req *request.Request, output *DeleteAppOutput) {
	op := &request.Operation{
		Name:       opDeleteApp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteAppInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteAppOutput{}
	req.Data = output
	return
}

// DeleteApp API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeleteApp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeleteApp(input *DeleteAppInput) (*DeleteAppOutput, error) {
	req, out := c.DeleteAppRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteInstance = "DeleteInstance"

// DeleteInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DeleteInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteInstanceRequest method.
//    req, resp := client.DeleteInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeleteInstanceRequest(input *DeleteInstanceInput) (req *request.Request, output *DeleteInstanceOutput) {
	op := &request.Operation{
		Name:       opDeleteInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteInstanceOutput{}
	req.Data = output
	return
}

// DeleteInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-delete.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeleteInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeleteInstance(input *DeleteInstanceInput) (*DeleteInstanceOutput, error) {
	req, out := c.DeleteInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteLayer = "DeleteLayer"

// DeleteLayerRequest generates a "aws/request.Request" representing the
// client's request for the DeleteLayer operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteLayer for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteLayer method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteLayerRequest method.
//    req, resp := client.DeleteLayerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeleteLayerRequest(input *DeleteLayerInput) (req *request.Request, output *DeleteLayerOutput) {
	op := &request.Operation{
		Name:       opDeleteLayer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteLayerInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteLayerOutput{}
	req.Data = output
	return
}

// DeleteLayer API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-delete.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeleteLayer for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeleteLayer(input *DeleteLayerInput) (*DeleteLayerOutput, error) {
	req, out := c.DeleteLayerRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteStack = "DeleteStack"

// DeleteStackRequest generates a "aws/request.Request" representing the
// client's request for the DeleteStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteStackRequest method.
//    req, resp := client.DeleteStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeleteStackRequest(input *DeleteStackInput) (req *request.Request, output *DeleteStackOutput) {
	op := &request.Operation{
		Name:       opDeleteStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteStackInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteStackOutput{}
	req.Data = output
	return
}

// DeleteStack API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-shutting.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeleteStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeleteStack(input *DeleteStackInput) (*DeleteStackOutput, error) {
	req, out := c.DeleteStackRequest(input)
	err := req.Send()
	return out, err
}

const opDeleteUserProfile = "DeleteUserProfile"

// DeleteUserProfileRequest generates a "aws/request.Request" representing the
// client's request for the DeleteUserProfile operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeleteUserProfile for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeleteUserProfile method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeleteUserProfileRequest method.
//    req, resp := client.DeleteUserProfileRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeleteUserProfileRequest(input *DeleteUserProfileInput) (req *request.Request, output *DeleteUserProfileOutput) {
	op := &request.Operation{
		Name:       opDeleteUserProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeleteUserProfileInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeleteUserProfileOutput{}
	req.Data = output
	return
}

// DeleteUserProfile API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeleteUserProfile for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeleteUserProfile(input *DeleteUserProfileInput) (*DeleteUserProfileOutput, error) {
	req, out := c.DeleteUserProfileRequest(input)
	err := req.Send()
	return out, err
}

const opDeregisterEcsCluster = "DeregisterEcsCluster"

// DeregisterEcsClusterRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterEcsCluster operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeregisterEcsCluster for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeregisterEcsCluster method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeregisterEcsClusterRequest method.
//    req, resp := client.DeregisterEcsClusterRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeregisterEcsClusterRequest(input *DeregisterEcsClusterInput) (req *request.Request, output *DeregisterEcsClusterOutput) {
	op := &request.Operation{
		Name:       opDeregisterEcsCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterEcsClusterInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeregisterEcsClusterOutput{}
	req.Data = output
	return
}

// DeregisterEcsCluster API operation for AWS OpsWorks.
//
// Deregisters a specified Amazon ECS cluster from a stack. For more information,
// see  Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-ecscluster.html#workinglayers-ecscluster-delete).
//
// 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 http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html
// (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeregisterEcsCluster for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeregisterEcsCluster(input *DeregisterEcsClusterInput) (*DeregisterEcsClusterOutput, error) {
	req, out := c.DeregisterEcsClusterRequest(input)
	err := req.Send()
	return out, err
}

const opDeregisterElasticIp = "DeregisterElasticIp"

// DeregisterElasticIpRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterElasticIp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeregisterElasticIp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeregisterElasticIp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeregisterElasticIpRequest method.
//    req, resp := client.DeregisterElasticIpRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeregisterElasticIpRequest(input *DeregisterElasticIpInput) (req *request.Request, output *DeregisterElasticIpOutput) {
	op := &request.Operation{
		Name:       opDeregisterElasticIp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterElasticIpInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeregisterElasticIpOutput{}
	req.Data = output
	return
}

// DeregisterElasticIp API operation for AWS OpsWorks.
//
// Deregisters a specified Elastic IP address. The address can then be registered
// by another stack. For more information, see Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeregisterElasticIp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeregisterElasticIp(input *DeregisterElasticIpInput) (*DeregisterElasticIpOutput, error) {
	req, out := c.DeregisterElasticIpRequest(input)
	err := req.Send()
	return out, err
}

const opDeregisterInstance = "DeregisterInstance"

// DeregisterInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeregisterInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeregisterInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeregisterInstanceRequest method.
//    req, resp := client.DeregisterInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeregisterInstanceRequest(input *DeregisterInstanceInput) (req *request.Request, output *DeregisterInstanceOutput) {
	op := &request.Operation{
		Name:       opDeregisterInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeregisterInstanceOutput{}
	req.Data = output
	return
}

// DeregisterInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeregisterInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeregisterInstance(input *DeregisterInstanceInput) (*DeregisterInstanceOutput, error) {
	req, out := c.DeregisterInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opDeregisterRdsDbInstance = "DeregisterRdsDbInstance"

// DeregisterRdsDbInstanceRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterRdsDbInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeregisterRdsDbInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeregisterRdsDbInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeregisterRdsDbInstanceRequest method.
//    req, resp := client.DeregisterRdsDbInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeregisterRdsDbInstanceRequest(input *DeregisterRdsDbInstanceInput) (req *request.Request, output *DeregisterRdsDbInstanceOutput) {
	op := &request.Operation{
		Name:       opDeregisterRdsDbInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterRdsDbInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeregisterRdsDbInstanceOutput{}
	req.Data = output
	return
}

// DeregisterRdsDbInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeregisterRdsDbInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeregisterRdsDbInstance(input *DeregisterRdsDbInstanceInput) (*DeregisterRdsDbInstanceOutput, error) {
	req, out := c.DeregisterRdsDbInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opDeregisterVolume = "DeregisterVolume"

// DeregisterVolumeRequest generates a "aws/request.Request" representing the
// client's request for the DeregisterVolume operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DeregisterVolume for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DeregisterVolume method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DeregisterVolumeRequest method.
//    req, resp := client.DeregisterVolumeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DeregisterVolumeRequest(input *DeregisterVolumeInput) (req *request.Request, output *DeregisterVolumeOutput) {
	op := &request.Operation{
		Name:       opDeregisterVolume,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DeregisterVolumeInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DeregisterVolumeOutput{}
	req.Data = output
	return
}

// DeregisterVolume API operation for AWS OpsWorks.
//
// Deregisters an Amazon EBS volume. The volume can then be registered by another
// stack. For more information, see Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DeregisterVolume for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DeregisterVolume(input *DeregisterVolumeInput) (*DeregisterVolumeOutput, error) {
	req, out := c.DeregisterVolumeRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeAgentVersions = "DescribeAgentVersions"

// DescribeAgentVersionsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeAgentVersions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeAgentVersions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeAgentVersions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeAgentVersionsRequest method.
//    req, resp := client.DescribeAgentVersionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeAgentVersionsRequest(input *DescribeAgentVersionsInput) (req *request.Request, output *DescribeAgentVersionsOutput) {
	op := &request.Operation{
		Name:       opDescribeAgentVersions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAgentVersionsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeAgentVersionsOutput{}
	req.Data = output
	return
}

// DescribeAgentVersions API operation for AWS OpsWorks.
//
// Describes the available AWS OpsWorks agent versions. You must specify a stack
// ID or a configuration manager. DescribeAgentVersions returns a list of available
// agent versions for the specified stack or configuration manager.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeAgentVersions for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeAgentVersions(input *DescribeAgentVersionsInput) (*DescribeAgentVersionsOutput, error) {
	req, out := c.DescribeAgentVersionsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeApps = "DescribeApps"

// DescribeAppsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeApps operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeApps for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeApps method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeAppsRequest method.
//    req, resp := client.DescribeAppsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeAppsRequest(input *DescribeAppsInput) (req *request.Request, output *DescribeAppsOutput) {
	op := &request.Operation{
		Name:       opDescribeApps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeAppsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeAppsOutput{}
	req.Data = output
	return
}

// DescribeApps API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeApps for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeApps(input *DescribeAppsInput) (*DescribeAppsOutput, error) {
	req, out := c.DescribeAppsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeCommands = "DescribeCommands"

// DescribeCommandsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeCommands operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeCommands for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeCommands method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeCommandsRequest method.
//    req, resp := client.DescribeCommandsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeCommandsRequest(input *DescribeCommandsInput) (req *request.Request, output *DescribeCommandsOutput) {
	op := &request.Operation{
		Name:       opDescribeCommands,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeCommandsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeCommandsOutput{}
	req.Data = output
	return
}

// DescribeCommands API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeCommands for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeCommands(input *DescribeCommandsInput) (*DescribeCommandsOutput, error) {
	req, out := c.DescribeCommandsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeDeployments = "DescribeDeployments"

// DescribeDeploymentsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeDeployments operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeDeployments for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeDeployments method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeDeploymentsRequest method.
//    req, resp := client.DescribeDeploymentsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeDeploymentsRequest(input *DescribeDeploymentsInput) (req *request.Request, output *DescribeDeploymentsOutput) {
	op := &request.Operation{
		Name:       opDescribeDeployments,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeDeploymentsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeDeploymentsOutput{}
	req.Data = output
	return
}

// DescribeDeployments API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeDeployments for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeDeployments(input *DescribeDeploymentsInput) (*DescribeDeploymentsOutput, error) {
	req, out := c.DescribeDeploymentsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeEcsClusters = "DescribeEcsClusters"

// DescribeEcsClustersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeEcsClusters operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeEcsClusters for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeEcsClusters method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeEcsClustersRequest method.
//    req, resp := client.DescribeEcsClustersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeEcsClustersRequest(input *DescribeEcsClustersInput) (req *request.Request, output *DescribeEcsClustersOutput) {
	op := &request.Operation{
		Name:       opDescribeEcsClusters,
		HTTPMethod: "POST",
		HTTPPath:   "/",
		Paginator: &request.Paginator{
			InputTokens:     []string{"NextToken"},
			OutputTokens:    []string{"NextToken"},
			LimitToken:      "MaxResults",
			TruncationToken: "",
		},
	}

	if input == nil {
		input = &DescribeEcsClustersInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeEcsClustersOutput{}
	req.Data = output
	return
}

// DescribeEcsClusters API operation for AWS OpsWorks.
//
// Describes Amazon ECS clusters that are registered with a stack. If you specify
// only a stack ID, you can use the MaxResults and NextToken parameters to paginate
// the response. However, AWS OpsWorks currently supports only one cluster per
// layer, so the result set has a maximum of one element.
//
// 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 permission. For more information on user permissions, see Managing
// User Permissions (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeEcsClusters for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeEcsClusters(input *DescribeEcsClustersInput) (*DescribeEcsClustersOutput, error) {
	req, out := c.DescribeEcsClustersRequest(input)
	err := req.Send()
	return out, err
}

// DescribeEcsClustersPages iterates over the pages of a DescribeEcsClusters operation,
// calling the "fn" function with the response data for each page. To stop
// iterating, return false from the fn function.
//
// See DescribeEcsClusters method for more information on how to use this operation.
//
// Note: This operation can generate multiple requests to a service.
//
//    // Example iterating over at most 3 pages of a DescribeEcsClusters operation.
//    pageNum := 0
//    err := client.DescribeEcsClustersPages(params,
//        func(page *DescribeEcsClustersOutput, lastPage bool) bool {
//            pageNum++
//            fmt.Println(page)
//            return pageNum <= 3
//        })
//
func (c *OpsWorks) DescribeEcsClustersPages(input *DescribeEcsClustersInput, fn func(p *DescribeEcsClustersOutput, lastPage bool) (shouldContinue bool)) error {
	page, _ := c.DescribeEcsClustersRequest(input)
	page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator"))
	return page.EachPage(func(p interface{}, lastPage bool) bool {
		return fn(p.(*DescribeEcsClustersOutput), lastPage)
	})
}

const opDescribeElasticIps = "DescribeElasticIps"

// DescribeElasticIpsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeElasticIps operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeElasticIps for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeElasticIps method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeElasticIpsRequest method.
//    req, resp := client.DescribeElasticIpsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeElasticIpsRequest(input *DescribeElasticIpsInput) (req *request.Request, output *DescribeElasticIpsOutput) {
	op := &request.Operation{
		Name:       opDescribeElasticIps,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeElasticIpsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeElasticIpsOutput{}
	req.Data = output
	return
}

// DescribeElasticIps API operation for AWS OpsWorks.
//
// Describes Elastic IP addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeElasticIps for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeElasticIps(input *DescribeElasticIpsInput) (*DescribeElasticIpsOutput, error) {
	req, out := c.DescribeElasticIpsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeElasticLoadBalancers = "DescribeElasticLoadBalancers"

// DescribeElasticLoadBalancersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeElasticLoadBalancers operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeElasticLoadBalancers for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeElasticLoadBalancers method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeElasticLoadBalancersRequest method.
//    req, resp := client.DescribeElasticLoadBalancersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeElasticLoadBalancersRequest(input *DescribeElasticLoadBalancersInput) (req *request.Request, output *DescribeElasticLoadBalancersOutput) {
	op := &request.Operation{
		Name:       opDescribeElasticLoadBalancers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeElasticLoadBalancersInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeElasticLoadBalancersOutput{}
	req.Data = output
	return
}

// DescribeElasticLoadBalancers API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeElasticLoadBalancers for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeElasticLoadBalancers(input *DescribeElasticLoadBalancersInput) (*DescribeElasticLoadBalancersOutput, error) {
	req, out := c.DescribeElasticLoadBalancersRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeInstances = "DescribeInstances"

// DescribeInstancesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeInstances operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeInstances for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeInstances method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeInstancesRequest method.
//    req, resp := client.DescribeInstancesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeInstancesRequest(input *DescribeInstancesInput) (req *request.Request, output *DescribeInstancesOutput) {
	op := &request.Operation{
		Name:       opDescribeInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeInstancesInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeInstancesOutput{}
	req.Data = output
	return
}

// DescribeInstances API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeInstances for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeInstances(input *DescribeInstancesInput) (*DescribeInstancesOutput, error) {
	req, out := c.DescribeInstancesRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeLayers = "DescribeLayers"

// DescribeLayersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeLayers operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeLayers for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeLayers method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeLayersRequest method.
//    req, resp := client.DescribeLayersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeLayersRequest(input *DescribeLayersInput) (req *request.Request, output *DescribeLayersOutput) {
	op := &request.Operation{
		Name:       opDescribeLayers,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeLayersInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeLayersOutput{}
	req.Data = output
	return
}

// DescribeLayers API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeLayers for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeLayers(input *DescribeLayersInput) (*DescribeLayersOutput, error) {
	req, out := c.DescribeLayersRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeLoadBasedAutoScaling = "DescribeLoadBasedAutoScaling"

// DescribeLoadBasedAutoScalingRequest generates a "aws/request.Request" representing the
// client's request for the DescribeLoadBasedAutoScaling operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeLoadBasedAutoScaling for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeLoadBasedAutoScaling method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeLoadBasedAutoScalingRequest method.
//    req, resp := client.DescribeLoadBasedAutoScalingRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeLoadBasedAutoScalingRequest(input *DescribeLoadBasedAutoScalingInput) (req *request.Request, output *DescribeLoadBasedAutoScalingOutput) {
	op := &request.Operation{
		Name:       opDescribeLoadBasedAutoScaling,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeLoadBasedAutoScalingInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeLoadBasedAutoScalingOutput{}
	req.Data = output
	return
}

// DescribeLoadBasedAutoScaling API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeLoadBasedAutoScaling for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeLoadBasedAutoScaling(input *DescribeLoadBasedAutoScalingInput) (*DescribeLoadBasedAutoScalingOutput, error) {
	req, out := c.DescribeLoadBasedAutoScalingRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeMyUserProfile = "DescribeMyUserProfile"

// DescribeMyUserProfileRequest generates a "aws/request.Request" representing the
// client's request for the DescribeMyUserProfile operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeMyUserProfile for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeMyUserProfile method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeMyUserProfileRequest method.
//    req, resp := client.DescribeMyUserProfileRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeMyUserProfileRequest(input *DescribeMyUserProfileInput) (req *request.Request, output *DescribeMyUserProfileOutput) {
	op := &request.Operation{
		Name:       opDescribeMyUserProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeMyUserProfileInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeMyUserProfileOutput{}
	req.Data = output
	return
}

// DescribeMyUserProfile API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeMyUserProfile for usage and error information.
func (c *OpsWorks) DescribeMyUserProfile(input *DescribeMyUserProfileInput) (*DescribeMyUserProfileOutput, error) {
	req, out := c.DescribeMyUserProfileRequest(input)
	err := req.Send()
	return out, err
}

const opDescribePermissions = "DescribePermissions"

// DescribePermissionsRequest generates a "aws/request.Request" representing the
// client's request for the DescribePermissions operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribePermissions for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribePermissions method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribePermissionsRequest method.
//    req, resp := client.DescribePermissionsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribePermissionsRequest(input *DescribePermissionsInput) (req *request.Request, output *DescribePermissionsOutput) {
	op := &request.Operation{
		Name:       opDescribePermissions,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribePermissionsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribePermissionsOutput{}
	req.Data = output
	return
}

// DescribePermissions API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribePermissions for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribePermissions(input *DescribePermissionsInput) (*DescribePermissionsOutput, error) {
	req, out := c.DescribePermissionsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeRaidArrays = "DescribeRaidArrays"

// DescribeRaidArraysRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRaidArrays operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeRaidArrays for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeRaidArrays method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeRaidArraysRequest method.
//    req, resp := client.DescribeRaidArraysRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeRaidArraysRequest(input *DescribeRaidArraysInput) (req *request.Request, output *DescribeRaidArraysOutput) {
	op := &request.Operation{
		Name:       opDescribeRaidArrays,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeRaidArraysInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeRaidArraysOutput{}
	req.Data = output
	return
}

// DescribeRaidArrays API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeRaidArrays for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeRaidArrays(input *DescribeRaidArraysInput) (*DescribeRaidArraysOutput, error) {
	req, out := c.DescribeRaidArraysRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeRdsDbInstances = "DescribeRdsDbInstances"

// DescribeRdsDbInstancesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeRdsDbInstances operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeRdsDbInstances for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeRdsDbInstances method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeRdsDbInstancesRequest method.
//    req, resp := client.DescribeRdsDbInstancesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeRdsDbInstancesRequest(input *DescribeRdsDbInstancesInput) (req *request.Request, output *DescribeRdsDbInstancesOutput) {
	op := &request.Operation{
		Name:       opDescribeRdsDbInstances,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeRdsDbInstancesInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeRdsDbInstancesOutput{}
	req.Data = output
	return
}

// DescribeRdsDbInstances API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeRdsDbInstances for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeRdsDbInstances(input *DescribeRdsDbInstancesInput) (*DescribeRdsDbInstancesOutput, error) {
	req, out := c.DescribeRdsDbInstancesRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeServiceErrors = "DescribeServiceErrors"

// DescribeServiceErrorsRequest generates a "aws/request.Request" representing the
// client's request for the DescribeServiceErrors operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeServiceErrors for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeServiceErrors method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeServiceErrorsRequest method.
//    req, resp := client.DescribeServiceErrorsRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeServiceErrorsRequest(input *DescribeServiceErrorsInput) (req *request.Request, output *DescribeServiceErrorsOutput) {
	op := &request.Operation{
		Name:       opDescribeServiceErrors,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeServiceErrorsInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeServiceErrorsOutput{}
	req.Data = output
	return
}

// DescribeServiceErrors API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeServiceErrors for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeServiceErrors(input *DescribeServiceErrorsInput) (*DescribeServiceErrorsOutput, error) {
	req, out := c.DescribeServiceErrorsRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeStackProvisioningParameters = "DescribeStackProvisioningParameters"

// DescribeStackProvisioningParametersRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStackProvisioningParameters operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeStackProvisioningParameters for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeStackProvisioningParameters method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeStackProvisioningParametersRequest method.
//    req, resp := client.DescribeStackProvisioningParametersRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeStackProvisioningParametersRequest(input *DescribeStackProvisioningParametersInput) (req *request.Request, output *DescribeStackProvisioningParametersOutput) {
	op := &request.Operation{
		Name:       opDescribeStackProvisioningParameters,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeStackProvisioningParametersInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeStackProvisioningParametersOutput{}
	req.Data = output
	return
}

// DescribeStackProvisioningParameters API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeStackProvisioningParameters for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeStackProvisioningParameters(input *DescribeStackProvisioningParametersInput) (*DescribeStackProvisioningParametersOutput, error) {
	req, out := c.DescribeStackProvisioningParametersRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeStackSummary = "DescribeStackSummary"

// DescribeStackSummaryRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStackSummary operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeStackSummary for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeStackSummary method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeStackSummaryRequest method.
//    req, resp := client.DescribeStackSummaryRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeStackSummaryRequest(input *DescribeStackSummaryInput) (req *request.Request, output *DescribeStackSummaryOutput) {
	op := &request.Operation{
		Name:       opDescribeStackSummary,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeStackSummaryInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeStackSummaryOutput{}
	req.Data = output
	return
}

// DescribeStackSummary API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeStackSummary for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeStackSummary(input *DescribeStackSummaryInput) (*DescribeStackSummaryOutput, error) {
	req, out := c.DescribeStackSummaryRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeStacks = "DescribeStacks"

// DescribeStacksRequest generates a "aws/request.Request" representing the
// client's request for the DescribeStacks operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeStacks for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeStacks method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeStacksRequest method.
//    req, resp := client.DescribeStacksRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeStacksRequest(input *DescribeStacksInput) (req *request.Request, output *DescribeStacksOutput) {
	op := &request.Operation{
		Name:       opDescribeStacks,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeStacksInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeStacksOutput{}
	req.Data = output
	return
}

// DescribeStacks API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeStacks for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeStacks(input *DescribeStacksInput) (*DescribeStacksOutput, error) {
	req, out := c.DescribeStacksRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeTimeBasedAutoScaling = "DescribeTimeBasedAutoScaling"

// DescribeTimeBasedAutoScalingRequest generates a "aws/request.Request" representing the
// client's request for the DescribeTimeBasedAutoScaling operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeTimeBasedAutoScaling for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeTimeBasedAutoScaling method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeTimeBasedAutoScalingRequest method.
//    req, resp := client.DescribeTimeBasedAutoScalingRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeTimeBasedAutoScalingRequest(input *DescribeTimeBasedAutoScalingInput) (req *request.Request, output *DescribeTimeBasedAutoScalingOutput) {
	op := &request.Operation{
		Name:       opDescribeTimeBasedAutoScaling,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeTimeBasedAutoScalingInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeTimeBasedAutoScalingOutput{}
	req.Data = output
	return
}

// DescribeTimeBasedAutoScaling API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeTimeBasedAutoScaling for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeTimeBasedAutoScaling(input *DescribeTimeBasedAutoScalingInput) (*DescribeTimeBasedAutoScalingOutput, error) {
	req, out := c.DescribeTimeBasedAutoScalingRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeUserProfiles = "DescribeUserProfiles"

// DescribeUserProfilesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeUserProfiles operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeUserProfiles for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeUserProfiles method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeUserProfilesRequest method.
//    req, resp := client.DescribeUserProfilesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeUserProfilesRequest(input *DescribeUserProfilesInput) (req *request.Request, output *DescribeUserProfilesOutput) {
	op := &request.Operation{
		Name:       opDescribeUserProfiles,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeUserProfilesInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeUserProfilesOutput{}
	req.Data = output
	return
}

// DescribeUserProfiles API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeUserProfiles for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeUserProfiles(input *DescribeUserProfilesInput) (*DescribeUserProfilesOutput, error) {
	req, out := c.DescribeUserProfilesRequest(input)
	err := req.Send()
	return out, err
}

const opDescribeVolumes = "DescribeVolumes"

// DescribeVolumesRequest generates a "aws/request.Request" representing the
// client's request for the DescribeVolumes operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DescribeVolumes for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DescribeVolumes method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DescribeVolumesRequest method.
//    req, resp := client.DescribeVolumesRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DescribeVolumesRequest(input *DescribeVolumesInput) (req *request.Request, output *DescribeVolumesOutput) {
	op := &request.Operation{
		Name:       opDescribeVolumes,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DescribeVolumesInput{}
	}

	req = c.newRequest(op, input, output)
	output = &DescribeVolumesOutput{}
	req.Data = output
	return
}

// DescribeVolumes API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DescribeVolumes for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DescribeVolumes(input *DescribeVolumesInput) (*DescribeVolumesOutput, error) {
	req, out := c.DescribeVolumesRequest(input)
	err := req.Send()
	return out, err
}

const opDetachElasticLoadBalancer = "DetachElasticLoadBalancer"

// DetachElasticLoadBalancerRequest generates a "aws/request.Request" representing the
// client's request for the DetachElasticLoadBalancer operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DetachElasticLoadBalancer for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DetachElasticLoadBalancer method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DetachElasticLoadBalancerRequest method.
//    req, resp := client.DetachElasticLoadBalancerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DetachElasticLoadBalancerRequest(input *DetachElasticLoadBalancerInput) (req *request.Request, output *DetachElasticLoadBalancerOutput) {
	op := &request.Operation{
		Name:       opDetachElasticLoadBalancer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DetachElasticLoadBalancerInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DetachElasticLoadBalancerOutput{}
	req.Data = output
	return
}

// DetachElasticLoadBalancer API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DetachElasticLoadBalancer for usage and error information.
//
// Returned Error Codes:
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DetachElasticLoadBalancer(input *DetachElasticLoadBalancerInput) (*DetachElasticLoadBalancerOutput, error) {
	req, out := c.DetachElasticLoadBalancerRequest(input)
	err := req.Send()
	return out, err
}

const opDisassociateElasticIp = "DisassociateElasticIp"

// DisassociateElasticIpRequest generates a "aws/request.Request" representing the
// client's request for the DisassociateElasticIp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See DisassociateElasticIp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the DisassociateElasticIp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the DisassociateElasticIpRequest method.
//    req, resp := client.DisassociateElasticIpRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) DisassociateElasticIpRequest(input *DisassociateElasticIpInput) (req *request.Request, output *DisassociateElasticIpOutput) {
	op := &request.Operation{
		Name:       opDisassociateElasticIp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &DisassociateElasticIpInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &DisassociateElasticIpOutput{}
	req.Data = output
	return
}

// DisassociateElasticIp API operation for AWS OpsWorks.
//
// Disassociates an Elastic IP address from its instance. The address remains
// registered with the stack. For more information, see Resource Management
// (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation DisassociateElasticIp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) DisassociateElasticIp(input *DisassociateElasticIpInput) (*DisassociateElasticIpOutput, error) {
	req, out := c.DisassociateElasticIpRequest(input)
	err := req.Send()
	return out, err
}

const opGetHostnameSuggestion = "GetHostnameSuggestion"

// GetHostnameSuggestionRequest generates a "aws/request.Request" representing the
// client's request for the GetHostnameSuggestion operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GetHostnameSuggestion for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GetHostnameSuggestion method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GetHostnameSuggestionRequest method.
//    req, resp := client.GetHostnameSuggestionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) GetHostnameSuggestionRequest(input *GetHostnameSuggestionInput) (req *request.Request, output *GetHostnameSuggestionOutput) {
	op := &request.Operation{
		Name:       opGetHostnameSuggestion,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GetHostnameSuggestionInput{}
	}

	req = c.newRequest(op, input, output)
	output = &GetHostnameSuggestionOutput{}
	req.Data = output
	return
}

// GetHostnameSuggestion API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation GetHostnameSuggestion for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) GetHostnameSuggestion(input *GetHostnameSuggestionInput) (*GetHostnameSuggestionOutput, error) {
	req, out := c.GetHostnameSuggestionRequest(input)
	err := req.Send()
	return out, err
}

const opGrantAccess = "GrantAccess"

// GrantAccessRequest generates a "aws/request.Request" representing the
// client's request for the GrantAccess operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See GrantAccess for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the GrantAccess method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the GrantAccessRequest method.
//    req, resp := client.GrantAccessRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) GrantAccessRequest(input *GrantAccessInput) (req *request.Request, output *GrantAccessOutput) {
	op := &request.Operation{
		Name:       opGrantAccess,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &GrantAccessInput{}
	}

	req = c.newRequest(op, input, output)
	output = &GrantAccessOutput{}
	req.Data = output
	return
}

// GrantAccess API operation for AWS OpsWorks.
//
// This action can be used only with Windows stacks.
//
// Grants RDP access to a Windows instance for a specified time period.
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation GrantAccess for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) GrantAccess(input *GrantAccessInput) (*GrantAccessOutput, error) {
	req, out := c.GrantAccessRequest(input)
	err := req.Send()
	return out, err
}

const opRebootInstance = "RebootInstance"

// RebootInstanceRequest generates a "aws/request.Request" representing the
// client's request for the RebootInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RebootInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RebootInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RebootInstanceRequest method.
//    req, resp := client.RebootInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RebootInstanceRequest(input *RebootInstanceInput) (req *request.Request, output *RebootInstanceOutput) {
	op := &request.Operation{
		Name:       opRebootInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RebootInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &RebootInstanceOutput{}
	req.Data = output
	return
}

// RebootInstance API operation for AWS OpsWorks.
//
// Reboots a specified instance. For more information, see Starting, Stopping,
// and Rebooting Instances (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RebootInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RebootInstance(input *RebootInstanceInput) (*RebootInstanceOutput, error) {
	req, out := c.RebootInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterEcsCluster = "RegisterEcsCluster"

// RegisterEcsClusterRequest generates a "aws/request.Request" representing the
// client's request for the RegisterEcsCluster operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RegisterEcsCluster for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterEcsCluster method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterEcsClusterRequest method.
//    req, resp := client.RegisterEcsClusterRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RegisterEcsClusterRequest(input *RegisterEcsClusterInput) (req *request.Request, output *RegisterEcsClusterOutput) {
	op := &request.Operation{
		Name:       opRegisterEcsCluster,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterEcsClusterInput{}
	}

	req = c.newRequest(op, input, output)
	output = &RegisterEcsClusterOutput{}
	req.Data = output
	return
}

// RegisterEcsCluster API operation for AWS OpsWorks.
//
// Registers a specified Amazon ECS cluster with a stack. You can register only
// one cluster with a stack. A cluster can be registered with only one stack.
// For more information, see  Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-ecscluster.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RegisterEcsCluster for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RegisterEcsCluster(input *RegisterEcsClusterInput) (*RegisterEcsClusterOutput, error) {
	req, out := c.RegisterEcsClusterRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterElasticIp = "RegisterElasticIp"

// RegisterElasticIpRequest generates a "aws/request.Request" representing the
// client's request for the RegisterElasticIp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RegisterElasticIp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterElasticIp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterElasticIpRequest method.
//    req, resp := client.RegisterElasticIpRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RegisterElasticIpRequest(input *RegisterElasticIpInput) (req *request.Request, output *RegisterElasticIpOutput) {
	op := &request.Operation{
		Name:       opRegisterElasticIp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterElasticIpInput{}
	}

	req = c.newRequest(op, input, output)
	output = &RegisterElasticIpOutput{}
	req.Data = output
	return
}

// RegisterElasticIp API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RegisterElasticIp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RegisterElasticIp(input *RegisterElasticIpInput) (*RegisterElasticIpOutput, error) {
	req, out := c.RegisterElasticIpRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterInstance = "RegisterInstance"

// RegisterInstanceRequest generates a "aws/request.Request" representing the
// client's request for the RegisterInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RegisterInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterInstanceRequest method.
//    req, resp := client.RegisterInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RegisterInstanceRequest(input *RegisterInstanceInput) (req *request.Request, output *RegisterInstanceOutput) {
	op := &request.Operation{
		Name:       opRegisterInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	output = &RegisterInstanceOutput{}
	req.Data = output
	return
}

// RegisterInstance API operation for AWS OpsWorks.
//
// 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. For more information,
// see  Registering an Instance with an AWS OpsWorks Stack (http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-register.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RegisterInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RegisterInstance(input *RegisterInstanceInput) (*RegisterInstanceOutput, error) {
	req, out := c.RegisterInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterRdsDbInstance = "RegisterRdsDbInstance"

// RegisterRdsDbInstanceRequest generates a "aws/request.Request" representing the
// client's request for the RegisterRdsDbInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RegisterRdsDbInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterRdsDbInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterRdsDbInstanceRequest method.
//    req, resp := client.RegisterRdsDbInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RegisterRdsDbInstanceRequest(input *RegisterRdsDbInstanceInput) (req *request.Request, output *RegisterRdsDbInstanceOutput) {
	op := &request.Operation{
		Name:       opRegisterRdsDbInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterRdsDbInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &RegisterRdsDbInstanceOutput{}
	req.Data = output
	return
}

// RegisterRdsDbInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RegisterRdsDbInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RegisterRdsDbInstance(input *RegisterRdsDbInstanceInput) (*RegisterRdsDbInstanceOutput, error) {
	req, out := c.RegisterRdsDbInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opRegisterVolume = "RegisterVolume"

// RegisterVolumeRequest generates a "aws/request.Request" representing the
// client's request for the RegisterVolume operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See RegisterVolume for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the RegisterVolume method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the RegisterVolumeRequest method.
//    req, resp := client.RegisterVolumeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) RegisterVolumeRequest(input *RegisterVolumeInput) (req *request.Request, output *RegisterVolumeOutput) {
	op := &request.Operation{
		Name:       opRegisterVolume,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &RegisterVolumeInput{}
	}

	req = c.newRequest(op, input, output)
	output = &RegisterVolumeOutput{}
	req.Data = output
	return
}

// RegisterVolume API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation RegisterVolume for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) RegisterVolume(input *RegisterVolumeInput) (*RegisterVolumeOutput, error) {
	req, out := c.RegisterVolumeRequest(input)
	err := req.Send()
	return out, err
}

const opSetLoadBasedAutoScaling = "SetLoadBasedAutoScaling"

// SetLoadBasedAutoScalingRequest generates a "aws/request.Request" representing the
// client's request for the SetLoadBasedAutoScaling operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See SetLoadBasedAutoScaling for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the SetLoadBasedAutoScaling method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the SetLoadBasedAutoScalingRequest method.
//    req, resp := client.SetLoadBasedAutoScalingRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) SetLoadBasedAutoScalingRequest(input *SetLoadBasedAutoScalingInput) (req *request.Request, output *SetLoadBasedAutoScalingOutput) {
	op := &request.Operation{
		Name:       opSetLoadBasedAutoScaling,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetLoadBasedAutoScalingInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &SetLoadBasedAutoScalingOutput{}
	req.Data = output
	return
}

// SetLoadBasedAutoScaling API operation for AWS OpsWorks.
//
// Specify the load-based auto scaling configuration for a specified layer.
// For more information, see Managing Load with Time-based and Load-based Instances
// (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation SetLoadBasedAutoScaling for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) SetLoadBasedAutoScaling(input *SetLoadBasedAutoScalingInput) (*SetLoadBasedAutoScalingOutput, error) {
	req, out := c.SetLoadBasedAutoScalingRequest(input)
	err := req.Send()
	return out, err
}

const opSetPermission = "SetPermission"

// SetPermissionRequest generates a "aws/request.Request" representing the
// client's request for the SetPermission operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See SetPermission for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the SetPermission method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the SetPermissionRequest method.
//    req, resp := client.SetPermissionRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) SetPermissionRequest(input *SetPermissionInput) (req *request.Request, output *SetPermissionOutput) {
	op := &request.Operation{
		Name:       opSetPermission,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetPermissionInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &SetPermissionOutput{}
	req.Data = output
	return
}

// SetPermission API operation for AWS OpsWorks.
//
// Specifies a user's permissions. For more information, see Security and Permissions
// (http://docs.aws.amazon.com/opsworks/latest/userguide/workingsecurity.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation SetPermission for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) SetPermission(input *SetPermissionInput) (*SetPermissionOutput, error) {
	req, out := c.SetPermissionRequest(input)
	err := req.Send()
	return out, err
}

const opSetTimeBasedAutoScaling = "SetTimeBasedAutoScaling"

// SetTimeBasedAutoScalingRequest generates a "aws/request.Request" representing the
// client's request for the SetTimeBasedAutoScaling operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See SetTimeBasedAutoScaling for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the SetTimeBasedAutoScaling method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the SetTimeBasedAutoScalingRequest method.
//    req, resp := client.SetTimeBasedAutoScalingRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) SetTimeBasedAutoScalingRequest(input *SetTimeBasedAutoScalingInput) (req *request.Request, output *SetTimeBasedAutoScalingOutput) {
	op := &request.Operation{
		Name:       opSetTimeBasedAutoScaling,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &SetTimeBasedAutoScalingInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &SetTimeBasedAutoScalingOutput{}
	req.Data = output
	return
}

// SetTimeBasedAutoScaling API operation for AWS OpsWorks.
//
// Specify the time-based auto scaling configuration for a specified instance.
// For more information, see Managing Load with Time-based and Load-based Instances
// (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation SetTimeBasedAutoScaling for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) SetTimeBasedAutoScaling(input *SetTimeBasedAutoScalingInput) (*SetTimeBasedAutoScalingOutput, error) {
	req, out := c.SetTimeBasedAutoScalingRequest(input)
	err := req.Send()
	return out, err
}

const opStartInstance = "StartInstance"

// StartInstanceRequest generates a "aws/request.Request" representing the
// client's request for the StartInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See StartInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StartInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StartInstanceRequest method.
//    req, resp := client.StartInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) StartInstanceRequest(input *StartInstanceInput) (req *request.Request, output *StartInstanceOutput) {
	op := &request.Operation{
		Name:       opStartInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StartInstanceOutput{}
	req.Data = output
	return
}

// StartInstance API operation for AWS OpsWorks.
//
// Starts a specified instance. For more information, see Starting, Stopping,
// and Rebooting Instances (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation StartInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) StartInstance(input *StartInstanceInput) (*StartInstanceOutput, error) {
	req, out := c.StartInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opStartStack = "StartStack"

// StartStackRequest generates a "aws/request.Request" representing the
// client's request for the StartStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See StartStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StartStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StartStackRequest method.
//    req, resp := client.StartStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) StartStackRequest(input *StartStackInput) (req *request.Request, output *StartStackOutput) {
	op := &request.Operation{
		Name:       opStartStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StartStackInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StartStackOutput{}
	req.Data = output
	return
}

// StartStack API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation StartStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) StartStack(input *StartStackInput) (*StartStackOutput, error) {
	req, out := c.StartStackRequest(input)
	err := req.Send()
	return out, err
}

const opStopInstance = "StopInstance"

// StopInstanceRequest generates a "aws/request.Request" representing the
// client's request for the StopInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See StopInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StopInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StopInstanceRequest method.
//    req, resp := client.StopInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) StopInstanceRequest(input *StopInstanceInput) (req *request.Request, output *StopInstanceOutput) {
	op := &request.Operation{
		Name:       opStopInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StopInstanceOutput{}
	req.Data = output
	return
}

// StopInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation StopInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) StopInstance(input *StopInstanceInput) (*StopInstanceOutput, error) {
	req, out := c.StopInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opStopStack = "StopStack"

// StopStackRequest generates a "aws/request.Request" representing the
// client's request for the StopStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See StopStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the StopStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the StopStackRequest method.
//    req, resp := client.StopStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) StopStackRequest(input *StopStackInput) (req *request.Request, output *StopStackOutput) {
	op := &request.Operation{
		Name:       opStopStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &StopStackInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &StopStackOutput{}
	req.Data = output
	return
}

// StopStack API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation StopStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) StopStack(input *StopStackInput) (*StopStackOutput, error) {
	req, out := c.StopStackRequest(input)
	err := req.Send()
	return out, err
}

const opUnassignInstance = "UnassignInstance"

// UnassignInstanceRequest generates a "aws/request.Request" representing the
// client's request for the UnassignInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UnassignInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UnassignInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UnassignInstanceRequest method.
//    req, resp := client.UnassignInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UnassignInstanceRequest(input *UnassignInstanceInput) (req *request.Request, output *UnassignInstanceOutput) {
	op := &request.Operation{
		Name:       opUnassignInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UnassignInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UnassignInstanceOutput{}
	req.Data = output
	return
}

// UnassignInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UnassignInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UnassignInstance(input *UnassignInstanceInput) (*UnassignInstanceOutput, error) {
	req, out := c.UnassignInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opUnassignVolume = "UnassignVolume"

// UnassignVolumeRequest generates a "aws/request.Request" representing the
// client's request for the UnassignVolume operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UnassignVolume for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UnassignVolume method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UnassignVolumeRequest method.
//    req, resp := client.UnassignVolumeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UnassignVolumeRequest(input *UnassignVolumeInput) (req *request.Request, output *UnassignVolumeOutput) {
	op := &request.Operation{
		Name:       opUnassignVolume,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UnassignVolumeInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UnassignVolumeOutput{}
	req.Data = output
	return
}

// UnassignVolume API operation for AWS OpsWorks.
//
// Unassigns an assigned Amazon EBS volume. The volume remains registered with
// the stack. For more information, see Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UnassignVolume for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UnassignVolume(input *UnassignVolumeInput) (*UnassignVolumeOutput, error) {
	req, out := c.UnassignVolumeRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateApp = "UpdateApp"

// UpdateAppRequest generates a "aws/request.Request" representing the
// client's request for the UpdateApp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateApp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateApp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateAppRequest method.
//    req, resp := client.UpdateAppRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateAppRequest(input *UpdateAppInput) (req *request.Request, output *UpdateAppOutput) {
	op := &request.Operation{
		Name:       opUpdateApp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateAppInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateAppOutput{}
	req.Data = output
	return
}

// UpdateApp API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateApp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateApp(input *UpdateAppInput) (*UpdateAppOutput, error) {
	req, out := c.UpdateAppRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateElasticIp = "UpdateElasticIp"

// UpdateElasticIpRequest generates a "aws/request.Request" representing the
// client's request for the UpdateElasticIp operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateElasticIp for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateElasticIp method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateElasticIpRequest method.
//    req, resp := client.UpdateElasticIpRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateElasticIpRequest(input *UpdateElasticIpInput) (req *request.Request, output *UpdateElasticIpOutput) {
	op := &request.Operation{
		Name:       opUpdateElasticIp,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateElasticIpInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateElasticIpOutput{}
	req.Data = output
	return
}

// UpdateElasticIp API operation for AWS OpsWorks.
//
// Updates a registered Elastic IP address's name. For more information, see
// Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateElasticIp for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateElasticIp(input *UpdateElasticIpInput) (*UpdateElasticIpOutput, error) {
	req, out := c.UpdateElasticIpRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateInstance = "UpdateInstance"

// UpdateInstanceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateInstanceRequest method.
//    req, resp := client.UpdateInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateInstanceRequest(input *UpdateInstanceInput) (req *request.Request, output *UpdateInstanceOutput) {
	op := &request.Operation{
		Name:       opUpdateInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateInstanceOutput{}
	req.Data = output
	return
}

// UpdateInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateInstance(input *UpdateInstanceInput) (*UpdateInstanceOutput, error) {
	req, out := c.UpdateInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateLayer = "UpdateLayer"

// UpdateLayerRequest generates a "aws/request.Request" representing the
// client's request for the UpdateLayer operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateLayer for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateLayer method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateLayerRequest method.
//    req, resp := client.UpdateLayerRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateLayerRequest(input *UpdateLayerInput) (req *request.Request, output *UpdateLayerOutput) {
	op := &request.Operation{
		Name:       opUpdateLayer,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateLayerInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateLayerOutput{}
	req.Data = output
	return
}

// UpdateLayer API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateLayer for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateLayer(input *UpdateLayerInput) (*UpdateLayerOutput, error) {
	req, out := c.UpdateLayerRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateMyUserProfile = "UpdateMyUserProfile"

// UpdateMyUserProfileRequest generates a "aws/request.Request" representing the
// client's request for the UpdateMyUserProfile operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateMyUserProfile for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateMyUserProfile method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateMyUserProfileRequest method.
//    req, resp := client.UpdateMyUserProfileRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateMyUserProfileRequest(input *UpdateMyUserProfileInput) (req *request.Request, output *UpdateMyUserProfileOutput) {
	op := &request.Operation{
		Name:       opUpdateMyUserProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateMyUserProfileInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateMyUserProfileOutput{}
	req.Data = output
	return
}

// UpdateMyUserProfile API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateMyUserProfile for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
func (c *OpsWorks) UpdateMyUserProfile(input *UpdateMyUserProfileInput) (*UpdateMyUserProfileOutput, error) {
	req, out := c.UpdateMyUserProfileRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateRdsDbInstance = "UpdateRdsDbInstance"

// UpdateRdsDbInstanceRequest generates a "aws/request.Request" representing the
// client's request for the UpdateRdsDbInstance operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateRdsDbInstance for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateRdsDbInstance method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateRdsDbInstanceRequest method.
//    req, resp := client.UpdateRdsDbInstanceRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateRdsDbInstanceRequest(input *UpdateRdsDbInstanceInput) (req *request.Request, output *UpdateRdsDbInstanceOutput) {
	op := &request.Operation{
		Name:       opUpdateRdsDbInstance,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateRdsDbInstanceInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateRdsDbInstanceOutput{}
	req.Data = output
	return
}

// UpdateRdsDbInstance API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateRdsDbInstance for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateRdsDbInstance(input *UpdateRdsDbInstanceInput) (*UpdateRdsDbInstanceOutput, error) {
	req, out := c.UpdateRdsDbInstanceRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateStack = "UpdateStack"

// UpdateStackRequest generates a "aws/request.Request" representing the
// client's request for the UpdateStack operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateStack for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateStack method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateStackRequest method.
//    req, resp := client.UpdateStackRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateStackRequest(input *UpdateStackInput) (req *request.Request, output *UpdateStackOutput) {
	op := &request.Operation{
		Name:       opUpdateStack,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateStackInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateStackOutput{}
	req.Data = output
	return
}

// UpdateStack API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateStack for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateStack(input *UpdateStackInput) (*UpdateStackOutput, error) {
	req, out := c.UpdateStackRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateUserProfile = "UpdateUserProfile"

// UpdateUserProfileRequest generates a "aws/request.Request" representing the
// client's request for the UpdateUserProfile operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateUserProfile for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateUserProfile method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateUserProfileRequest method.
//    req, resp := client.UpdateUserProfileRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateUserProfileRequest(input *UpdateUserProfileInput) (req *request.Request, output *UpdateUserProfileOutput) {
	op := &request.Operation{
		Name:       opUpdateUserProfile,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateUserProfileInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateUserProfileOutput{}
	req.Data = output
	return
}

// UpdateUserProfile API operation for AWS OpsWorks.
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateUserProfile for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateUserProfile(input *UpdateUserProfileInput) (*UpdateUserProfileOutput, error) {
	req, out := c.UpdateUserProfileRequest(input)
	err := req.Send()
	return out, err
}

const opUpdateVolume = "UpdateVolume"

// UpdateVolumeRequest generates a "aws/request.Request" representing the
// client's request for the UpdateVolume operation. The "output" return
// value can be used to capture response data after the request's "Send" method
// is called.
//
// See UpdateVolume for usage and error information.
//
// Creating a request object using this method should be used when you want to inject
// custom logic into the request's lifecycle using a custom handler, or if you want to
// access properties on the request object before or after sending the request. If
// you just want the service response, call the UpdateVolume method directly
// instead.
//
// Note: You must call the "Send" method on the returned request object in order
// to execute the request.
//
//    // Example sending a request using the UpdateVolumeRequest method.
//    req, resp := client.UpdateVolumeRequest(params)
//
//    err := req.Send()
//    if err == nil { // resp is now filled
//        fmt.Println(resp)
//    }
//
func (c *OpsWorks) UpdateVolumeRequest(input *UpdateVolumeInput) (req *request.Request, output *UpdateVolumeOutput) {
	op := &request.Operation{
		Name:       opUpdateVolume,
		HTTPMethod: "POST",
		HTTPPath:   "/",
	}

	if input == nil {
		input = &UpdateVolumeInput{}
	}

	req = c.newRequest(op, input, output)
	req.Handlers.Unmarshal.Remove(jsonrpc.UnmarshalHandler)
	req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler)
	output = &UpdateVolumeOutput{}
	req.Data = output
	return
}

// UpdateVolume API operation for AWS OpsWorks.
//
// Updates an Amazon EBS volume's name or mount point. For more information,
// see Resource Management (http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html).
//
// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for AWS OpsWorks's
// API operation UpdateVolume for usage and error information.
//
// Returned Error Codes:
//   * ValidationException
//   Indicates that a request was not valid.
//
//   * ResourceNotFoundException
//   Indicates that a resource was not found.
//
func (c *OpsWorks) UpdateVolume(input *UpdateVolumeInput) (*UpdateVolumeOutput, error) {
	req, out := c.UpdateVolumeRequest(input)
	err := req.Send()
	return out, err
}

// Describes an agent version.
type AgentVersion struct {
	_ struct{} `type:"structure"`

	// The configuration manager.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// The agent version.
	Version *string `type:"string"`
}

// String returns the string representation
func (s AgentVersion) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AgentVersion) GoString() string {
	return s.String()
}

// A description of the app.
type App struct {
	_ struct{} `type:"structure"`

	// The app ID.
	AppId *string `type:"string"`

	// A Source object that describes the app repository.
	AppSource *Source `type:"structure"`

	// The stack attributes.
	Attributes map[string]*string `type:"map"`

	// When the app was created.
	CreatedAt *string `type:"string"`

	// The app's data sources.
	DataSources []*DataSource `type:"list"`

	// A description of the app.
	Description *string `type:"string"`

	// The app vhost settings with multiple domains separated by commas. For example:
	// 'www.example.com, example.com'
	Domains []*string `type:"list"`

	// Whether to enable SSL for the app.
	EnableSsl *bool `type:"boolean"`

	// An array of EnvironmentVariable objects that specify environment variables
	// to be associated with the app. After you deploy the app, these variables
	// are defined on the associated app server instances. For more information,
	// see  Environment Variables (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment).
	//
	// There is no specific limit on the number of environment variables. However,
	// the size of the associated data structure - which includes the variable names,
	// values, and protected flag values - cannot exceed 10 KB (10240 Bytes). This
	// limit should accommodate most if not all use cases, but if you do exceed
	// it, you will cause an exception (API) with an "Environment: is too large
	// (maximum is 10KB)" message.
	Environment []*EnvironmentVariable `type:"list"`

	// The app name.
	Name *string `type:"string"`

	// The app's short name.
	Shortname *string `type:"string"`

	// An SslConfiguration object with the SSL configuration.
	SslConfiguration *SslConfiguration `type:"structure"`

	// The app stack ID.
	StackId *string `type:"string"`

	// The app type.
	Type *string `type:"string" enum:"AppType"`
}

// String returns the string representation
func (s App) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s App) GoString() string {
	return s.String()
}

type AssignInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`

	// The layer ID, which must correspond to a custom layer. You cannot assign
	// a registered instance to a built-in layer.
	//
	// LayerIds is a required field
	LayerIds []*string `type:"list" required:"true"`
}

// String returns the string representation
func (s AssignInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssignInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AssignInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AssignInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}
	if s.LayerIds == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerIds"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type AssignInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s AssignInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssignInstanceOutput) GoString() string {
	return s.String()
}

type AssignVolumeInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	InstanceId *string `type:"string"`

	// The volume ID.
	//
	// VolumeId is a required field
	VolumeId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s AssignVolumeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssignVolumeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AssignVolumeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AssignVolumeInput"}
	if s.VolumeId == nil {
		invalidParams.Add(request.NewErrParamRequired("VolumeId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type AssignVolumeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s AssignVolumeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssignVolumeOutput) GoString() string {
	return s.String()
}

type AssociateElasticIpInput struct {
	_ struct{} `type:"structure"`

	// The Elastic IP address.
	//
	// ElasticIp is a required field
	ElasticIp *string `type:"string" required:"true"`

	// The instance ID.
	InstanceId *string `type:"string"`
}

// String returns the string representation
func (s AssociateElasticIpInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssociateElasticIpInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AssociateElasticIpInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AssociateElasticIpInput"}
	if s.ElasticIp == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticIp"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type AssociateElasticIpOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s AssociateElasticIpOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AssociateElasticIpOutput) GoString() string {
	return s.String()
}

type AttachElasticLoadBalancerInput struct {
	_ struct{} `type:"structure"`

	// The Elastic Load Balancing instance's name.
	//
	// ElasticLoadBalancerName is a required field
	ElasticLoadBalancerName *string `type:"string" required:"true"`

	// The ID of the layer that the Elastic Load Balancing instance is to be attached
	// to.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s AttachElasticLoadBalancerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AttachElasticLoadBalancerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AttachElasticLoadBalancerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AttachElasticLoadBalancerInput"}
	if s.ElasticLoadBalancerName == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticLoadBalancerName"))
	}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type AttachElasticLoadBalancerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s AttachElasticLoadBalancerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AttachElasticLoadBalancerOutput) GoString() string {
	return s.String()
}

// Describes a load-based auto scaling upscaling or downscaling threshold configuration,
// which specifies when AWS OpsWorks starts or stops load-based instances.
type AutoScalingThresholds struct {
	_ struct{} `type:"structure"`

	// Custom Cloudwatch auto scaling alarms, to be used as thresholds. This parameter
	// takes a list of up to five alarm names, which are case sensitive and must
	// be in the same region as the stack.
	//
	// To use custom alarms, you must update your service role to allow cloudwatch:DescribeAlarms.
	// You can either have AWS OpsWorks update the role for you when you first use
	// this feature or you can edit the role manually. For more information, see
	// Allowing AWS OpsWorks to Act on Your Behalf (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-servicerole.html).
	Alarms []*string `type:"list"`

	// The CPU utilization threshold, as a percent of the available CPU. A value
	// of -1 disables the threshold.
	CpuThreshold *float64 `type:"double"`

	// The amount of time (in minutes) after a scaling event occurs that AWS OpsWorks
	// should ignore metrics and suppress additional scaling events. For example,
	// AWS OpsWorks adds new instances following an upscaling event but the instances
	// won't start reducing the load until they have been booted and configured.
	// There is no point in raising additional scaling events during that operation,
	// which typically takes several minutes. IgnoreMetricsTime allows you to direct
	// AWS OpsWorks to suppress scaling events long enough to get the new instances
	// online.
	IgnoreMetricsTime *int64 `min:"1" type:"integer"`

	// The number of instances to add or remove when the load exceeds a threshold.
	InstanceCount *int64 `type:"integer"`

	// The load threshold. A value of -1 disables the threshold. For more information
	// about how load is computed, see Load (computing) (http://en.wikipedia.org/wiki/Load_%28computing%29).
	LoadThreshold *float64 `type:"double"`

	// The memory utilization threshold, as a percent of the available memory. A
	// value of -1 disables the threshold.
	MemoryThreshold *float64 `type:"double"`

	// The amount of time, in minutes, that the load must exceed a threshold before
	// more instances are added or removed.
	ThresholdsWaitTime *int64 `min:"1" type:"integer"`
}

// String returns the string representation
func (s AutoScalingThresholds) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s AutoScalingThresholds) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AutoScalingThresholds) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AutoScalingThresholds"}
	if s.IgnoreMetricsTime != nil && *s.IgnoreMetricsTime < 1 {
		invalidParams.Add(request.NewErrParamMinValue("IgnoreMetricsTime", 1))
	}
	if s.ThresholdsWaitTime != nil && *s.ThresholdsWaitTime < 1 {
		invalidParams.Add(request.NewErrParamMinValue("ThresholdsWaitTime", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Describes a block device mapping. This data type maps directly to the Amazon
// EC2 BlockDeviceMapping (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
// data type.
type BlockDeviceMapping struct {
	_ struct{} `type:"structure"`

	// The device name that is exposed to the instance, such as /dev/sdh. For the
	// root device, you can use the explicit device name or you can set this parameter
	// to ROOT_DEVICE and AWS OpsWorks will provide the correct device name.
	DeviceName *string `type:"string"`

	// An EBSBlockDevice that defines how to configure an Amazon EBS volume when
	// the instance is launched.
	Ebs *EbsBlockDevice `type:"structure"`

	// Suppresses the specified device included in the AMI's block device mapping.
	NoDevice *string `type:"string"`

	// The virtual device name. For more information, see BlockDeviceMapping (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html).
	VirtualName *string `type:"string"`
}

// String returns the string representation
func (s BlockDeviceMapping) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s BlockDeviceMapping) GoString() string {
	return s.String()
}

// Describes the Chef configuration.
type ChefConfiguration struct {
	_ struct{} `type:"structure"`

	// The Berkshelf version.
	BerkshelfVersion *string `type:"string"`

	// Whether to enable Berkshelf.
	ManageBerkshelf *bool `type:"boolean"`
}

// String returns the string representation
func (s ChefConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ChefConfiguration) GoString() string {
	return s.String()
}

type CloneStackInput struct {
	_ struct{} `type:"structure"`

	// The default AWS OpsWorks agent version. You have the following options:
	//
	//    * Auto-update - Set this parameter to LATEST. AWS OpsWorks automatically
	//    installs new agent versions on the stack's instances as soon as they are
	//    available.
	//
	//    * Fixed version - Set this parameter to your preferred agent version.
	//    To update the agent version, you must edit the stack configuration and
	//    specify a new version. AWS OpsWorks then automatically installs that version
	//    on the stack's instances.
	//
	// The default setting is LATEST. To specify an agent version, you must use
	// the complete version number, not the abbreviated number shown on the console.
	// For a list of available agent version numbers, call DescribeAgentVersions.
	//
	// You can also specify an agent version when you create or update an instance,
	// which overrides the stack's default setting.
	AgentVersion *string `type:"string"`

	// A list of stack attributes and values as key/value pairs to be added to the
	// cloned stack.
	Attributes map[string]*string `type:"map"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	ChefConfiguration *ChefConfiguration `type:"structure"`

	// A list of source stack app IDs to be included in the cloned stack.
	CloneAppIds []*string `type:"list"`

	// Whether to clone the source stack's permissions.
	ClonePermissions *bool `type:"boolean"`

	// The configuration manager. When you clone a stack we recommend that you use
	// the configuration manager to specify the Chef version: 12, 11.10, or 11.4
	// for Linux stacks, or 12.2 for Windows stacks. The default value for Linux
	// stacks is currently 12.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// Contains the information required to retrieve an app or cookbook from a repository.
	// For more information, see Creating Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)
	// or Custom Recipes and Cookbooks (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html).
	CustomCookbooksSource *Source `type:"structure"`

	// 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:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html)
	CustomJson *string `type:"string"`

	// The cloned stack's default Availability Zone, which must be in the specified
	// region. For more information, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	// If you also specify a value for DefaultSubnetId, the subnet must be in the
	// same zone. For more information, see the VpcId parameter description.
	DefaultAvailabilityZone *string `type:"string"`

	// The Amazon Resource Name (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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	DefaultInstanceProfileArn *string `type:"string"`

	// The stack's operating system, which must be set to one of the following.
	//
	//    * A supported Linux operating system: An Amazon Linux version, such as
	//    Amazon Linux 2016.03, Amazon Linux 2015.09, or Amazon Linux 2015.03.
	//
	//    * A supported Ubuntu operating system, such as Ubuntu 16.04 LTS, Ubuntu
	//    14.04 LTS, or Ubuntu 12.04 LTS.
	//
	//    * CentOS 7
	//
	//    * Red Hat Enterprise Linux 7
	//
	//    * Microsoft Windows Server 2012 R2 Base, Microsoft Windows Server 2012
	//    R2 with SQL Server Express, Microsoft Windows Server 2012 R2 with SQL
	//    Server Standard, or Microsoft Windows Server 2012 R2 with SQL Server Web.
	//
	//    * A custom AMI: Custom. You specify the custom AMI you want to use when
	//    you create instances. For more information on how to use custom AMIs with
	//    OpsWorks, see Using Custom AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	//
	// The default option is the parent stack's operating system. For more information
	// on the supported operating systems, see AWS OpsWorks Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	//
	// You can specify a different Linux operating system for the cloned stack,
	// but you cannot change from Linux to Windows or Windows to Linux.
	DefaultOs *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	DefaultRootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// A default Amazon EC2 key pair name. The default value is none. If you specify
	// a key pair name, AWS OpsWorks installs the public key on the instance and
	// you can use the private key with an SSH client to log in to the instance.
	// For more information, see  Using SSH to Communicate with an Instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html)
	// and  Managing SSH Access (http://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html).
	// You can override this setting by specifying a different key pair, or no key
	// pair, when you  create an instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html).
	DefaultSshKeyName *string `type:"string"`

	// 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.
	DefaultSubnetId *string `type:"string"`

	// 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
	//
	//    * Europe_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.
	HostnameTheme *string `type:"string"`

	// The cloned stack name.
	Name *string `type:"string"`

	// The cloned stack AWS region, such as "ap-northeast-2". For more information
	// about AWS regions, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	Region *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	//
	// 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.
	//
	// ServiceRoleArn is a required field
	ServiceRoleArn *string `type:"string" required:"true"`

	// The source stack ID.
	//
	// SourceStackId is a required field
	SourceStackId *string `type:"string" required:"true"`

	// Whether to use custom cookbooks.
	UseCustomCookbooks *bool `type:"boolean"`

	// 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 Amazon Elastic Compute Cloud (Amazon
	//    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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	UseOpsworksSecurityGroups *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-vpc.html).
	// For more information on default VPC and EC2 Classic, see Supported Platforms
	// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html).
	VpcId *string `type:"string"`
}

// String returns the string representation
func (s CloneStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CloneStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CloneStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CloneStackInput"}
	if s.ServiceRoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceRoleArn"))
	}
	if s.SourceStackId == nil {
		invalidParams.Add(request.NewErrParamRequired("SourceStackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CloneStack request.
type CloneStackOutput struct {
	_ struct{} `type:"structure"`

	// The cloned stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s CloneStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CloneStackOutput) GoString() string {
	return s.String()
}

// Describes a command.
type Command struct {
	_ struct{} `type:"structure"`

	// Date and time when the command was acknowledged.
	AcknowledgedAt *string `type:"string"`

	// The command ID.
	CommandId *string `type:"string"`

	// Date when the command completed.
	CompletedAt *string `type:"string"`

	// Date and time when the command was run.
	CreatedAt *string `type:"string"`

	// The command deployment ID.
	DeploymentId *string `type:"string"`

	// The command exit code.
	ExitCode *int64 `type:"integer"`

	// The ID of the instance where the command was executed.
	InstanceId *string `type:"string"`

	// The URL of the command log.
	LogUrl *string `type:"string"`

	// The command status:
	//
	//    * failed
	//
	//    * successful
	//
	//    * skipped
	//
	//    * pending
	Status *string `type:"string"`

	// The command type:
	//
	//    * deploy
	//
	//    * rollback
	//
	//    * start
	//
	//    * stop
	//
	//    * restart
	//
	//    * undeploy
	//
	//    * update_dependencies
	//
	//    * install_dependencies
	//
	//    * update_custom_cookbooks
	//
	//    * execute_recipes
	Type *string `type:"string"`
}

// String returns the string representation
func (s Command) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Command) GoString() string {
	return s.String()
}

type CreateAppInput struct {
	_ struct{} `type:"structure"`

	// A Source object that specifies the app repository.
	AppSource *Source `type:"structure"`

	// One or more user-defined key/value pairs to be added to the stack attributes.
	Attributes map[string]*string `type:"map"`

	// The app's data source.
	DataSources []*DataSource `type:"list"`

	// A description of the app.
	Description *string `type:"string"`

	// The app virtual host settings, with multiple domains separated by commas.
	// For example: 'www.example.com, example.com'
	Domains []*string `type:"list"`

	// Whether to enable SSL for the app.
	EnableSsl *bool `type:"boolean"`

	// An array of EnvironmentVariable objects that specify environment variables
	// to be associated with the app. After you deploy the app, these variables
	// are defined on the associated app server instance. For more information,
	// see  Environment Variables (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment).
	//
	// There is no specific limit on the number of environment variables. However,
	// the size of the associated data structure - which includes the variables'
	// names, values, and protected flag values - cannot exceed 10 KB (10240 Bytes).
	// This limit should accommodate most if not all use cases. Exceeding it will
	// cause an exception with the message, "Environment: is too large (maximum
	// is 10KB)."
	//
	// 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.
	Environment []*EnvironmentVariable `type:"list"`

	// The app name.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`

	// The app's short name.
	Shortname *string `type:"string"`

	// An SslConfiguration object with the SSL configuration.
	SslConfiguration *SslConfiguration `type:"structure"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`

	// 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. If your app isn't one of the standard types, or you prefer to implement
	// your own Deploy recipes, specify other.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"AppType"`
}

// String returns the string representation
func (s CreateAppInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateAppInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateAppInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateAppInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.Environment != nil {
		for i, v := range s.Environment {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Environment", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.SslConfiguration != nil {
		if err := s.SslConfiguration.Validate(); err != nil {
			invalidParams.AddNested("SslConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateApp request.
type CreateAppOutput struct {
	_ struct{} `type:"structure"`

	// The app ID.
	AppId *string `type:"string"`
}

// String returns the string representation
func (s CreateAppOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateAppOutput) GoString() string {
	return s.String()
}

type CreateDeploymentInput struct {
	_ struct{} `type:"structure"`

	// The app ID. This parameter is required for app deployments, but not for other
	// deployment commands.
	AppId *string `type:"string"`

	// A DeploymentCommand object that specifies the deployment command and any
	// associated arguments.
	//
	// Command is a required field
	Command *DeploymentCommand `type:"structure" required:"true"`

	// A user-defined comment.
	Comment *string `type:"string"`

	// 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:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html).
	CustomJson *string `type:"string"`

	// The instance IDs for the deployment targets.
	InstanceIds []*string `type:"list"`

	// The layer IDs for the deployment targets.
	LayerIds []*string `type:"list"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s CreateDeploymentInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDeploymentInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateDeploymentInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateDeploymentInput"}
	if s.Command == nil {
		invalidParams.Add(request.NewErrParamRequired("Command"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}
	if s.Command != nil {
		if err := s.Command.Validate(); err != nil {
			invalidParams.AddNested("Command", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateDeployment request.
type CreateDeploymentOutput struct {
	_ struct{} `type:"structure"`

	// The deployment ID, which can be used with other requests to identify the
	// deployment.
	DeploymentId *string `type:"string"`
}

// String returns the string representation
func (s CreateDeploymentOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateDeploymentOutput) GoString() string {
	return s.String()
}

type CreateInstanceInput struct {
	_ struct{} `type:"structure"`

	// The default AWS OpsWorks agent version. You have the following options:
	//
	//    * INHERIT - Use the stack's default agent version setting.
	//
	//    * version_number - Use the specified agent version. This value overrides
	//    the stack's default setting. To update the agent version, edit the instance
	//    configuration and specify a new version. AWS OpsWorks then automatically
	//    installs that version on the instance.
	//
	// The default setting is INHERIT. To specify an agent version, you must use
	// the complete version number, not the abbreviated number shown on the console.
	// For a list of available agent version numbers, call DescribeAgentVersions.
	AgentVersion *string `type:"string"`

	// A custom AMI ID to be used to create the instance. The AMI should be based
	// on one of the supported operating systems. For more information, see Using
	// Custom AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	//
	// If you specify a custom AMI, you must set Os to Custom.
	AmiId *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).
	Architecture *string `type:"string" enum:"Architecture"`

	// For load-based or time-based instances, the type. Windows stacks can use
	// only time-based instances.
	AutoScalingType *string `type:"string" enum:"AutoScalingType"`

	// The instance Availability Zone. For more information, see Regions and Endpoints
	// (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	AvailabilityZone *string `type:"string"`

	// An array of BlockDeviceMapping objects that specify the instance's block
	// devices. For more information, see Block Device Mapping (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html).
	// Note that block device mappings are not supported for custom AMIs.
	BlockDeviceMappings []*BlockDeviceMapping `type:"list"`

	// Whether to create an Amazon EBS-optimized instance.
	EbsOptimized *bool `type:"boolean"`

	// The instance host name.
	Hostname *string `type:"string"`

	// 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 by
	// 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.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// The instance type, such as t2.micro. For a list of supported instance types,
	// open the stack in the console, choose Instances, and choose + Instance. The
	// Size list contains the currently supported types. For more information, see
	// Instance Families and Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).
	// The parameter values that you use to specify the various types are in the
	// API Name column of the Available Instance Types table.
	//
	// InstanceType is a required field
	InstanceType *string `type:"string" required:"true"`

	// An array that contains the instance's layer IDs.
	//
	// LayerIds is a required field
	LayerIds []*string `type:"list" required:"true"`

	// The instance's operating system, which must be set to one of the following.
	//
	//    * A supported Linux operating system: An Amazon Linux version, such as
	//    Amazon Linux 2016.03, Amazon Linux 2015.09, or Amazon Linux 2015.03.
	//
	//    * A supported Ubuntu operating system, such as Ubuntu 16.04 LTS, Ubuntu
	//    14.04 LTS, or Ubuntu 12.04 LTS.
	//
	//    * CentOS 7
	//
	//    * Red Hat Enterprise Linux 7
	//
	//    * A supported Windows operating system, such as Microsoft Windows Server
	//    2012 R2 Base, Microsoft Windows Server 2012 R2 with SQL Server Express,
	//    Microsoft Windows Server 2012 R2 with SQL Server Standard, or Microsoft
	//    Windows Server 2012 R2 with SQL Server Web.
	//
	//    * A custom AMI: Custom.
	//
	// For more information on the supported operating systems, see AWS OpsWorks
	// Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	//
	// 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. Block device mappings are not supported
	// if the value is Custom. For more information on the supported operating systems,
	// see Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html)For
	// more information on how to use custom AMIs with AWS OpsWorks, see Using Custom
	// AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	Os *string `type:"string"`

	// The instance root device type. For more information, see Storage for the
	// Root Device (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	RootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// The instance's Amazon EC2 key-pair name.
	SshKeyName *string `type:"string"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`

	// 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.
	SubnetId *string `type:"string"`

	// The instance's tenancy option. The default option is no tenancy, or if the
	// instance is running in a VPC, inherit tenancy settings from the VPC. The
	// following are valid values for this parameter: dedicated, default, or host.
	// Because there are costs associated with changes in tenancy options, we recommend
	// that you research tenancy options before choosing them for your instances.
	// For more information about dedicated hosts, see Dedicated Hosts Overview
	// (http://aws.amazon.com/ec2/dedicated-hosts/) and Amazon EC2 Dedicated Hosts
	// (http://aws.amazon.com/ec2/dedicated-hosts/). For more information about
	// dedicated instances, see Dedicated Instances (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/dedicated-instance.html)
	// and Amazon EC2 Dedicated Instances (http://aws.amazon.com/ec2/purchasing-options/dedicated-instances/).
	Tenancy *string `type:"string"`

	// The instance's virtualization type, paravirtual or hvm.
	VirtualizationType *string `type:"string"`
}

// String returns the string representation
func (s CreateInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateInstanceInput"}
	if s.InstanceType == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceType"))
	}
	if s.LayerIds == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerIds"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateInstance request.
type CreateInstanceOutput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	InstanceId *string `type:"string"`
}

// String returns the string representation
func (s CreateInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateInstanceOutput) GoString() string {
	return s.String()
}

type CreateLayerInput struct {
	_ struct{} `type:"structure"`

	// One or more user-defined key-value pairs to be added to the stack attributes.
	//
	// To create a cluster layer, set the EcsClusterArn attribute to the cluster's
	// ARN.
	Attributes map[string]*string `type:"map"`

	// Whether to automatically assign an Elastic IP address (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
	// to the layer's instances. For more information, see How to Edit a Layer (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignElasticIps *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignPublicIps *bool `type:"boolean"`

	// The ARN of an IAM profile to be used for the layer's EC2 instances. For more
	// information about IAM ARNs, see Using Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	CustomInstanceProfileArn *string `type:"string"`

	// A JSON-formatted string containing custom stack configuration and deployment
	// attributes to be installed on the layer's instances. For more information,
	// see  Using Custom JSON (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html).
	// This feature is supported as of version 1.7.42 of the AWS CLI.
	CustomJson *string `type:"string"`

	// A LayerCustomRecipes object that specifies the layer custom recipes.
	CustomRecipes *Recipes `type:"structure"`

	// An array containing the layer custom security group IDs.
	CustomSecurityGroupIds []*string `type:"list"`

	// Whether to disable auto healing for the layer.
	EnableAutoHealing *bool `type:"boolean"`

	// 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 by
	// manually running yum (Amazon Linux) or apt-get (Ubuntu) on the instances.
	//
	// To ensure that your instances have the latest security updates, we strongly
	// recommend using the default value of true.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// 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.
	LifecycleEventConfiguration *LifecycleEventConfiguration `type:"structure"`

	// The layer name, which is used by the console.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`

	// An array of Package objects that describes the layer packages.
	Packages []*string `type:"list"`

	// For custom layers only, use this parameter to specify the layer's 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 '.'.
	//
	// The built-in layers' short names are defined by AWS OpsWorks. For more information,
	// see the Layer Reference (http://docs.aws.amazon.com/opsworks/latest/userguide/layers.html).
	//
	// Shortname is a required field
	Shortname *string `type:"string" required:"true"`

	// The layer stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`

	// 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. Built-in layers are not available
	// in Chef 12 stacks.
	//
	// Type is a required field
	Type *string `type:"string" required:"true" enum:"LayerType"`

	// Whether to use Amazon EBS-optimized instances.
	UseEbsOptimizedInstances *bool `type:"boolean"`

	// A VolumeConfigurations object that describes the layer's Amazon EBS volumes.
	VolumeConfigurations []*VolumeConfiguration `type:"list"`
}

// String returns the string representation
func (s CreateLayerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateLayerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateLayerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateLayerInput"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Shortname == nil {
		invalidParams.Add(request.NewErrParamRequired("Shortname"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}
	if s.Type == nil {
		invalidParams.Add(request.NewErrParamRequired("Type"))
	}
	if s.VolumeConfigurations != nil {
		for i, v := range s.VolumeConfigurations {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "VolumeConfigurations", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateLayer request.
type CreateLayerOutput struct {
	_ struct{} `type:"structure"`

	// The layer ID.
	LayerId *string `type:"string"`
}

// String returns the string representation
func (s CreateLayerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateLayerOutput) GoString() string {
	return s.String()
}

type CreateStackInput struct {
	_ struct{} `type:"structure"`

	// The default AWS OpsWorks agent version. You have the following options:
	//
	//    * Auto-update - Set this parameter to LATEST. AWS OpsWorks automatically
	//    installs new agent versions on the stack's instances as soon as they are
	//    available.
	//
	//    * Fixed version - Set this parameter to your preferred agent version.
	//    To update the agent version, you must edit the stack configuration and
	//    specify a new version. AWS OpsWorks then automatically installs that version
	//    on the stack's instances.
	//
	// The default setting is the most recent release of the agent. To specify an
	// agent version, you must use the complete version number, not the abbreviated
	// number shown on the console. For a list of available agent version numbers,
	// call DescribeAgentVersions.
	//
	// You can also specify an agent version when you create or update an instance,
	// which overrides the stack's default setting.
	AgentVersion *string `type:"string"`

	// One or more user-defined key-value pairs to be added to the stack attributes.
	Attributes map[string]*string `type:"map"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	ChefConfiguration *ChefConfiguration `type:"structure"`

	// The configuration manager. When you create a stack we recommend that you
	// use the configuration manager to specify the Chef version: 12, 11.10, or
	// 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
	// Linux stacks is currently 11.4.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// Contains the information required to retrieve an app or cookbook from a repository.
	// For more information, see Creating Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)
	// or Custom Recipes and Cookbooks (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html).
	CustomCookbooksSource *Source `type:"structure"`

	// A string that contains user-defined, custom JSON. It can be used to override
	// the corresponding default stack configuration attribute values or to pass
	// data to recipes. The string should be in the following format:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html).
	CustomJson *string `type:"string"`

	// The stack's default Availability Zone, which must be in the specified region.
	// For more information, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	// If you also specify a value for DefaultSubnetId, the subnet must be in the
	// same zone. For more information, see the VpcId parameter description.
	DefaultAvailabilityZone *string `type:"string"`

	// The Amazon Resource Name (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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	//
	// DefaultInstanceProfileArn is a required field
	DefaultInstanceProfileArn *string `type:"string" required:"true"`

	// The stack's default operating system, which is installed on every instance
	// unless you specify a different operating system when you create the instance.
	// You can specify one of the following.
	//
	//    * A supported Linux operating system: An Amazon Linux version, such as
	//    Amazon Linux 2016.03, Amazon Linux 2015.09, or Amazon Linux 2015.03.
	//
	//    * A supported Ubuntu operating system, such as Ubuntu 16.04 LTS, Ubuntu
	//    14.04 LTS, or Ubuntu 12.04 LTS.
	//
	//    * CentOS 7
	//
	//    * Red Hat Enterprise Linux 7
	//
	//    * A supported Windows operating system, such as Microsoft Windows Server
	//    2012 R2 Base, Microsoft Windows Server 2012 R2 with SQL Server Express,
	//    Microsoft Windows Server 2012 R2 with SQL Server Standard, or Microsoft
	//    Windows Server 2012 R2 with SQL Server Web.
	//
	//    * A custom AMI: Custom. You specify the custom AMI you want to use when
	//    you create instances. For more information, see  Using Custom AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	//
	// The default option is the current Amazon Linux version. For more information
	// on the supported operating systems, see AWS OpsWorks Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	DefaultOs *string `type:"string"`

	// The default root device type. This value is the 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	DefaultRootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// A default Amazon EC2 key pair name. The default value is none. If you specify
	// a key pair name, AWS OpsWorks installs the public key on the instance and
	// you can use the private key with an SSH client to log in to the instance.
	// For more information, see  Using SSH to Communicate with an Instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html)
	// and  Managing SSH Access (http://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html).
	// You can override this setting by specifying a different key pair, or no key
	// pair, when you  create an instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html).
	DefaultSshKeyName *string `type:"string"`

	// 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.
	DefaultSubnetId *string `type:"string"`

	// The stack's host name theme, with spaces 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
	//
	//    * Europe_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.
	HostnameTheme *string `type:"string"`

	// The stack name.
	//
	// Name is a required field
	Name *string `type:"string" required:"true"`

	// The stack's AWS region, such as "ap-south-1". For more information about
	// Amazon regions, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	//
	// Region is a required field
	Region *string `type:"string" required:"true"`

	// The stack's 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	//
	// ServiceRoleArn is a required field
	ServiceRoleArn *string `type:"string" required:"true"`

	// Whether the stack uses custom cookbooks.
	UseCustomCookbooks *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	UseOpsworksSecurityGroups *bool `type:"boolean"`

	// The ID of the VPC that the stack is to be launched into. The VPC must be
	// in the stack's region. All instances are launched into this VPC. 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-vpc.html).
	// For more information on default VPC and EC2-Classic, see Supported Platforms
	// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html).
	VpcId *string `type:"string"`
}

// String returns the string representation
func (s CreateStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateStackInput"}
	if s.DefaultInstanceProfileArn == nil {
		invalidParams.Add(request.NewErrParamRequired("DefaultInstanceProfileArn"))
	}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}
	if s.Region == nil {
		invalidParams.Add(request.NewErrParamRequired("Region"))
	}
	if s.ServiceRoleArn == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceRoleArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateStack request.
type CreateStackOutput struct {
	_ struct{} `type:"structure"`

	// The stack ID, which is an opaque string that you use to identify the stack
	// when performing actions such as DescribeStacks.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s CreateStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateStackOutput) GoString() string {
	return s.String()
}

type CreateUserProfileInput struct {
	_ struct{} `type:"structure"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html).
	AllowSelfManagement *bool `type:"boolean"`

	// The user's IAM ARN; this can also be a federated user's ARN.
	//
	// IamUserArn is a required field
	IamUserArn *string `type:"string" required:"true"`

	// The user's public SSH key.
	SshPublicKey *string `type:"string"`

	// 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.
	SshUsername *string `type:"string"`
}

// String returns the string representation
func (s CreateUserProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateUserProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CreateUserProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CreateUserProfileInput"}
	if s.IamUserArn == nil {
		invalidParams.Add(request.NewErrParamRequired("IamUserArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a CreateUserProfile request.
type CreateUserProfileOutput struct {
	_ struct{} `type:"structure"`

	// The user's IAM ARN.
	IamUserArn *string `type:"string"`
}

// String returns the string representation
func (s CreateUserProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s CreateUserProfileOutput) GoString() string {
	return s.String()
}

// Describes an app's data source.
type DataSource struct {
	_ struct{} `type:"structure"`

	// The data source's ARN.
	Arn *string `type:"string"`

	// The database name.
	DatabaseName *string `type:"string"`

	// The data source's type, AutoSelectOpsworksMysqlInstance, OpsworksMysqlInstance,
	// or RdsDbInstance.
	Type *string `type:"string"`
}

// String returns the string representation
func (s DataSource) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DataSource) GoString() string {
	return s.String()
}

type DeleteAppInput struct {
	_ struct{} `type:"structure"`

	// The app ID.
	//
	// AppId is a required field
	AppId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteAppInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteAppInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteAppInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteAppInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeleteAppOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteAppOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteAppOutput) GoString() string {
	return s.String()
}

type DeleteInstanceInput struct {
	_ struct{} `type:"structure"`

	// Whether to delete the instance Elastic IP address.
	DeleteElasticIp *bool `type:"boolean"`

	// Whether to delete the instance's Amazon EBS volumes.
	DeleteVolumes *bool `type:"boolean"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeleteInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteInstanceOutput) GoString() string {
	return s.String()
}

type DeleteLayerInput struct {
	_ struct{} `type:"structure"`

	// The layer ID.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteLayerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteLayerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteLayerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteLayerInput"}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeleteLayerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteLayerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteLayerOutput) GoString() string {
	return s.String()
}

type DeleteStackInput struct {
	_ struct{} `type:"structure"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteStackInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeleteStackOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteStackOutput) GoString() string {
	return s.String()
}

type DeleteUserProfileInput struct {
	_ struct{} `type:"structure"`

	// The user's IAM ARN. This can also be a federated user's ARN.
	//
	// IamUserArn is a required field
	IamUserArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeleteUserProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteUserProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeleteUserProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeleteUserProfileInput"}
	if s.IamUserArn == nil {
		invalidParams.Add(request.NewErrParamRequired("IamUserArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeleteUserProfileOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeleteUserProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeleteUserProfileOutput) GoString() string {
	return s.String()
}

// Describes a deployment of a stack or app.
type Deployment struct {
	_ struct{} `type:"structure"`

	// The app ID.
	AppId *string `type:"string"`

	// Used to specify a stack or deployment command.
	Command *DeploymentCommand `type:"structure"`

	// A user-defined comment.
	Comment *string `type:"string"`

	// Date when the deployment completed.
	CompletedAt *string `type:"string"`

	// Date when the deployment was created.
	CreatedAt *string `type:"string"`

	// A string that contains user-defined custom JSON. It can be used to override
	// the corresponding default stack configuration attribute values for stack
	// or to pass data to recipes. The string should be in the following format:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html).
	CustomJson *string `type:"string"`

	// The deployment ID.
	DeploymentId *string `type:"string"`

	// The deployment duration.
	Duration *int64 `type:"integer"`

	// The user's IAM ARN.
	IamUserArn *string `type:"string"`

	// The IDs of the target instances.
	InstanceIds []*string `type:"list"`

	// The stack ID.
	StackId *string `type:"string"`

	// The deployment status:
	//
	//    * running
	//
	//    * successful
	//
	//    * failed
	Status *string `type:"string"`
}

// String returns the string representation
func (s Deployment) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Deployment) GoString() string {
	return s.String()
}

// Used to specify a stack or deployment command.
type DeploymentCommand struct {
	_ struct{} `type:"structure"`

	// The arguments of those commands that take arguments. It should be set to
	// a JSON object with the following format:
	//
	// {"arg_name1" : ["value1", "value2", ...], "arg_name2" : ["value1", "value2",
	// ...], ...}
	//
	// The update_dependencies command takes two arguments:
	//
	//    * upgrade_os_to - Specifies the desired Amazon Linux version for instances
	//    whose OS you want to upgrade, such as Amazon Linux 2014.09. You must also
	//    set the allow_reboot argument to true.
	//
	//    * allow_reboot - Specifies whether to allow AWS OpsWorks to reboot the
	//    instances if necessary, after installing the updates. This argument can
	//    be set to either true or false. The default value is false.
	//
	// For example, to upgrade an instance to Amazon Linux 2014.09, set Args to
	// the following.
	//
	// { "upgrade_os_to":["Amazon Linux 2014.09"], "allow_reboot":["true"] }
	Args map[string][]*string `type:"map"`

	// Specifies the operation. You can specify only one command.
	//
	// For stacks, the following commands are available:
	//
	//    * execute_recipes: Execute one or more recipes. To specify the recipes,
	//    set an Args parameter named recipes to the list of recipes to be executed.
	//    For example, to execute phpapp::appsetup, set Args to {"recipes":["phpapp::appsetup"]}.
	//
	//    * install_dependencies: Install the stack's dependencies.
	//
	//    * update_custom_cookbooks: Update the stack's custom cookbooks.
	//
	//    * update_dependencies: Update the stack's dependencies.
	//
	// The update_dependencies and install_dependencies commands are supported only
	// for Linux instances. You can run the commands successfully on Windows instances,
	// but they do nothing.
	//
	// For apps, the following commands are available:
	//
	//    * deploy: Deploy an app. Ruby on Rails apps have an optional Args parameter
	//    named migrate. Set Args to {"migrate":["true"]} to migrate the database.
	//    The default setting is {"migrate":["false"]}.
	//
	//    * rollback Roll the app back to the previous version. When you update
	//    an app, AWS OpsWorks stores the previous version, up to a maximum of five
	//    versions. You can use this command to roll an app back as many as four
	//    versions.
	//
	//    * start: Start the app's web or application server.
	//
	//    * stop: Stop the app's web or application server.
	//
	//    * restart: Restart the app's web or application server.
	//
	//    * undeploy: Undeploy the app.
	//
	// Name is a required field
	Name *string `type:"string" required:"true" enum:"DeploymentCommandName"`
}

// String returns the string representation
func (s DeploymentCommand) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeploymentCommand) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeploymentCommand) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeploymentCommand"}
	if s.Name == nil {
		invalidParams.Add(request.NewErrParamRequired("Name"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterEcsClusterInput struct {
	_ struct{} `type:"structure"`

	// The cluster's ARN.
	//
	// EcsClusterArn is a required field
	EcsClusterArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeregisterEcsClusterInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterEcsClusterInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterEcsClusterInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterEcsClusterInput"}
	if s.EcsClusterArn == nil {
		invalidParams.Add(request.NewErrParamRequired("EcsClusterArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterEcsClusterOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeregisterEcsClusterOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterEcsClusterOutput) GoString() string {
	return s.String()
}

type DeregisterElasticIpInput struct {
	_ struct{} `type:"structure"`

	// The Elastic IP address.
	//
	// ElasticIp is a required field
	ElasticIp *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeregisterElasticIpInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterElasticIpInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterElasticIpInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterElasticIpInput"}
	if s.ElasticIp == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticIp"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterElasticIpOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeregisterElasticIpOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterElasticIpOutput) GoString() string {
	return s.String()
}

type DeregisterInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeregisterInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeregisterInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterInstanceOutput) GoString() string {
	return s.String()
}

type DeregisterRdsDbInstanceInput struct {
	_ struct{} `type:"structure"`

	// The Amazon RDS instance's ARN.
	//
	// RdsDbInstanceArn is a required field
	RdsDbInstanceArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeregisterRdsDbInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterRdsDbInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterRdsDbInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterRdsDbInstanceInput"}
	if s.RdsDbInstanceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RdsDbInstanceArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterRdsDbInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeregisterRdsDbInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterRdsDbInstanceOutput) GoString() string {
	return s.String()
}

type DeregisterVolumeInput struct {
	_ struct{} `type:"structure"`

	// The AWS OpsWorks volume ID, which is the GUID that AWS OpsWorks assigned
	// to the instance when you registered the volume with the stack, not the Amazon
	// EC2 volume ID.
	//
	// VolumeId is a required field
	VolumeId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DeregisterVolumeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterVolumeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DeregisterVolumeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DeregisterVolumeInput"}
	if s.VolumeId == nil {
		invalidParams.Add(request.NewErrParamRequired("VolumeId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DeregisterVolumeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DeregisterVolumeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DeregisterVolumeOutput) GoString() string {
	return s.String()
}

type DescribeAgentVersionsInput struct {
	_ struct{} `type:"structure"`

	// The configuration manager.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeAgentVersionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeAgentVersionsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeAgentVersions request.
type DescribeAgentVersionsOutput struct {
	_ struct{} `type:"structure"`

	// The agent versions for the specified stack or configuration manager. Note
	// that this value is the complete version number, not the abbreviated number
	// used by the console.
	AgentVersions []*AgentVersion `type:"list"`
}

// String returns the string representation
func (s DescribeAgentVersionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeAgentVersionsOutput) GoString() string {
	return s.String()
}

type DescribeAppsInput struct {
	_ struct{} `type:"structure"`

	// 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.
	AppIds []*string `type:"list"`

	// The app stack ID. If you use this parameter, DescribeApps returns a description
	// of the apps in the specified stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeAppsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeAppsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeApps request.
type DescribeAppsOutput struct {
	_ struct{} `type:"structure"`

	// An array of App objects that describe the specified apps.
	Apps []*App `type:"list"`
}

// String returns the string representation
func (s DescribeAppsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeAppsOutput) GoString() string {
	return s.String()
}

type DescribeCommandsInput struct {
	_ struct{} `type:"structure"`

	// 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.
	CommandIds []*string `type:"list"`

	// The deployment ID. If you include this parameter, DescribeCommands returns
	// a description of the commands associated with the specified deployment.
	DeploymentId *string `type:"string"`

	// The instance ID. If you include this parameter, DescribeCommands returns
	// a description of the commands associated with the specified instance.
	InstanceId *string `type:"string"`
}

// String returns the string representation
func (s DescribeCommandsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeCommandsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeCommands request.
type DescribeCommandsOutput struct {
	_ struct{} `type:"structure"`

	// An array of Command objects that describe each of the specified commands.
	Commands []*Command `type:"list"`
}

// String returns the string representation
func (s DescribeCommandsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeCommandsOutput) GoString() string {
	return s.String()
}

type DescribeDeploymentsInput struct {
	_ struct{} `type:"structure"`

	// The app ID. If you include this parameter, DescribeDeployments returns a
	// description of the commands associated with the specified app.
	AppId *string `type:"string"`

	// 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.
	DeploymentIds []*string `type:"list"`

	// The stack ID. If you include this parameter, DescribeDeployments returns
	// a description of the commands associated with the specified stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeDeploymentsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDeploymentsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeDeployments request.
type DescribeDeploymentsOutput struct {
	_ struct{} `type:"structure"`

	// An array of Deployment objects that describe the deployments.
	Deployments []*Deployment `type:"list"`
}

// String returns the string representation
func (s DescribeDeploymentsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeDeploymentsOutput) GoString() string {
	return s.String()
}

type DescribeEcsClustersInput struct {
	_ struct{} `type:"structure"`

	// A list of ARNs, one for each cluster to be described.
	EcsClusterArns []*string `type:"list"`

	// To receive a paginated response, use this parameter to specify the maximum
	// number of results to be returned with a single call. If the number of available
	// results exceeds this maximum, the response includes a NextToken value that
	// you can assign to the NextToken request parameter to get the next set of
	// results.
	MaxResults *int64 `type:"integer"`

	// If the previous paginated request did not return all of the remaining results,
	// the response object'sNextToken parameter value is set to a token. To retrieve
	// the next set of results, call DescribeEcsClusters again and assign that token
	// to the request object's NextToken parameter. If there are no remaining results,
	// the previous response object's NextToken parameter is set to null.
	NextToken *string `type:"string"`

	// A stack ID. DescribeEcsClusters returns a description of the cluster that
	// is registered with the stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeEcsClustersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeEcsClustersInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeEcsClusters request.
type DescribeEcsClustersOutput struct {
	_ struct{} `type:"structure"`

	// A list of EcsCluster objects containing the cluster descriptions.
	EcsClusters []*EcsCluster `type:"list"`

	// If a paginated request does not return all of the remaining results, this
	// parameter is set to a token that you can assign to the request object's NextToken
	// parameter to retrieve the next set of results. If the previous paginated
	// request returned all of the remaining results, this parameter is set to null.
	NextToken *string `type:"string"`
}

// String returns the string representation
func (s DescribeEcsClustersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeEcsClustersOutput) GoString() string {
	return s.String()
}

type DescribeElasticIpsInput struct {
	_ struct{} `type:"structure"`

	// The instance ID. If you include this parameter, DescribeElasticIps returns
	// a description of the Elastic IP addresses associated with the specified instance.
	InstanceId *string `type:"string"`

	// 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.
	Ips []*string `type:"list"`

	// A stack ID. If you include this parameter, DescribeElasticIps returns a description
	// of the Elastic IP addresses that are registered with the specified stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeElasticIpsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeElasticIpsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeElasticIps request.
type DescribeElasticIpsOutput struct {
	_ struct{} `type:"structure"`

	// An ElasticIps object that describes the specified Elastic IP addresses.
	ElasticIps []*ElasticIp `type:"list"`
}

// String returns the string representation
func (s DescribeElasticIpsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeElasticIpsOutput) GoString() string {
	return s.String()
}

type DescribeElasticLoadBalancersInput struct {
	_ struct{} `type:"structure"`

	// A list of layer IDs. The action describes the Elastic Load Balancing instances
	// for the specified layers.
	LayerIds []*string `type:"list"`

	// A stack ID. The action describes the stack's Elastic Load Balancing instances.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeElasticLoadBalancersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeElasticLoadBalancersInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeElasticLoadBalancers request.
type DescribeElasticLoadBalancersOutput struct {
	_ struct{} `type:"structure"`

	// A list of ElasticLoadBalancer objects that describe the specified Elastic
	// Load Balancing instances.
	ElasticLoadBalancers []*ElasticLoadBalancer `type:"list"`
}

// String returns the string representation
func (s DescribeElasticLoadBalancersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeElasticLoadBalancersOutput) GoString() string {
	return s.String()
}

type DescribeInstancesInput struct {
	_ struct{} `type:"structure"`

	// 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.
	InstanceIds []*string `type:"list"`

	// A layer ID. If you use this parameter, DescribeInstances returns descriptions
	// of the instances associated with the specified layer.
	LayerId *string `type:"string"`

	// A stack ID. If you use this parameter, DescribeInstances returns descriptions
	// of the instances associated with the specified stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeInstancesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeInstancesInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeInstances request.
type DescribeInstancesOutput struct {
	_ struct{} `type:"structure"`

	// An array of Instance objects that describe the instances.
	Instances []*Instance `type:"list"`
}

// String returns the string representation
func (s DescribeInstancesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeInstancesOutput) GoString() string {
	return s.String()
}

type DescribeLayersInput struct {
	_ struct{} `type:"structure"`

	// 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.
	LayerIds []*string `type:"list"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeLayersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeLayersInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeLayers request.
type DescribeLayersOutput struct {
	_ struct{} `type:"structure"`

	// An array of Layer objects that describe the layers.
	Layers []*Layer `type:"list"`
}

// String returns the string representation
func (s DescribeLayersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeLayersOutput) GoString() string {
	return s.String()
}

type DescribeLoadBasedAutoScalingInput struct {
	_ struct{} `type:"structure"`

	// An array of layer IDs.
	//
	// LayerIds is a required field
	LayerIds []*string `type:"list" required:"true"`
}

// String returns the string representation
func (s DescribeLoadBasedAutoScalingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeLoadBasedAutoScalingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeLoadBasedAutoScalingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeLoadBasedAutoScalingInput"}
	if s.LayerIds == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerIds"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a DescribeLoadBasedAutoScaling request.
type DescribeLoadBasedAutoScalingOutput struct {
	_ struct{} `type:"structure"`

	// An array of LoadBasedAutoScalingConfiguration objects that describe each
	// layer's configuration.
	LoadBasedAutoScalingConfigurations []*LoadBasedAutoScalingConfiguration `type:"list"`
}

// String returns the string representation
func (s DescribeLoadBasedAutoScalingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeLoadBasedAutoScalingOutput) GoString() string {
	return s.String()
}

type DescribeMyUserProfileInput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DescribeMyUserProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeMyUserProfileInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeMyUserProfile request.
type DescribeMyUserProfileOutput struct {
	_ struct{} `type:"structure"`

	// A UserProfile object that describes the user's SSH information.
	UserProfile *SelfUserProfile `type:"structure"`
}

// String returns the string representation
func (s DescribeMyUserProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeMyUserProfileOutput) GoString() string {
	return s.String()
}

type DescribePermissionsInput struct {
	_ struct{} `type:"structure"`

	// The user's IAM ARN. This can also be a federated user's ARN. For more information
	// about IAM ARNs, see Using Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	IamUserArn *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribePermissionsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribePermissionsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribePermissions request.
type DescribePermissionsOutput struct {
	_ struct{} `type:"structure"`

	// An array of Permission objects that describe the stack permissions.
	//
	//    * If the request object contains only a stack ID, the array contains a
	//    Permission object with permissions for each of the stack IAM ARNs.
	//
	//    * If the request object contains only an IAM ARN, the array contains a
	//    Permission object with permissions for each of the user's stack IDs.
	//
	//    * If the request contains a stack ID and an IAM ARN, the array contains
	//    a single Permission object with permissions for the specified stack and
	//    IAM ARN.
	Permissions []*Permission `type:"list"`
}

// String returns the string representation
func (s DescribePermissionsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribePermissionsOutput) GoString() string {
	return s.String()
}

type DescribeRaidArraysInput struct {
	_ struct{} `type:"structure"`

	// The instance ID. If you use this parameter, DescribeRaidArrays returns descriptions
	// of the RAID arrays associated with the specified instance.
	InstanceId *string `type:"string"`

	// 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.
	RaidArrayIds []*string `type:"list"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeRaidArraysInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeRaidArraysInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeRaidArrays request.
type DescribeRaidArraysOutput struct {
	_ struct{} `type:"structure"`

	// A RaidArrays object that describes the specified RAID arrays.
	RaidArrays []*RaidArray `type:"list"`
}

// String returns the string representation
func (s DescribeRaidArraysOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeRaidArraysOutput) GoString() string {
	return s.String()
}

type DescribeRdsDbInstancesInput struct {
	_ struct{} `type:"structure"`

	// An array containing the ARNs of the instances to be described.
	RdsDbInstanceArns []*string `type:"list"`

	// The stack ID that the instances are registered with. The operation returns
	// descriptions of all registered Amazon RDS instances.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribeRdsDbInstancesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeRdsDbInstancesInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeRdsDbInstancesInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeRdsDbInstancesInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a DescribeRdsDbInstances request.
type DescribeRdsDbInstancesOutput struct {
	_ struct{} `type:"structure"`

	// An a array of RdsDbInstance objects that describe the instances.
	RdsDbInstances []*RdsDbInstance `type:"list"`
}

// String returns the string representation
func (s DescribeRdsDbInstancesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeRdsDbInstancesOutput) GoString() string {
	return s.String()
}

type DescribeServiceErrorsInput struct {
	_ struct{} `type:"structure"`

	// The instance ID. If you use this parameter, DescribeServiceErrors returns
	// descriptions of the errors associated with the specified instance.
	InstanceId *string `type:"string"`

	// 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.
	ServiceErrorIds []*string `type:"list"`

	// The stack ID. If you use this parameter, DescribeServiceErrors returns descriptions
	// of the errors associated with the specified stack.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s DescribeServiceErrorsInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeServiceErrorsInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeServiceErrors request.
type DescribeServiceErrorsOutput struct {
	_ struct{} `type:"structure"`

	// An array of ServiceError objects that describe the specified service errors.
	ServiceErrors []*ServiceError `type:"list"`
}

// String returns the string representation
func (s DescribeServiceErrorsOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeServiceErrorsOutput) GoString() string {
	return s.String()
}

type DescribeStackProvisioningParametersInput struct {
	_ struct{} `type:"structure"`

	// The stack ID
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribeStackProvisioningParametersInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStackProvisioningParametersInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeStackProvisioningParametersInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeStackProvisioningParametersInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a DescribeStackProvisioningParameters request.
type DescribeStackProvisioningParametersOutput struct {
	_ struct{} `type:"structure"`

	// The AWS OpsWorks agent installer's URL.
	AgentInstallerUrl *string `type:"string"`

	// An embedded object that contains the provisioning parameters.
	Parameters map[string]*string `type:"map"`
}

// String returns the string representation
func (s DescribeStackProvisioningParametersOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStackProvisioningParametersOutput) GoString() string {
	return s.String()
}

type DescribeStackSummaryInput struct {
	_ struct{} `type:"structure"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DescribeStackSummaryInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStackSummaryInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeStackSummaryInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeStackSummaryInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a DescribeStackSummary request.
type DescribeStackSummaryOutput struct {
	_ struct{} `type:"structure"`

	// A StackSummary object that contains the results.
	StackSummary *StackSummary `type:"structure"`
}

// String returns the string representation
func (s DescribeStackSummaryOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStackSummaryOutput) GoString() string {
	return s.String()
}

type DescribeStacksInput struct {
	_ struct{} `type:"structure"`

	// An array of stack IDs that specify the stacks to be described. If you omit
	// this parameter, DescribeStacks returns a description of every stack.
	StackIds []*string `type:"list"`
}

// String returns the string representation
func (s DescribeStacksInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStacksInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeStacks request.
type DescribeStacksOutput struct {
	_ struct{} `type:"structure"`

	// An array of Stack objects that describe the stacks.
	Stacks []*Stack `type:"list"`
}

// String returns the string representation
func (s DescribeStacksOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeStacksOutput) GoString() string {
	return s.String()
}

type DescribeTimeBasedAutoScalingInput struct {
	_ struct{} `type:"structure"`

	// An array of instance IDs.
	//
	// InstanceIds is a required field
	InstanceIds []*string `type:"list" required:"true"`
}

// String returns the string representation
func (s DescribeTimeBasedAutoScalingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeTimeBasedAutoScalingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DescribeTimeBasedAutoScalingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DescribeTimeBasedAutoScalingInput"}
	if s.InstanceIds == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceIds"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a DescribeTimeBasedAutoScaling request.
type DescribeTimeBasedAutoScalingOutput struct {
	_ struct{} `type:"structure"`

	// An array of TimeBasedAutoScalingConfiguration objects that describe the configuration
	// for the specified instances.
	TimeBasedAutoScalingConfigurations []*TimeBasedAutoScalingConfiguration `type:"list"`
}

// String returns the string representation
func (s DescribeTimeBasedAutoScalingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeTimeBasedAutoScalingOutput) GoString() string {
	return s.String()
}

type DescribeUserProfilesInput struct {
	_ struct{} `type:"structure"`

	// An array of IAM or federated user ARNs that identify the users to be described.
	IamUserArns []*string `type:"list"`
}

// String returns the string representation
func (s DescribeUserProfilesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeUserProfilesInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeUserProfiles request.
type DescribeUserProfilesOutput struct {
	_ struct{} `type:"structure"`

	// A Users object that describes the specified users.
	UserProfiles []*UserProfile `type:"list"`
}

// String returns the string representation
func (s DescribeUserProfilesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeUserProfilesOutput) GoString() string {
	return s.String()
}

type DescribeVolumesInput struct {
	_ struct{} `type:"structure"`

	// The instance ID. If you use this parameter, DescribeVolumes returns descriptions
	// of the volumes associated with the specified instance.
	InstanceId *string `type:"string"`

	// The RAID array ID. If you use this parameter, DescribeVolumes returns descriptions
	// of the volumes associated with the specified RAID array.
	RaidArrayId *string `type:"string"`

	// A stack ID. The action describes the stack's registered Amazon EBS volumes.
	StackId *string `type:"string"`

	// 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.
	VolumeIds []*string `type:"list"`
}

// String returns the string representation
func (s DescribeVolumesInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeVolumesInput) GoString() string {
	return s.String()
}

// Contains the response to a DescribeVolumes request.
type DescribeVolumesOutput struct {
	_ struct{} `type:"structure"`

	// An array of volume IDs.
	Volumes []*Volume `type:"list"`
}

// String returns the string representation
func (s DescribeVolumesOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DescribeVolumesOutput) GoString() string {
	return s.String()
}

type DetachElasticLoadBalancerInput struct {
	_ struct{} `type:"structure"`

	// The Elastic Load Balancing instance's name.
	//
	// ElasticLoadBalancerName is a required field
	ElasticLoadBalancerName *string `type:"string" required:"true"`

	// The ID of the layer that the Elastic Load Balancing instance is attached
	// to.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DetachElasticLoadBalancerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DetachElasticLoadBalancerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DetachElasticLoadBalancerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DetachElasticLoadBalancerInput"}
	if s.ElasticLoadBalancerName == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticLoadBalancerName"))
	}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DetachElasticLoadBalancerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DetachElasticLoadBalancerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DetachElasticLoadBalancerOutput) GoString() string {
	return s.String()
}

type DisassociateElasticIpInput struct {
	_ struct{} `type:"structure"`

	// The Elastic IP address.
	//
	// ElasticIp is a required field
	ElasticIp *string `type:"string" required:"true"`
}

// String returns the string representation
func (s DisassociateElasticIpInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DisassociateElasticIpInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DisassociateElasticIpInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DisassociateElasticIpInput"}
	if s.ElasticIp == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticIp"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type DisassociateElasticIpOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s DisassociateElasticIpOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s DisassociateElasticIpOutput) GoString() string {
	return s.String()
}

// Describes an Amazon EBS volume. This data type maps directly to the Amazon
// EC2 EbsBlockDevice (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
// data type.
type EbsBlockDevice struct {
	_ struct{} `type:"structure"`

	// Whether the volume is deleted on instance termination.
	DeleteOnTermination *bool `type:"boolean"`

	// The number of I/O operations per second (IOPS) that the volume supports.
	// For more information, see EbsBlockDevice (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html).
	Iops *int64 `type:"integer"`

	// The snapshot ID.
	SnapshotId *string `type:"string"`

	// The volume size, in GiB. For more information, see EbsBlockDevice (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html).
	VolumeSize *int64 `type:"integer"`

	// The volume type. gp2 for General Purpose (SSD) volumes, io1 for Provisioned
	// IOPS (SSD) volumes, and standard for Magnetic volumes.
	VolumeType *string `type:"string" enum:"VolumeType"`
}

// String returns the string representation
func (s EbsBlockDevice) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EbsBlockDevice) GoString() string {
	return s.String()
}

// Describes a registered Amazon ECS cluster.
type EcsCluster struct {
	_ struct{} `type:"structure"`

	// The cluster's ARN.
	EcsClusterArn *string `type:"string"`

	// The cluster name.
	EcsClusterName *string `type:"string"`

	// The time and date that the cluster was registered with the stack.
	RegisteredAt *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s EcsCluster) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EcsCluster) GoString() string {
	return s.String()
}

// Describes an Elastic IP address.
type ElasticIp struct {
	_ struct{} `type:"structure"`

	// The domain.
	Domain *string `type:"string"`

	// The ID of the instance that the address is attached to.
	InstanceId *string `type:"string"`

	// The IP address.
	Ip *string `type:"string"`

	// The name.
	Name *string `type:"string"`

	// The AWS region. For more information, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	Region *string `type:"string"`
}

// String returns the string representation
func (s ElasticIp) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ElasticIp) GoString() string {
	return s.String()
}

// Describes an Elastic Load Balancing instance.
type ElasticLoadBalancer struct {
	_ struct{} `type:"structure"`

	// A list of Availability Zones.
	AvailabilityZones []*string `type:"list"`

	// The instance's public DNS name.
	DnsName *string `type:"string"`

	// A list of the EC2 instances that the Elastic Load Balancing instance is managing
	// traffic for.
	Ec2InstanceIds []*string `type:"list"`

	// The Elastic Load Balancing instance's name.
	ElasticLoadBalancerName *string `type:"string"`

	// The ID of the layer that the instance is attached to.
	LayerId *string `type:"string"`

	// The instance's AWS region.
	Region *string `type:"string"`

	// The ID of the stack that the instance is associated with.
	StackId *string `type:"string"`

	// A list of subnet IDs, if the stack is running in a VPC.
	SubnetIds []*string `type:"list"`

	// The VPC ID.
	VpcId *string `type:"string"`
}

// String returns the string representation
func (s ElasticLoadBalancer) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ElasticLoadBalancer) GoString() string {
	return s.String()
}

// Represents an app's environment variable.
type EnvironmentVariable struct {
	_ struct{} `type:"structure"`

	// (Required) The environment variable's name, which can consist of up to 64
	// characters and must be specified. The name can contain upper- and lowercase
	// letters, numbers, and underscores (_), but it must start with a letter or
	// underscore.
	//
	// Key is a required field
	Key *string `type:"string" required:"true"`

	// (Optional) Whether the variable's value will be returned by the DescribeApps
	// action. To conceal an environment variable's value, set Secure to true. DescribeApps
	// then returns *****FILTERED***** instead of the actual value. The default
	// value for Secure is false.
	Secure *bool `type:"boolean"`

	// (Optional) The environment variable's value, which can be left empty. If
	// you specify a value, it can contain up to 256 characters, which must all
	// be printable.
	//
	// Value is a required field
	Value *string `type:"string" required:"true"`
}

// String returns the string representation
func (s EnvironmentVariable) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s EnvironmentVariable) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EnvironmentVariable) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EnvironmentVariable"}
	if s.Key == nil {
		invalidParams.Add(request.NewErrParamRequired("Key"))
	}
	if s.Value == nil {
		invalidParams.Add(request.NewErrParamRequired("Value"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type GetHostnameSuggestionInput struct {
	_ struct{} `type:"structure"`

	// The layer ID.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s GetHostnameSuggestionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetHostnameSuggestionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GetHostnameSuggestionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GetHostnameSuggestionInput"}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a GetHostnameSuggestion request.
type GetHostnameSuggestionOutput struct {
	_ struct{} `type:"structure"`

	// The generated host name.
	Hostname *string `type:"string"`

	// The layer ID.
	LayerId *string `type:"string"`
}

// String returns the string representation
func (s GetHostnameSuggestionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GetHostnameSuggestionOutput) GoString() string {
	return s.String()
}

type GrantAccessInput struct {
	_ struct{} `type:"structure"`

	// The instance's AWS OpsWorks ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`

	// The length of time (in minutes) that the grant is valid. When the grant expires
	// at the end of this period, the user will no longer be able to use the credentials
	// to log in. If the user is logged in at the time, he or she automatically
	// will be logged out.
	ValidForInMinutes *int64 `min:"60" type:"integer"`
}

// String returns the string representation
func (s GrantAccessInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GrantAccessInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GrantAccessInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GrantAccessInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}
	if s.ValidForInMinutes != nil && *s.ValidForInMinutes < 60 {
		invalidParams.Add(request.NewErrParamMinValue("ValidForInMinutes", 60))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a GrantAccess request.
type GrantAccessOutput struct {
	_ struct{} `type:"structure"`

	// A TemporaryCredential object that contains the data needed to log in to the
	// instance by RDP clients, such as the Microsoft Remote Desktop Connection.
	TemporaryCredential *TemporaryCredential `type:"structure"`
}

// String returns the string representation
func (s GrantAccessOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s GrantAccessOutput) GoString() string {
	return s.String()
}

// Describes an instance.
type Instance struct {
	_ struct{} `type:"structure"`

	// The agent version. This parameter is set to INHERIT if the instance inherits
	// the default stack setting or to a a version number for a fixed agent version.
	AgentVersion *string `type:"string"`

	// A custom AMI ID to be used to create the instance. For more information,
	// see Instances (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html)
	AmiId *string `type:"string"`

	// The instance architecture: "i386" or "x86_64".
	Architecture *string `type:"string" enum:"Architecture"`

	// For load-based or time-based instances, the type.
	AutoScalingType *string `type:"string" enum:"AutoScalingType"`

	// The instance Availability Zone. For more information, see Regions and Endpoints
	// (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	AvailabilityZone *string `type:"string"`

	// An array of BlockDeviceMapping objects that specify the instance's block
	// device mappings.
	BlockDeviceMappings []*BlockDeviceMapping `type:"list"`

	// The time that the instance was created.
	CreatedAt *string `type:"string"`

	// Whether this is an Amazon EBS-optimized instance.
	EbsOptimized *bool `type:"boolean"`

	// The ID of the associated Amazon EC2 instance.
	Ec2InstanceId *string `type:"string"`

	// For container instances, the Amazon ECS cluster's ARN.
	EcsClusterArn *string `type:"string"`

	// For container instances, the instance's ARN.
	EcsContainerInstanceArn *string `type:"string"`

	// The instance Elastic IP address  (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html).
	ElasticIp *string `type:"string"`

	// The instance host name.
	Hostname *string `type:"string"`

	// For registered instances, the infrastructure class: ec2 or on-premises.
	InfrastructureClass *string `type:"string"`

	// Whether to install operating system and package updates when the instance
	// boots. The default value is true. If this value is set to false, you must
	// then update your instances manually by using CreateDeployment to run the
	// update_dependencies stack command or by 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.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// The instance ID.
	InstanceId *string `type:"string"`

	// The ARN of the instance's IAM profile. For more information about IAM ARNs,
	// see Using Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	InstanceProfileArn *string `type:"string"`

	// The instance type, such as t2.micro.
	InstanceType *string `type:"string"`

	// The ID of the last service error. For more information, call DescribeServiceErrors.
	LastServiceErrorId *string `type:"string"`

	// An array containing the instance layer IDs.
	LayerIds []*string `type:"list"`

	// The instance's operating system.
	Os *string `type:"string"`

	// The instance's platform.
	Platform *string `type:"string"`

	// The The instance's private DNS name.
	PrivateDns *string `type:"string"`

	// The instance's private IP address.
	PrivateIp *string `type:"string"`

	// The instance public DNS name.
	PublicDns *string `type:"string"`

	// The instance public IP address.
	PublicIp *string `type:"string"`

	// For registered instances, who performed the registration.
	RegisteredBy *string `type:"string"`

	// The instance's reported AWS OpsWorks agent version.
	ReportedAgentVersion *string `type:"string"`

	// For registered instances, the reported operating system.
	ReportedOs *ReportedOs `type:"structure"`

	// The instance's root device type. For more information, see Storage for the
	// Root Device (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	RootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// The root device volume ID.
	RootDeviceVolumeId *string `type:"string"`

	// An array containing the instance security group IDs.
	SecurityGroupIds []*string `type:"list"`

	// The SSH key's Deep Security Agent (DSA) fingerprint.
	SshHostDsaKeyFingerprint *string `type:"string"`

	// The SSH key's RSA fingerprint.
	SshHostRsaKeyFingerprint *string `type:"string"`

	// The instance's Amazon EC2 key-pair name.
	SshKeyName *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`

	// The instance status:
	//
	//    * booting
	//
	//    * connection_lost
	//
	//    * online
	//
	//    * pending
	//
	//    * rebooting
	//
	//    * requested
	//
	//    * running_setup
	//
	//    * setup_failed
	//
	//    * shutting_down
	//
	//    * start_failed
	//
	//    * stop_failed
	//
	//    * stopped
	//
	//    * stopping
	//
	//    * terminated
	//
	//    * terminating
	Status *string `type:"string"`

	// The instance's subnet ID; applicable only if the stack is running in a VPC.
	SubnetId *string `type:"string"`

	// The instance's tenancy option, such as dedicated or host.
	Tenancy *string `type:"string"`

	// The instance's virtualization type: paravirtual or hvm.
	VirtualizationType *string `type:"string" enum:"VirtualizationType"`
}

// String returns the string representation
func (s Instance) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Instance) GoString() string {
	return s.String()
}

// Contains a description of an Amazon EC2 instance from the Amazon EC2 metadata
// service. For more information, see Instance Metadata and User Data (http://docs.aws.amazon.com/sdkfornet/latest/apidocs/Index.html).
type InstanceIdentity struct {
	_ struct{} `type:"structure"`

	// A JSON document that contains the metadata.
	Document *string `type:"string"`

	// A signature that can be used to verify the document's accuracy and authenticity.
	Signature *string `type:"string"`
}

// String returns the string representation
func (s InstanceIdentity) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s InstanceIdentity) GoString() string {
	return s.String()
}

// Describes how many instances a stack has for each status.
type InstancesCount struct {
	_ struct{} `type:"structure"`

	// The number of instances in the Assigning state.
	Assigning *int64 `type:"integer"`

	// The number of instances with booting status.
	Booting *int64 `type:"integer"`

	// The number of instances with connection_lost status.
	ConnectionLost *int64 `type:"integer"`

	// The number of instances in the Deregistering state.
	Deregistering *int64 `type:"integer"`

	// The number of instances with online status.
	Online *int64 `type:"integer"`

	// The number of instances with pending status.
	Pending *int64 `type:"integer"`

	// The number of instances with rebooting status.
	Rebooting *int64 `type:"integer"`

	// The number of instances in the Registered state.
	Registered *int64 `type:"integer"`

	// The number of instances in the Registering state.
	Registering *int64 `type:"integer"`

	// The number of instances with requested status.
	Requested *int64 `type:"integer"`

	// The number of instances with running_setup status.
	RunningSetup *int64 `type:"integer"`

	// The number of instances with setup_failed status.
	SetupFailed *int64 `type:"integer"`

	// The number of instances with shutting_down status.
	ShuttingDown *int64 `type:"integer"`

	// The number of instances with start_failed status.
	StartFailed *int64 `type:"integer"`

	// The number of instances with stopped status.
	Stopped *int64 `type:"integer"`

	// The number of instances with stopping status.
	Stopping *int64 `type:"integer"`

	// The number of instances with terminated status.
	Terminated *int64 `type:"integer"`

	// The number of instances with terminating status.
	Terminating *int64 `type:"integer"`

	// The number of instances in the Unassigning state.
	Unassigning *int64 `type:"integer"`
}

// String returns the string representation
func (s InstancesCount) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s InstancesCount) GoString() string {
	return s.String()
}

// Describes a layer.
type Layer struct {
	_ struct{} `type:"structure"`

	// The layer attributes.
	//
	// For the HaproxyStatsPassword, MysqlRootPassword, and GangliaPassword attributes,
	// AWS OpsWorks returns *****FILTERED***** instead of the actual value
	//
	// For an ECS Cluster layer, AWS OpsWorks the EcsClusterArn attribute is set
	// to the cluster's ARN.
	Attributes map[string]*string `type:"map"`

	// Whether to automatically assign an Elastic IP address (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
	// to the layer's instances. For more information, see How to Edit a Layer (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignElasticIps *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignPublicIps *bool `type:"boolean"`

	// Date when the layer was created.
	CreatedAt *string `type:"string"`

	// The ARN of the default IAM profile to be used for the layer's EC2 instances.
	// For more information about IAM ARNs, see Using Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	CustomInstanceProfileArn *string `type:"string"`

	// A JSON formatted string containing the layer's custom stack configuration
	// and deployment attributes.
	CustomJson *string `type:"string"`

	// A LayerCustomRecipes object that specifies the layer's custom recipes.
	CustomRecipes *Recipes `type:"structure"`

	// An array containing the layer's custom security group IDs.
	CustomSecurityGroupIds []*string `type:"list"`

	// AWS OpsWorks supports five lifecycle events: setup, configuration, deploy,
	// undeploy, and shutdown. For each layer, AWS OpsWorks runs a set of standard
	// recipes for each event. In addition, you can provide custom recipes for any
	// or all layers and events. AWS OpsWorks runs custom event recipes after the
	// standard recipes. LayerCustomRecipes specifies the custom recipes for a particular
	// layer to be run in response to each of the five events.
	//
	// To specify a recipe, use the cookbook's directory name in the repository
	// followed by two colons and the recipe name, which is the recipe's file name
	// without the .rb extension. For example: phpapp2::dbsetup specifies the dbsetup.rb
	// recipe in the repository's phpapp2 folder.
	DefaultRecipes *Recipes `type:"structure"`

	// An array containing the layer's security group names.
	DefaultSecurityGroupNames []*string `type:"list"`

	// Whether auto healing is disabled for the layer.
	EnableAutoHealing *bool `type:"boolean"`

	// Whether to install operating system and package updates when the instance
	// boots. The default value is true. If this value is set 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.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// The layer ID.
	LayerId *string `type:"string"`

	// A LifeCycleEventConfiguration object that specifies the Shutdown event configuration.
	LifecycleEventConfiguration *LifecycleEventConfiguration `type:"structure"`

	// The layer name.
	Name *string `type:"string"`

	// An array of Package objects that describe the layer's packages.
	Packages []*string `type:"list"`

	// The layer short name.
	Shortname *string `type:"string"`

	// The layer stack ID.
	StackId *string `type:"string"`

	// The layer type.
	Type *string `type:"string" enum:"LayerType"`

	// Whether the layer uses Amazon EBS-optimized instances.
	UseEbsOptimizedInstances *bool `type:"boolean"`

	// A VolumeConfigurations object that describes the layer's Amazon EBS volumes.
	VolumeConfigurations []*VolumeConfiguration `type:"list"`
}

// String returns the string representation
func (s Layer) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Layer) GoString() string {
	return s.String()
}

// Specifies the lifecycle event configuration
type LifecycleEventConfiguration struct {
	_ struct{} `type:"structure"`

	// A ShutdownEventConfiguration object that specifies the Shutdown event configuration.
	Shutdown *ShutdownEventConfiguration `type:"structure"`
}

// String returns the string representation
func (s LifecycleEventConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s LifecycleEventConfiguration) GoString() string {
	return s.String()
}

// Describes a layer's load-based auto scaling configuration.
type LoadBasedAutoScalingConfiguration struct {
	_ struct{} `type:"structure"`

	// An AutoScalingThresholds object that describes the downscaling configuration,
	// which defines how and when AWS OpsWorks reduces the number of instances.
	DownScaling *AutoScalingThresholds `type:"structure"`

	// Whether load-based auto scaling is enabled for the layer.
	Enable *bool `type:"boolean"`

	// The layer ID.
	LayerId *string `type:"string"`

	// An AutoScalingThresholds object that describes the upscaling configuration,
	// which defines how and when AWS OpsWorks increases the number of instances.
	UpScaling *AutoScalingThresholds `type:"structure"`
}

// String returns the string representation
func (s LoadBasedAutoScalingConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s LoadBasedAutoScalingConfiguration) GoString() string {
	return s.String()
}

// Describes stack or user permissions.
type Permission struct {
	_ struct{} `type:"structure"`

	// Whether the user can use SSH.
	AllowSsh *bool `type:"boolean"`

	// Whether the user can use sudo.
	AllowSudo *bool `type:"boolean"`

	// The Amazon Resource Name (ARN) for an AWS Identity and Access Management
	// (IAM) role. For more information about IAM ARNs, see Using Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	IamUserArn *string `type:"string"`

	// The user's permission level, which must be the following:
	//
	//    * deny
	//
	//    * show
	//
	//    * deploy
	//
	//    * manage
	//
	//    * iam_only
	//
	// For more information on the permissions associated with these levels, see
	// Managing User Permissions (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html)
	Level *string `type:"string"`

	// A stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s Permission) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Permission) GoString() string {
	return s.String()
}

// Describes an instance's RAID array.
type RaidArray struct {
	_ struct{} `type:"structure"`

	// The array's Availability Zone. For more information, see Regions and Endpoints
	// (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	AvailabilityZone *string `type:"string"`

	// When the RAID array was created.
	CreatedAt *string `type:"string"`

	// The array's Linux device. For example /dev/mdadm0.
	Device *string `type:"string"`

	// The instance ID.
	InstanceId *string `type:"string"`

	// For PIOPS volumes, the IOPS per disk.
	Iops *int64 `type:"integer"`

	// The array's mount point.
	MountPoint *string `type:"string"`

	// The array name.
	Name *string `type:"string"`

	// The number of disks in the array.
	NumberOfDisks *int64 `type:"integer"`

	// The array ID.
	RaidArrayId *string `type:"string"`

	// The RAID level (http://en.wikipedia.org/wiki/Standard_RAID_levels).
	RaidLevel *int64 `type:"integer"`

	// The array's size.
	Size *int64 `type:"integer"`

	// The stack ID.
	StackId *string `type:"string"`

	// The volume type, standard or PIOPS.
	VolumeType *string `type:"string"`
}

// String returns the string representation
func (s RaidArray) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RaidArray) GoString() string {
	return s.String()
}

// Describes an Amazon RDS instance.
type RdsDbInstance struct {
	_ struct{} `type:"structure"`

	// The instance's address.
	Address *string `type:"string"`

	// The DB instance identifier.
	DbInstanceIdentifier *string `type:"string"`

	// AWS OpsWorks returns *****FILTERED***** instead of the actual value.
	DbPassword *string `type:"string"`

	// The master user name.
	DbUser *string `type:"string"`

	// The instance's database engine.
	Engine *string `type:"string"`

	// Set to true if AWS OpsWorks was unable to discover the Amazon RDS instance.
	// AWS OpsWorks attempts to discover the instance only once. If this value is
	// set to true, you must deregister the instance and then register it again.
	MissingOnRds *bool `type:"boolean"`

	// The instance's ARN.
	RdsDbInstanceArn *string `type:"string"`

	// The instance's AWS region.
	Region *string `type:"string"`

	// The ID of the stack that the instance is registered with.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s RdsDbInstance) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RdsDbInstance) GoString() string {
	return s.String()
}

type RebootInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RebootInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RebootInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RebootInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RebootInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type RebootInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s RebootInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RebootInstanceOutput) GoString() string {
	return s.String()
}

// AWS OpsWorks supports five lifecycle events: setup, configuration, deploy,
// undeploy, and shutdown. For each layer, AWS OpsWorks runs a set of standard
// recipes for each event. In addition, you can provide custom recipes for any
// or all layers and events. AWS OpsWorks runs custom event recipes after the
// standard recipes. LayerCustomRecipes specifies the custom recipes for a particular
// layer to be run in response to each of the five events.
//
// To specify a recipe, use the cookbook's directory name in the repository
// followed by two colons and the recipe name, which is the recipe's file name
// without the .rb extension. For example: phpapp2::dbsetup specifies the dbsetup.rb
// recipe in the repository's phpapp2 folder.
type Recipes struct {
	_ struct{} `type:"structure"`

	// An array of custom recipe names to be run following a configure event.
	Configure []*string `type:"list"`

	// An array of custom recipe names to be run following a deploy event.
	Deploy []*string `type:"list"`

	// An array of custom recipe names to be run following a setup event.
	Setup []*string `type:"list"`

	// An array of custom recipe names to be run following a shutdown event.
	Shutdown []*string `type:"list"`

	// An array of custom recipe names to be run following a undeploy event.
	Undeploy []*string `type:"list"`
}

// String returns the string representation
func (s Recipes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Recipes) GoString() string {
	return s.String()
}

type RegisterEcsClusterInput struct {
	_ struct{} `type:"structure"`

	// The cluster's ARN.
	//
	// EcsClusterArn is a required field
	EcsClusterArn *string `type:"string" required:"true"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RegisterEcsClusterInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterEcsClusterInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterEcsClusterInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterEcsClusterInput"}
	if s.EcsClusterArn == nil {
		invalidParams.Add(request.NewErrParamRequired("EcsClusterArn"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a RegisterEcsCluster request.
type RegisterEcsClusterOutput struct {
	_ struct{} `type:"structure"`

	// The cluster's ARN.
	EcsClusterArn *string `type:"string"`
}

// String returns the string representation
func (s RegisterEcsClusterOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterEcsClusterOutput) GoString() string {
	return s.String()
}

type RegisterElasticIpInput struct {
	_ struct{} `type:"structure"`

	// The Elastic IP address.
	//
	// ElasticIp is a required field
	ElasticIp *string `type:"string" required:"true"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RegisterElasticIpInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterElasticIpInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterElasticIpInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterElasticIpInput"}
	if s.ElasticIp == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticIp"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a RegisterElasticIp request.
type RegisterElasticIpOutput struct {
	_ struct{} `type:"structure"`

	// The Elastic IP address.
	ElasticIp *string `type:"string"`
}

// String returns the string representation
func (s RegisterElasticIpOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterElasticIpOutput) GoString() string {
	return s.String()
}

type RegisterInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance's hostname.
	Hostname *string `type:"string"`

	// An InstanceIdentity object that contains the instance's identity.
	InstanceIdentity *InstanceIdentity `type:"structure"`

	// The instance's private IP address.
	PrivateIp *string `type:"string"`

	// The instance's public IP address.
	PublicIp *string `type:"string"`

	// The instances public RSA key. This key is used to encrypt communication between
	// the instance and the service.
	RsaPublicKey *string `type:"string"`

	// The instances public RSA key fingerprint.
	RsaPublicKeyFingerprint *string `type:"string"`

	// The ID of the stack that the instance is to be registered with.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RegisterInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterInstanceInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a RegisterInstanceResult request.
type RegisterInstanceOutput struct {
	_ struct{} `type:"structure"`

	// The registered instance's AWS OpsWorks ID.
	InstanceId *string `type:"string"`
}

// String returns the string representation
func (s RegisterInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterInstanceOutput) GoString() string {
	return s.String()
}

type RegisterRdsDbInstanceInput struct {
	_ struct{} `type:"structure"`

	// The database password.
	//
	// DbPassword is a required field
	DbPassword *string `type:"string" required:"true"`

	// The database's master user name.
	//
	// DbUser is a required field
	DbUser *string `type:"string" required:"true"`

	// The Amazon RDS instance's ARN.
	//
	// RdsDbInstanceArn is a required field
	RdsDbInstanceArn *string `type:"string" required:"true"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RegisterRdsDbInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterRdsDbInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterRdsDbInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterRdsDbInstanceInput"}
	if s.DbPassword == nil {
		invalidParams.Add(request.NewErrParamRequired("DbPassword"))
	}
	if s.DbUser == nil {
		invalidParams.Add(request.NewErrParamRequired("DbUser"))
	}
	if s.RdsDbInstanceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RdsDbInstanceArn"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type RegisterRdsDbInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s RegisterRdsDbInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterRdsDbInstanceOutput) GoString() string {
	return s.String()
}

type RegisterVolumeInput struct {
	_ struct{} `type:"structure"`

	// The Amazon EBS volume ID.
	Ec2VolumeId *string `type:"string"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s RegisterVolumeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterVolumeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *RegisterVolumeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "RegisterVolumeInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Contains the response to a RegisterVolume request.
type RegisterVolumeOutput struct {
	_ struct{} `type:"structure"`

	// The volume ID.
	VolumeId *string `type:"string"`
}

// String returns the string representation
func (s RegisterVolumeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s RegisterVolumeOutput) GoString() string {
	return s.String()
}

// A registered instance's reported operating system.
type ReportedOs struct {
	_ struct{} `type:"structure"`

	// The operating system family.
	Family *string `type:"string"`

	// The operating system name.
	Name *string `type:"string"`

	// The operating system version.
	Version *string `type:"string"`
}

// String returns the string representation
func (s ReportedOs) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ReportedOs) GoString() string {
	return s.String()
}

// Describes a user's SSH information.
type SelfUserProfile struct {
	_ struct{} `type:"structure"`

	// The user's IAM ARN.
	IamUserArn *string `type:"string"`

	// The user's name.
	Name *string `type:"string"`

	// The user's SSH public key.
	SshPublicKey *string `type:"string"`

	// The user's SSH user name.
	SshUsername *string `type:"string"`
}

// String returns the string representation
func (s SelfUserProfile) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SelfUserProfile) GoString() string {
	return s.String()
}

// Describes an AWS OpsWorks service error.
type ServiceError struct {
	_ struct{} `type:"structure"`

	// When the error occurred.
	CreatedAt *string `type:"string"`

	// The instance ID.
	InstanceId *string `type:"string"`

	// A message that describes the error.
	Message *string `type:"string"`

	// The error ID.
	ServiceErrorId *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`

	// The error type.
	Type *string `type:"string"`
}

// String returns the string representation
func (s ServiceError) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ServiceError) GoString() string {
	return s.String()
}

type SetLoadBasedAutoScalingInput struct {
	_ struct{} `type:"structure"`

	// 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.
	DownScaling *AutoScalingThresholds `type:"structure"`

	// Enables load-based auto scaling for the layer.
	Enable *bool `type:"boolean"`

	// The layer ID.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`

	// 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.
	UpScaling *AutoScalingThresholds `type:"structure"`
}

// String returns the string representation
func (s SetLoadBasedAutoScalingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetLoadBasedAutoScalingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetLoadBasedAutoScalingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetLoadBasedAutoScalingInput"}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}
	if s.DownScaling != nil {
		if err := s.DownScaling.Validate(); err != nil {
			invalidParams.AddNested("DownScaling", err.(request.ErrInvalidParams))
		}
	}
	if s.UpScaling != nil {
		if err := s.UpScaling.Validate(); err != nil {
			invalidParams.AddNested("UpScaling", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type SetLoadBasedAutoScalingOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s SetLoadBasedAutoScalingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetLoadBasedAutoScalingOutput) GoString() string {
	return s.String()
}

type SetPermissionInput struct {
	_ struct{} `type:"structure"`

	// The user is allowed to use SSH to communicate with the instance.
	AllowSsh *bool `type:"boolean"`

	// The user is allowed to use sudo to elevate privileges.
	AllowSudo *bool `type:"boolean"`

	// The user's IAM ARN. This can also be a federated user's ARN.
	//
	// IamUserArn is a required field
	IamUserArn *string `type:"string" required:"true"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html).
	Level *string `type:"string"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s SetPermissionInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetPermissionInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetPermissionInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetPermissionInput"}
	if s.IamUserArn == nil {
		invalidParams.Add(request.NewErrParamRequired("IamUserArn"))
	}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type SetPermissionOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s SetPermissionOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetPermissionOutput) GoString() string {
	return s.String()
}

type SetTimeBasedAutoScalingInput struct {
	_ struct{} `type:"structure"`

	// An AutoScalingSchedule with the instance schedule.
	AutoScalingSchedule *WeeklyAutoScalingSchedule `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s SetTimeBasedAutoScalingInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetTimeBasedAutoScalingInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SetTimeBasedAutoScalingInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SetTimeBasedAutoScalingInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type SetTimeBasedAutoScalingOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s SetTimeBasedAutoScalingOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SetTimeBasedAutoScalingOutput) GoString() string {
	return s.String()
}

// The Shutdown event configuration.
type ShutdownEventConfiguration struct {
	_ struct{} `type:"structure"`

	// Whether to enable Elastic Load Balancing connection draining. For more information,
	// see Connection Draining (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#conn-drain)
	DelayUntilElbConnectionsDrained *bool `type:"boolean"`

	// The time, in seconds, that AWS OpsWorks will wait after triggering a Shutdown
	// event before shutting down an instance.
	ExecutionTimeout *int64 `type:"integer"`
}

// String returns the string representation
func (s ShutdownEventConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s ShutdownEventConfiguration) GoString() string {
	return s.String()
}

// Contains the information required to retrieve an app or cookbook from a repository.
// For more information, see Creating Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)
// or Custom Recipes and Cookbooks (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html).
type Source struct {
	_ struct{} `type:"structure"`

	// When included in a request, the parameter depends on the repository type.
	//
	//    * For Amazon S3 bundles, set Password to the appropriate IAM secret access
	//    key.
	//
	//    * For HTTP bundles and Subversion repositories, set Password to the password.
	//
	// For more information on how to safely handle IAM credentials, see http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html
	// (http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).
	//
	// In responses, AWS OpsWorks returns *****FILTERED***** instead of the actual
	// value.
	Password *string `type:"string"`

	// The application's version. AWS OpsWorks enables you to easily deploy new
	// versions of an application. One of the simplest approaches is to have branches
	// or revisions in your repository that represent different versions that can
	// potentially be deployed.
	Revision *string `type:"string"`

	// In requests, the repository's SSH key.
	//
	// In responses, AWS OpsWorks returns *****FILTERED***** instead of the actual
	// value.
	SshKey *string `type:"string"`

	// The repository type.
	Type *string `type:"string" enum:"SourceType"`

	// The source URL.
	Url *string `type:"string"`

	// This parameter depends on the repository type.
	//
	//    * For Amazon S3 bundles, set Username to the appropriate IAM access key
	//    ID.
	//
	//    * For HTTP bundles, Git repositories, and Subversion repositories, set
	//    Username to the user name.
	Username *string `type:"string"`
}

// String returns the string representation
func (s Source) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Source) GoString() string {
	return s.String()
}

// Describes an app's SSL configuration.
type SslConfiguration struct {
	_ struct{} `type:"structure"`

	// The contents of the certificate's domain.crt file.
	//
	// Certificate is a required field
	Certificate *string `type:"string" required:"true"`

	// Optional. Can be used to specify an intermediate certificate authority key
	// or client authentication.
	Chain *string `type:"string"`

	// The private key; the contents of the certificate's domain.kex file.
	//
	// PrivateKey is a required field
	PrivateKey *string `type:"string" required:"true"`
}

// String returns the string representation
func (s SslConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s SslConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SslConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SslConfiguration"}
	if s.Certificate == nil {
		invalidParams.Add(request.NewErrParamRequired("Certificate"))
	}
	if s.PrivateKey == nil {
		invalidParams.Add(request.NewErrParamRequired("PrivateKey"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Describes a stack.
type Stack struct {
	_ struct{} `type:"structure"`

	// The agent version. This parameter is set to LATEST for auto-update. or a
	// version number for a fixed agent version.
	AgentVersion *string `type:"string"`

	// The stack's ARN.
	Arn *string `type:"string"`

	// The stack's attributes.
	Attributes map[string]*string `type:"map"`

	// A ChefConfiguration object that specifies whether to enable Berkshelf and
	// the Berkshelf version. For more information, see Create a New Stack (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	ChefConfiguration *ChefConfiguration `type:"structure"`

	// The configuration manager.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// The date when the stack was created.
	CreatedAt *string `type:"string"`

	// Contains the information required to retrieve an app or cookbook from a repository.
	// For more information, see Creating Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)
	// or Custom Recipes and Cookbooks (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html).
	CustomCookbooksSource *Source `type:"structure"`

	// A JSON object that contains user-defined attributes to be added to the stack
	// configuration and deployment attributes. You can use custom JSON to override
	// the corresponding default stack configuration attribute values or to pass
	// data to recipes. The string should be in the following format:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html).
	CustomJson *string `type:"string"`

	// The stack's default Availability Zone. For more information, see Regions
	// and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	DefaultAvailabilityZone *string `type:"string"`

	// 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
	// (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	DefaultInstanceProfileArn *string `type:"string"`

	// The stack's default operating system.
	DefaultOs *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	DefaultRootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// A default Amazon EC2 key pair for the stack's instances. You can override
	// this value when you create or update an instance.
	DefaultSshKeyName *string `type:"string"`

	// The default subnet ID; applicable only if the stack is running in a VPC.
	DefaultSubnetId *string `type:"string"`

	// The stack host name theme, with spaces replaced by underscores.
	HostnameTheme *string `type:"string"`

	// The stack name.
	Name *string `type:"string"`

	// The stack AWS region, such as "ap-northeast-2". For more information about
	// AWS regions, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	Region *string `type:"string"`

	// The stack AWS Identity and Access Management (IAM) role.
	ServiceRoleArn *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`

	// Whether the stack uses custom cookbooks.
	UseCustomCookbooks *bool `type:"boolean"`

	// Whether the stack automatically associates the AWS OpsWorks built-in security
	// groups with the stack's layers.
	UseOpsworksSecurityGroups *bool `type:"boolean"`

	// The VPC ID; applicable only if the stack is running in a VPC.
	VpcId *string `type:"string"`
}

// String returns the string representation
func (s Stack) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Stack) GoString() string {
	return s.String()
}

// Describes the configuration manager.
type StackConfigurationManager struct {
	_ struct{} `type:"structure"`

	// The name. This parameter must be set to "Chef".
	Name *string `type:"string"`

	// The Chef version. This parameter must be set to 12, 11.10, or 11.4 for Linux
	// stacks, and to 12.2 for Windows stacks. The default value for Linux stacks
	// is 11.4.
	Version *string `type:"string"`
}

// String returns the string representation
func (s StackConfigurationManager) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StackConfigurationManager) GoString() string {
	return s.String()
}

// Summarizes the number of layers, instances, and apps in a stack.
type StackSummary struct {
	_ struct{} `type:"structure"`

	// The number of apps.
	AppsCount *int64 `type:"integer"`

	// The stack's ARN.
	Arn *string `type:"string"`

	// An InstancesCount object with the number of instances in each status.
	InstancesCount *InstancesCount `type:"structure"`

	// The number of layers.
	LayersCount *int64 `type:"integer"`

	// The stack name.
	Name *string `type:"string"`

	// The stack ID.
	StackId *string `type:"string"`
}

// String returns the string representation
func (s StackSummary) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StackSummary) GoString() string {
	return s.String()
}

type StartInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s StartInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StartInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type StartInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s StartInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StartInstanceOutput) GoString() string {
	return s.String()
}

type StartStackInput struct {
	_ struct{} `type:"structure"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s StartStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StartStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StartStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StartStackInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type StartStackOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s StartStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StartStackOutput) GoString() string {
	return s.String()
}

type StopInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s StopInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StopInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type StopInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s StopInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StopInstanceOutput) GoString() string {
	return s.String()
}

type StopStackInput struct {
	_ struct{} `type:"structure"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s StopStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StopStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *StopStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "StopStackInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type StopStackOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s StopStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s StopStackOutput) GoString() string {
	return s.String()
}

// Contains the data needed by RDP clients such as the Microsoft Remote Desktop
// Connection to log in to the instance.
type TemporaryCredential struct {
	_ struct{} `type:"structure"`

	// The instance's AWS OpsWorks ID.
	InstanceId *string `type:"string"`

	// The password.
	Password *string `type:"string"`

	// The user name.
	Username *string `type:"string"`

	// The length of time (in minutes) that the grant is valid. When the grant expires,
	// at the end of this period, the user will no longer be able to use the credentials
	// to log in. If they are logged in at the time, they will be automatically
	// logged out.
	ValidForInMinutes *int64 `type:"integer"`
}

// String returns the string representation
func (s TemporaryCredential) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s TemporaryCredential) GoString() string {
	return s.String()
}

// Describes an instance's time-based auto scaling configuration.
type TimeBasedAutoScalingConfiguration struct {
	_ struct{} `type:"structure"`

	// A WeeklyAutoScalingSchedule object with the instance schedule.
	AutoScalingSchedule *WeeklyAutoScalingSchedule `type:"structure"`

	// The instance ID.
	InstanceId *string `type:"string"`
}

// String returns the string representation
func (s TimeBasedAutoScalingConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s TimeBasedAutoScalingConfiguration) GoString() string {
	return s.String()
}

type UnassignInstanceInput struct {
	_ struct{} `type:"structure"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s UnassignInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UnassignInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UnassignInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UnassignInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UnassignInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UnassignInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UnassignInstanceOutput) GoString() string {
	return s.String()
}

type UnassignVolumeInput struct {
	_ struct{} `type:"structure"`

	// The volume ID.
	//
	// VolumeId is a required field
	VolumeId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s UnassignVolumeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UnassignVolumeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UnassignVolumeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UnassignVolumeInput"}
	if s.VolumeId == nil {
		invalidParams.Add(request.NewErrParamRequired("VolumeId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UnassignVolumeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UnassignVolumeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UnassignVolumeOutput) GoString() string {
	return s.String()
}

type UpdateAppInput struct {
	_ struct{} `type:"structure"`

	// The app ID.
	//
	// AppId is a required field
	AppId *string `type:"string" required:"true"`

	// A Source object that specifies the app repository.
	AppSource *Source `type:"structure"`

	// One or more user-defined key/value pairs to be added to the stack attributes.
	Attributes map[string]*string `type:"map"`

	// The app's data sources.
	DataSources []*DataSource `type:"list"`

	// A description of the app.
	Description *string `type:"string"`

	// The app's virtual host settings, with multiple domains separated by commas.
	// For example: 'www.example.com, example.com'
	Domains []*string `type:"list"`

	// Whether SSL is enabled for the app.
	EnableSsl *bool `type:"boolean"`

	// An array of EnvironmentVariable objects that specify environment variables
	// to be associated with the app. After you deploy the app, these variables
	// are defined on the associated app server instances.For more information,
	// see  Environment Variables (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment).
	//
	// There is no specific limit on the number of environment variables. However,
	// the size of the associated data structure - which includes the variables'
	// names, values, and protected flag values - cannot exceed 10 KB (10240 Bytes).
	// This limit should accommodate most if not all use cases. Exceeding it will
	// cause an exception with the message, "Environment: is too large (maximum
	// is 10KB)."
	//
	// 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.
	Environment []*EnvironmentVariable `type:"list"`

	// The app name.
	Name *string `type:"string"`

	// An SslConfiguration object with the SSL configuration.
	SslConfiguration *SslConfiguration `type:"structure"`

	// The app type.
	Type *string `type:"string" enum:"AppType"`
}

// String returns the string representation
func (s UpdateAppInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateAppInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateAppInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateAppInput"}
	if s.AppId == nil {
		invalidParams.Add(request.NewErrParamRequired("AppId"))
	}
	if s.Environment != nil {
		for i, v := range s.Environment {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Environment", i), err.(request.ErrInvalidParams))
			}
		}
	}
	if s.SslConfiguration != nil {
		if err := s.SslConfiguration.Validate(); err != nil {
			invalidParams.AddNested("SslConfiguration", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateAppOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateAppOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateAppOutput) GoString() string {
	return s.String()
}

type UpdateElasticIpInput struct {
	_ struct{} `type:"structure"`

	// The address.
	//
	// ElasticIp is a required field
	ElasticIp *string `type:"string" required:"true"`

	// The new name.
	Name *string `type:"string"`
}

// String returns the string representation
func (s UpdateElasticIpInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateElasticIpInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateElasticIpInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateElasticIpInput"}
	if s.ElasticIp == nil {
		invalidParams.Add(request.NewErrParamRequired("ElasticIp"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateElasticIpOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateElasticIpOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateElasticIpOutput) GoString() string {
	return s.String()
}

type UpdateInstanceInput struct {
	_ struct{} `type:"structure"`

	// The default AWS OpsWorks agent version. You have the following options:
	//
	//    * INHERIT - Use the stack's default agent version setting.
	//
	//    * version_number - Use the specified agent version. This value overrides
	//    the stack's default setting. To update the agent version, you must edit
	//    the instance configuration and specify a new version. AWS OpsWorks then
	//    automatically installs that version on the instance.
	//
	// The default setting is INHERIT. To specify an agent version, you must use
	// the complete version number, not the abbreviated number shown on the console.
	// For a list of available agent version numbers, call DescribeAgentVersions.
	AgentVersion *string `type:"string"`

	// The ID of the AMI that was used to create the instance. The value of this
	// parameter must be the same AMI ID that the instance is already using. You
	// cannot apply a new AMI to an instance by running UpdateInstance. UpdateInstance
	// does not work on instances that are using custom AMIs.
	AmiId *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).
	Architecture *string `type:"string" enum:"Architecture"`

	// For load-based or time-based instances, the type. Windows stacks can use
	// only time-based instances.
	AutoScalingType *string `type:"string" enum:"AutoScalingType"`

	// This property cannot be updated.
	EbsOptimized *bool `type:"boolean"`

	// The instance host name.
	Hostname *string `type:"string"`

	// 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 by
	// 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.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// The instance ID.
	//
	// InstanceId is a required field
	InstanceId *string `type:"string" required:"true"`

	// The instance type, such as t2.micro. For a list of supported instance types,
	// open the stack in the console, choose Instances, and choose + Instance. The
	// Size list contains the currently supported types. For more information, see
	// Instance Families and Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).
	// The parameter values that you use to specify the various types are in the
	// API Name column of the Available Instance Types table.
	InstanceType *string `type:"string"`

	// The instance's layer IDs.
	LayerIds []*string `type:"list"`

	// The instance's operating system, which must be set to one of the following.
	// You cannot update an instance that is using a custom AMI.
	//
	//    * A supported Linux operating system: An Amazon Linux version, such as
	//    Amazon Linux 2016.03, Amazon Linux 2015.09, or Amazon Linux 2015.03.
	//
	//    * A supported Ubuntu operating system, such as Ubuntu 16.04 LTS, Ubuntu
	//    14.04 LTS, or Ubuntu 12.04 LTS.
	//
	//    * CentOS 7
	//
	//    * Red Hat Enterprise Linux 7
	//
	//    * A supported Windows operating system, such as Microsoft Windows Server
	//    2012 R2 Base, Microsoft Windows Server 2012 R2 with SQL Server Express,
	//    Microsoft Windows Server 2012 R2 with SQL Server Standard, or Microsoft
	//    Windows Server 2012 R2 with SQL Server Web.
	//
	// For more information on the supported operating systems, see AWS OpsWorks
	// Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	//
	// The default option is the current Amazon Linux version. If you set this parameter
	// to Custom, you must use the AmiId parameter to specify the custom AMI that
	// you want to use. For more information on the supported operating systems,
	// see Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	// For more information on how to use custom AMIs with OpsWorks, see Using Custom
	// AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	//
	// You can specify a different Linux operating system for the updated stack,
	// but you cannot change from Linux to Windows or Windows to Linux.
	Os *string `type:"string"`

	// The instance's Amazon EC2 key name.
	SshKeyName *string `type:"string"`
}

// String returns the string representation
func (s UpdateInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateInstanceInput"}
	if s.InstanceId == nil {
		invalidParams.Add(request.NewErrParamRequired("InstanceId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateInstanceOutput) GoString() string {
	return s.String()
}

type UpdateLayerInput struct {
	_ struct{} `type:"structure"`

	// One or more user-defined key/value pairs to be added to the stack attributes.
	Attributes map[string]*string `type:"map"`

	// Whether to automatically assign an Elastic IP address (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
	// to the layer's instances. For more information, see How to Edit a Layer (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignElasticIps *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html).
	AutoAssignPublicIps *bool `type:"boolean"`

	// 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 (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	CustomInstanceProfileArn *string `type:"string"`

	// A JSON-formatted string containing custom stack configuration and deployment
	// attributes to be installed on the layer's instances. For more information,
	// see  Using Custom JSON (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html).
	CustomJson *string `type:"string"`

	// A LayerCustomRecipes object that specifies the layer's custom recipes.
	CustomRecipes *Recipes `type:"structure"`

	// An array containing the layer's custom security group IDs.
	CustomSecurityGroupIds []*string `type:"list"`

	// Whether to disable auto healing for the layer.
	EnableAutoHealing *bool `type:"boolean"`

	// 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.
	InstallUpdatesOnBoot *bool `type:"boolean"`

	// The layer ID.
	//
	// LayerId is a required field
	LayerId *string `type:"string" required:"true"`

	LifecycleEventConfiguration *LifecycleEventConfiguration `type:"structure"`

	// The layer name, which is used by the console.
	Name *string `type:"string"`

	// An array of Package objects that describe the layer's packages.
	Packages []*string `type:"list"`

	// For custom layers only, use this parameter to specify the layer's 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/.
	//
	// The built-in layers' short names are defined by AWS OpsWorks. For more information,
	// see the Layer Reference (http://docs.aws.amazon.com/opsworks/latest/userguide/layers.html)
	Shortname *string `type:"string"`

	// Whether to use Amazon EBS-optimized instances.
	UseEbsOptimizedInstances *bool `type:"boolean"`

	// A VolumeConfigurations object that describes the layer's Amazon EBS volumes.
	VolumeConfigurations []*VolumeConfiguration `type:"list"`
}

// String returns the string representation
func (s UpdateLayerInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateLayerInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateLayerInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateLayerInput"}
	if s.LayerId == nil {
		invalidParams.Add(request.NewErrParamRequired("LayerId"))
	}
	if s.VolumeConfigurations != nil {
		for i, v := range s.VolumeConfigurations {
			if v == nil {
				continue
			}
			if err := v.Validate(); err != nil {
				invalidParams.AddNested(fmt.Sprintf("%s[%v]", "VolumeConfigurations", i), err.(request.ErrInvalidParams))
			}
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateLayerOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateLayerOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateLayerOutput) GoString() string {
	return s.String()
}

type UpdateMyUserProfileInput struct {
	_ struct{} `type:"structure"`

	// The user's SSH public key.
	SshPublicKey *string `type:"string"`
}

// String returns the string representation
func (s UpdateMyUserProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateMyUserProfileInput) GoString() string {
	return s.String()
}

type UpdateMyUserProfileOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateMyUserProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateMyUserProfileOutput) GoString() string {
	return s.String()
}

type UpdateRdsDbInstanceInput struct {
	_ struct{} `type:"structure"`

	// The database password.
	DbPassword *string `type:"string"`

	// The master user name.
	DbUser *string `type:"string"`

	// The Amazon RDS instance's ARN.
	//
	// RdsDbInstanceArn is a required field
	RdsDbInstanceArn *string `type:"string" required:"true"`
}

// String returns the string representation
func (s UpdateRdsDbInstanceInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRdsDbInstanceInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateRdsDbInstanceInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateRdsDbInstanceInput"}
	if s.RdsDbInstanceArn == nil {
		invalidParams.Add(request.NewErrParamRequired("RdsDbInstanceArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateRdsDbInstanceOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateRdsDbInstanceOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateRdsDbInstanceOutput) GoString() string {
	return s.String()
}

type UpdateStackInput struct {
	_ struct{} `type:"structure"`

	// The default AWS OpsWorks agent version. You have the following options:
	//
	//    * Auto-update - Set this parameter to LATEST. AWS OpsWorks automatically
	//    installs new agent versions on the stack's instances as soon as they are
	//    available.
	//
	//    * Fixed version - Set this parameter to your preferred agent version.
	//    To update the agent version, you must edit the stack configuration and
	//    specify a new version. AWS OpsWorks then automatically installs that version
	//    on the stack's instances.
	//
	// The default setting is LATEST. To specify an agent version, you must use
	// the complete version number, not the abbreviated number shown on the console.
	// For a list of available agent version numbers, call DescribeAgentVersions.
	//
	// You can also specify an agent version when you create or update an instance,
	// which overrides the stack's default setting.
	AgentVersion *string `type:"string"`

	// One or more user-defined key-value pairs to be added to the stack attributes.
	Attributes map[string]*string `type:"map"`

	// 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 (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	ChefConfiguration *ChefConfiguration `type:"structure"`

	// The configuration manager. When you update a stack, we recommend that you
	// use the configuration manager to specify the Chef version: 12, 11.10, or
	// 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
	// Linux stacks is currently 11.4.
	ConfigurationManager *StackConfigurationManager `type:"structure"`

	// Contains the information required to retrieve an app or cookbook from a repository.
	// For more information, see Creating Apps (http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)
	// or Custom Recipes and Cookbooks (http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html).
	CustomCookbooksSource *Source `type:"structure"`

	// A string that contains user-defined, custom JSON. It can be used to override
	// the corresponding default stack configuration JSON values or to pass data
	// to recipes. The string should be in the following format:
	//
	// "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
	//
	// For more information on custom JSON, see Use Custom JSON to Modify the Stack
	// Configuration Attributes (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html).
	CustomJson *string `type:"string"`

	// The stack's default Availability Zone, which must be in the stack's region.
	// For more information, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	// If you also specify a value for DefaultSubnetId, the subnet must be in the
	// same zone. For more information, see CreateStack.
	DefaultAvailabilityZone *string `type:"string"`

	// 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
	// (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html).
	DefaultInstanceProfileArn *string `type:"string"`

	// The stack's operating system, which must be set to one of the following:
	//
	//    * A supported Linux operating system: An Amazon Linux version, such as
	//    Amazon Linux 2016.03, Amazon Linux 2015.09, or Amazon Linux 2015.03.
	//
	//    * A supported Ubuntu operating system, such as Ubuntu 16.04 LTS, Ubuntu
	//    14.04 LTS, or Ubuntu 12.04 LTS.
	//
	//    * CentOS 7
	//
	//    * Red Hat Enterprise Linux 7
	//
	//    * A supported Windows operating system, such as Microsoft Windows Server
	//    2012 R2 Base, Microsoft Windows Server 2012 R2 with SQL Server Express,
	//    Microsoft Windows Server 2012 R2 with SQL Server Standard, or Microsoft
	//    Windows Server 2012 R2 with SQL Server Web.
	//
	//    * A custom AMI: Custom. You specify the custom AMI you want to use when
	//    you create instances. For more information on how to use custom AMIs with
	//    OpsWorks, see Using Custom AMIs (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html).
	//
	// The default option is the stack's current operating system. For more information
	// on the supported operating systems, see AWS OpsWorks Operating Systems (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html).
	DefaultOs *string `type:"string"`

	// 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 (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
	DefaultRootDeviceType *string `type:"string" enum:"RootDeviceType"`

	// A default Amazon EC2 key-pair name. The default value is none. If you specify
	// a key-pair name, AWS OpsWorks installs the public key on the instance and
	// you can use the private key with an SSH client to log in to the instance.
	// For more information, see  Using SSH to Communicate with an Instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html)
	// and  Managing SSH Access (http://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html).
	// You can override this setting by specifying a different key pair, or no key
	// pair, when you  create an instance (http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html).
	DefaultSshKeyName *string `type:"string"`

	// 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.
	DefaultSubnetId *string `type:"string"`

	// The stack's new host name theme, with spaces 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
	//
	//    * Europe_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.
	HostnameTheme *string `type:"string"`

	// The stack's new name.
	Name *string `type:"string"`

	// Do not use this parameter. You cannot update a stack's service role.
	ServiceRoleArn *string `type:"string"`

	// The stack ID.
	//
	// StackId is a required field
	StackId *string `type:"string" required:"true"`

	// Whether the stack uses custom cookbooks.
	UseCustomCookbooks *bool `type:"boolean"`

	// 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 provide your own custom security groups instead of using the
	// built-in 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. Custom security
	//    groups are required only for those layers that need custom settings.
	//
	// For more information, see Create a New Stack (http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html).
	UseOpsworksSecurityGroups *bool `type:"boolean"`
}

// String returns the string representation
func (s UpdateStackInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateStackInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateStackInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateStackInput"}
	if s.StackId == nil {
		invalidParams.Add(request.NewErrParamRequired("StackId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateStackOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateStackOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateStackOutput) GoString() string {
	return s.String()
}

type UpdateUserProfileInput struct {
	_ struct{} `type:"structure"`

	// Whether users can specify their own SSH public key through the My Settings
	// page. For more information, see Managing User Permissions (http://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html).
	AllowSelfManagement *bool `type:"boolean"`

	// The user IAM ARN. This can also be a federated user's ARN.
	//
	// IamUserArn is a required field
	IamUserArn *string `type:"string" required:"true"`

	// The user's new SSH public key.
	SshPublicKey *string `type:"string"`

	// 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.
	SshUsername *string `type:"string"`
}

// String returns the string representation
func (s UpdateUserProfileInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateUserProfileInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateUserProfileInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateUserProfileInput"}
	if s.IamUserArn == nil {
		invalidParams.Add(request.NewErrParamRequired("IamUserArn"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateUserProfileOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateUserProfileOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateUserProfileOutput) GoString() string {
	return s.String()
}

type UpdateVolumeInput struct {
	_ struct{} `type:"structure"`

	// The new mount point.
	MountPoint *string `type:"string"`

	// The new name.
	Name *string `type:"string"`

	// The volume ID.
	//
	// VolumeId is a required field
	VolumeId *string `type:"string" required:"true"`
}

// String returns the string representation
func (s UpdateVolumeInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateVolumeInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *UpdateVolumeInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "UpdateVolumeInput"}
	if s.VolumeId == nil {
		invalidParams.Add(request.NewErrParamRequired("VolumeId"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

type UpdateVolumeOutput struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation
func (s UpdateVolumeOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UpdateVolumeOutput) GoString() string {
	return s.String()
}

// Describes a user's SSH information.
type UserProfile struct {
	_ struct{} `type:"structure"`

	// Whether users can specify their own SSH public key through the My Settings
	// page. For more information, see Managing User Permissions (http://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html).
	AllowSelfManagement *bool `type:"boolean"`

	// The user's IAM ARN.
	IamUserArn *string `type:"string"`

	// The user's name.
	Name *string `type:"string"`

	// The user's SSH public key.
	SshPublicKey *string `type:"string"`

	// The user's SSH user name.
	SshUsername *string `type:"string"`
}

// String returns the string representation
func (s UserProfile) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s UserProfile) GoString() string {
	return s.String()
}

// Describes an instance's Amazon EBS volume.
type Volume struct {
	_ struct{} `type:"structure"`

	// The volume Availability Zone. For more information, see Regions and Endpoints
	// (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	AvailabilityZone *string `type:"string"`

	// The device name.
	Device *string `type:"string"`

	// The Amazon EC2 volume ID.
	Ec2VolumeId *string `type:"string"`

	// The instance ID.
	InstanceId *string `type:"string"`

	// For PIOPS volumes, the IOPS per disk.
	Iops *int64 `type:"integer"`

	// The volume mount point. For example, "/mnt/disk1".
	MountPoint *string `type:"string"`

	// The volume name.
	Name *string `type:"string"`

	// The RAID array ID.
	RaidArrayId *string `type:"string"`

	// The AWS region. For more information about AWS regions, see Regions and Endpoints
	// (http://docs.aws.amazon.com/general/latest/gr/rande.html).
	Region *string `type:"string"`

	// The volume size.
	Size *int64 `type:"integer"`

	// The value returned by DescribeVolumes (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumes.html).
	Status *string `type:"string"`

	// The volume ID.
	VolumeId *string `type:"string"`

	// The volume type, standard or PIOPS.
	VolumeType *string `type:"string"`
}

// String returns the string representation
func (s Volume) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s Volume) GoString() string {
	return s.String()
}

// Describes an Amazon EBS volume configuration.
type VolumeConfiguration struct {
	_ struct{} `type:"structure"`

	// For PIOPS volumes, the IOPS per disk.
	Iops *int64 `type:"integer"`

	// The volume mount point. For example "/dev/sdh".
	//
	// MountPoint is a required field
	MountPoint *string `type:"string" required:"true"`

	// The number of disks in the volume.
	//
	// NumberOfDisks is a required field
	NumberOfDisks *int64 `type:"integer" required:"true"`

	// The volume RAID level (http://en.wikipedia.org/wiki/Standard_RAID_levels).
	RaidLevel *int64 `type:"integer"`

	// The volume size.
	//
	// Size is a required field
	Size *int64 `type:"integer" required:"true"`

	// The volume type:
	//
	//    * standard - Magnetic
	//
	//    * io1 - Provisioned IOPS (SSD)
	//
	//    * gp2 - General Purpose (SSD)
	VolumeType *string `type:"string"`
}

// String returns the string representation
func (s VolumeConfiguration) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s VolumeConfiguration) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VolumeConfiguration) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VolumeConfiguration"}
	if s.MountPoint == nil {
		invalidParams.Add(request.NewErrParamRequired("MountPoint"))
	}
	if s.NumberOfDisks == nil {
		invalidParams.Add(request.NewErrParamRequired("NumberOfDisks"))
	}
	if s.Size == nil {
		invalidParams.Add(request.NewErrParamRequired("Size"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// Describes a time-based instance's auto scaling schedule. The schedule consists
// of a set of key-value pairs.
//
//    * The key is the time period (a UTC hour) and must be an integer from
//    0 - 23.
//
//    * The value indicates whether the instance should be online or offline
//    for the specified period, and must be set to "on" or "off"
//
// The default setting for all time periods is off, so you use the following
// parameters primarily to specify the online periods. You don't have to explicitly
// specify offline periods unless you want to change an online period to an
// offline period.
//
// The following example specifies that the instance should be online for four
// hours, from UTC 1200 - 1600. It will be off for the remainder of the day.
//
// { "12":"on", "13":"on", "14":"on", "15":"on" }
type WeeklyAutoScalingSchedule struct {
	_ struct{} `type:"structure"`

	// The schedule for Friday.
	Friday map[string]*string `type:"map"`

	// The schedule for Monday.
	Monday map[string]*string `type:"map"`

	// The schedule for Saturday.
	Saturday map[string]*string `type:"map"`

	// The schedule for Sunday.
	Sunday map[string]*string `type:"map"`

	// The schedule for Thursday.
	Thursday map[string]*string `type:"map"`

	// The schedule for Tuesday.
	Tuesday map[string]*string `type:"map"`

	// The schedule for Wednesday.
	Wednesday map[string]*string `type:"map"`
}

// String returns the string representation
func (s WeeklyAutoScalingSchedule) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation
func (s WeeklyAutoScalingSchedule) GoString() string {
	return s.String()
}

const (
	// AppAttributesKeysDocumentRoot is a AppAttributesKeys enum value
	AppAttributesKeysDocumentRoot = "DocumentRoot"

	// AppAttributesKeysRailsEnv is a AppAttributesKeys enum value
	AppAttributesKeysRailsEnv = "RailsEnv"

	// AppAttributesKeysAutoBundleOnDeploy is a AppAttributesKeys enum value
	AppAttributesKeysAutoBundleOnDeploy = "AutoBundleOnDeploy"

	// AppAttributesKeysAwsFlowRubySettings is a AppAttributesKeys enum value
	AppAttributesKeysAwsFlowRubySettings = "AwsFlowRubySettings"
)

const (
	// AppTypeAwsFlowRuby is a AppType enum value
	AppTypeAwsFlowRuby = "aws-flow-ruby"

	// AppTypeJava is a AppType enum value
	AppTypeJava = "java"

	// AppTypeRails is a AppType enum value
	AppTypeRails = "rails"

	// AppTypePhp is a AppType enum value
	AppTypePhp = "php"

	// AppTypeNodejs is a AppType enum value
	AppTypeNodejs = "nodejs"

	// AppTypeStatic is a AppType enum value
	AppTypeStatic = "static"

	// AppTypeOther is a AppType enum value
	AppTypeOther = "other"
)

const (
	// ArchitectureX8664 is a Architecture enum value
	ArchitectureX8664 = "x86_64"

	// ArchitectureI386 is a Architecture enum value
	ArchitectureI386 = "i386"
)

const (
	// AutoScalingTypeLoad is a AutoScalingType enum value
	AutoScalingTypeLoad = "load"

	// AutoScalingTypeTimer is a AutoScalingType enum value
	AutoScalingTypeTimer = "timer"
)

const (
	// DeploymentCommandNameInstallDependencies is a DeploymentCommandName enum value
	DeploymentCommandNameInstallDependencies = "install_dependencies"

	// DeploymentCommandNameUpdateDependencies is a DeploymentCommandName enum value
	DeploymentCommandNameUpdateDependencies = "update_dependencies"

	// DeploymentCommandNameUpdateCustomCookbooks is a DeploymentCommandName enum value
	DeploymentCommandNameUpdateCustomCookbooks = "update_custom_cookbooks"

	// DeploymentCommandNameExecuteRecipes is a DeploymentCommandName enum value
	DeploymentCommandNameExecuteRecipes = "execute_recipes"

	// DeploymentCommandNameConfigure is a DeploymentCommandName enum value
	DeploymentCommandNameConfigure = "configure"

	// DeploymentCommandNameSetup is a DeploymentCommandName enum value
	DeploymentCommandNameSetup = "setup"

	// DeploymentCommandNameDeploy is a DeploymentCommandName enum value
	DeploymentCommandNameDeploy = "deploy"

	// DeploymentCommandNameRollback is a DeploymentCommandName enum value
	DeploymentCommandNameRollback = "rollback"

	// DeploymentCommandNameStart is a DeploymentCommandName enum value
	DeploymentCommandNameStart = "start"

	// DeploymentCommandNameStop is a DeploymentCommandName enum value
	DeploymentCommandNameStop = "stop"

	// DeploymentCommandNameRestart is a DeploymentCommandName enum value
	DeploymentCommandNameRestart = "restart"

	// DeploymentCommandNameUndeploy is a DeploymentCommandName enum value
	DeploymentCommandNameUndeploy = "undeploy"
)

const (
	// LayerAttributesKeysEcsClusterArn is a LayerAttributesKeys enum value
	LayerAttributesKeysEcsClusterArn = "EcsClusterArn"

	// LayerAttributesKeysEnableHaproxyStats is a LayerAttributesKeys enum value
	LayerAttributesKeysEnableHaproxyStats = "EnableHaproxyStats"

	// LayerAttributesKeysHaproxyStatsUrl is a LayerAttributesKeys enum value
	LayerAttributesKeysHaproxyStatsUrl = "HaproxyStatsUrl"

	// LayerAttributesKeysHaproxyStatsUser is a LayerAttributesKeys enum value
	LayerAttributesKeysHaproxyStatsUser = "HaproxyStatsUser"

	// LayerAttributesKeysHaproxyStatsPassword is a LayerAttributesKeys enum value
	LayerAttributesKeysHaproxyStatsPassword = "HaproxyStatsPassword"

	// LayerAttributesKeysHaproxyHealthCheckUrl is a LayerAttributesKeys enum value
	LayerAttributesKeysHaproxyHealthCheckUrl = "HaproxyHealthCheckUrl"

	// LayerAttributesKeysHaproxyHealthCheckMethod is a LayerAttributesKeys enum value
	LayerAttributesKeysHaproxyHealthCheckMethod = "HaproxyHealthCheckMethod"

	// LayerAttributesKeysMysqlRootPassword is a LayerAttributesKeys enum value
	LayerAttributesKeysMysqlRootPassword = "MysqlRootPassword"

	// LayerAttributesKeysMysqlRootPasswordUbiquitous is a LayerAttributesKeys enum value
	LayerAttributesKeysMysqlRootPasswordUbiquitous = "MysqlRootPasswordUbiquitous"

	// LayerAttributesKeysGangliaUrl is a LayerAttributesKeys enum value
	LayerAttributesKeysGangliaUrl = "GangliaUrl"

	// LayerAttributesKeysGangliaUser is a LayerAttributesKeys enum value
	LayerAttributesKeysGangliaUser = "GangliaUser"

	// LayerAttributesKeysGangliaPassword is a LayerAttributesKeys enum value
	LayerAttributesKeysGangliaPassword = "GangliaPassword"

	// LayerAttributesKeysMemcachedMemory is a LayerAttributesKeys enum value
	LayerAttributesKeysMemcachedMemory = "MemcachedMemory"

	// LayerAttributesKeysNodejsVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysNodejsVersion = "NodejsVersion"

	// LayerAttributesKeysRubyVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysRubyVersion = "RubyVersion"

	// LayerAttributesKeysRubygemsVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysRubygemsVersion = "RubygemsVersion"

	// LayerAttributesKeysManageBundler is a LayerAttributesKeys enum value
	LayerAttributesKeysManageBundler = "ManageBundler"

	// LayerAttributesKeysBundlerVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysBundlerVersion = "BundlerVersion"

	// LayerAttributesKeysRailsStack is a LayerAttributesKeys enum value
	LayerAttributesKeysRailsStack = "RailsStack"

	// LayerAttributesKeysPassengerVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysPassengerVersion = "PassengerVersion"

	// LayerAttributesKeysJvm is a LayerAttributesKeys enum value
	LayerAttributesKeysJvm = "Jvm"

	// LayerAttributesKeysJvmVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysJvmVersion = "JvmVersion"

	// LayerAttributesKeysJvmOptions is a LayerAttributesKeys enum value
	LayerAttributesKeysJvmOptions = "JvmOptions"

	// LayerAttributesKeysJavaAppServer is a LayerAttributesKeys enum value
	LayerAttributesKeysJavaAppServer = "JavaAppServer"

	// LayerAttributesKeysJavaAppServerVersion is a LayerAttributesKeys enum value
	LayerAttributesKeysJavaAppServerVersion = "JavaAppServerVersion"
)

const (
	// LayerTypeAwsFlowRuby is a LayerType enum value
	LayerTypeAwsFlowRuby = "aws-flow-ruby"

	// LayerTypeEcsCluster is a LayerType enum value
	LayerTypeEcsCluster = "ecs-cluster"

	// LayerTypeJavaApp is a LayerType enum value
	LayerTypeJavaApp = "java-app"

	// LayerTypeLb is a LayerType enum value
	LayerTypeLb = "lb"

	// LayerTypeWeb is a LayerType enum value
	LayerTypeWeb = "web"

	// LayerTypePhpApp is a LayerType enum value
	LayerTypePhpApp = "php-app"

	// LayerTypeRailsApp is a LayerType enum value
	LayerTypeRailsApp = "rails-app"

	// LayerTypeNodejsApp is a LayerType enum value
	LayerTypeNodejsApp = "nodejs-app"

	// LayerTypeMemcached is a LayerType enum value
	LayerTypeMemcached = "memcached"

	// LayerTypeDbMaster is a LayerType enum value
	LayerTypeDbMaster = "db-master"

	// LayerTypeMonitoringMaster is a LayerType enum value
	LayerTypeMonitoringMaster = "monitoring-master"

	// LayerTypeCustom is a LayerType enum value
	LayerTypeCustom = "custom"
)

const (
	// RootDeviceTypeEbs is a RootDeviceType enum value
	RootDeviceTypeEbs = "ebs"

	// RootDeviceTypeInstanceStore is a RootDeviceType enum value
	RootDeviceTypeInstanceStore = "instance-store"
)

const (
	// SourceTypeGit is a SourceType enum value
	SourceTypeGit = "git"

	// SourceTypeSvn is a SourceType enum value
	SourceTypeSvn = "svn"

	// SourceTypeArchive is a SourceType enum value
	SourceTypeArchive = "archive"

	// SourceTypeS3 is a SourceType enum value
	SourceTypeS3 = "s3"
)

const (
	// StackAttributesKeysColor is a StackAttributesKeys enum value
	StackAttributesKeysColor = "Color"
)

const (
	// VirtualizationTypeParavirtual is a VirtualizationType enum value
	VirtualizationTypeParavirtual = "paravirtual"

	// VirtualizationTypeHvm is a VirtualizationType enum value
	VirtualizationTypeHvm = "hvm"
)

const (
	// VolumeTypeGp2 is a VolumeType enum value
	VolumeTypeGp2 = "gp2"

	// VolumeTypeIo1 is a VolumeType enum value
	VolumeTypeIo1 = "io1"

	// VolumeTypeStandard is a VolumeType enum value
	VolumeTypeStandard = "standard"
)
