/*******************************************************************************
* Copyright 2012-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
* this file except in compliance with the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file.
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
* *****************************************************************************
*
* AWS Tools for Windows (TM) PowerShell (TM)
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
using System.Text;
using Amazon.PowerShell.Common;
using Amazon.Runtime;
using Amazon.Backup;
using Amazon.Backup.Model;
namespace Amazon.PowerShell.Cmdlets.BAK
{
///
/// Recovers the saved resource identified by an Amazon Resource Name (ARN).
///
[Cmdlet("Start", "BAKRestoreJob", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)]
[OutputType("System.String")]
[AWSCmdlet("Calls the AWS Backup StartRestoreJob API operation.", Operation = new[] {"StartRestoreJob"}, SelectReturnType = typeof(Amazon.Backup.Model.StartRestoreJobResponse))]
[AWSCmdletOutput("System.String or Amazon.Backup.Model.StartRestoreJobResponse",
"This cmdlet returns a System.String object.",
"The service call response (type Amazon.Backup.Model.StartRestoreJobResponse) can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack."
)]
public partial class StartBAKRestoreJobCmdlet : AmazonBackupClientCmdlet, IExecutor
{
protected override bool IsSensitiveRequest { get; set; } = true;
#region Parameter CopySourceTagsToRestoredResource
///
///
/// This is an optional parameter. If this equals True
, tags included in
/// the backup will be copied to the restored resource.This can only be applied to backups created through Backup.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.Boolean? CopySourceTagsToRestoredResource { get; set; }
#endregion
#region Parameter IamRoleArn
///
///
/// The Amazon Resource Name (ARN) of the IAM role that Backup uses to create the target
/// resource; for example: arn:aws:iam::123456789012:role/S3Access
.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String IamRoleArn { get; set; }
#endregion
#region Parameter IdempotencyToken
///
///
/// A customer-chosen string that you can use to distinguish between otherwise identical
/// calls to StartRestoreJob
. Retrying a successful request with the same
/// idempotency token results in a success message with no action taken.
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String IdempotencyToken { get; set; }
#endregion
#region Parameter Metadata
///
///
/// A set of metadata key-value pairs. Contains information, such as a resource name,
/// required to restore a recovery point. You can get configuration metadata about a resource at the time it was backed up
/// by calling GetRecoveryPointRestoreMetadata
. However, values in addition
/// to those provided by GetRecoveryPointRestoreMetadata
might be required
/// to restore a resource. For example, you might need to provide a new resource name
/// if the original already exists.You need to specify specific metadata to restore an Amazon Elastic File System (Amazon
/// EFS) instance:file-system-id
: The ID of the Amazon EFS file system that is backed
/// up by Backup. Returned in GetRecoveryPointRestoreMetadata
.Encrypted
: A Boolean value that, if true, specifies that the file system
/// is encrypted. If KmsKeyId
is specified, Encrypted
must be
/// set to true
.KmsKeyId
: Specifies the Amazon Web Services KMS key that is used to
/// encrypt the restored file system. You can specify a key from another Amazon Web Services
/// account provided that key it is properly shared with your account via Amazon Web Services
/// KMS.PerformanceMode
: Specifies the throughput mode of the file system.CreationToken
: A user-supplied value that ensures the uniqueness (idempotency)
/// of the request.newFileSystem
: A Boolean value that, if true, specifies that the recovery
/// point is restored to a new Amazon EFS file system.ItemsToRestore
: An array of one to five strings where each string is
/// a file path. Use ItemsToRestore
to restore specific files or directories
/// rather than the entire file system. This parameter is optional. For example, "itemsToRestore":"[\"/my.test\"]"
.
///
///
#if !MODULAR
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
#else
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)]
[System.Management.Automation.AllowEmptyCollection]
[System.Management.Automation.AllowNull]
#endif
[Amazon.PowerShell.Common.AWSRequiredParameter]
public System.Collections.Hashtable Metadata { get; set; }
#endregion
#region Parameter RecoveryPointArn
///
///
/// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45
.
///
///
#if !MODULAR
[System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true)]
#else
[System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true, Mandatory = true)]
[System.Management.Automation.AllowEmptyString]
[System.Management.Automation.AllowNull]
#endif
[Amazon.PowerShell.Common.AWSRequiredParameter]
public System.String RecoveryPointArn { get; set; }
#endregion
#region Parameter ResourceType
///
///
/// Starts a job to restore a recovery point for one of the following resources:Aurora
for Amazon AuroraDocumentDB
for Amazon DocumentDB (with MongoDB compatibility)CloudFormation
for CloudFormationDynamoDB
for Amazon DynamoDBEBS
for Amazon Elastic Block StoreEC2
for Amazon Elastic Compute CloudEFS
for Amazon Elastic File SystemFSx
for Amazon FSxNeptune
for Amazon NeptuneRDS
for Amazon Relational Database ServiceRedshift
for Amazon RedshiftStorage Gateway
for Storage GatewayS3
for Amazon S3Timestream
for Amazon TimestreamVirtualMachine
for virtual machines
///
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public System.String ResourceType { get; set; }
#endregion
#region Parameter Select
///
/// Use the -Select parameter to control the cmdlet output. The default value is 'RestoreJobId'.
/// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.Backup.Model.StartRestoreJobResponse).
/// Specifying the name of a property of type Amazon.Backup.Model.StartRestoreJobResponse will result in that property being returned.
/// Specifying -Select '^ParameterName' will result in the cmdlet returning the selected cmdlet parameter value.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public string Select { get; set; } = "RestoreJobId";
#endregion
#region Parameter PassThru
///
/// Changes the cmdlet behavior to return the value passed to the RecoveryPointArn parameter.
/// The -PassThru parameter is deprecated, use -Select '^RecoveryPointArn' instead. This parameter will be removed in a future version.
///
[System.Obsolete("The -PassThru parameter is deprecated, use -Select '^RecoveryPointArn' instead. This parameter will be removed in a future version.")]
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter PassThru { get; set; }
#endregion
#region Parameter Force
///
/// This parameter overrides confirmation prompts to force
/// the cmdlet to continue its operation. This parameter should always
/// be used with caution.
///
[System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)]
public SwitchParameter Force { get; set; }
#endregion
protected override void ProcessRecord()
{
this._AWSSignerType = "v4";
base.ProcessRecord();
var resourceIdentifiersText = FormatParameterValuesForConfirmationMsg(nameof(this.RecoveryPointArn), MyInvocation.BoundParameters);
if (!ConfirmShouldProceed(this.Force.IsPresent, resourceIdentifiersText, "Start-BAKRestoreJob (StartRestoreJob)"))
{
return;
}
var context = new CmdletContext();
// allow for manipulation of parameters prior to loading into context
PreExecutionContextLoad(context);
#pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute
if (ParameterWasBound(nameof(this.Select)))
{
context.Select = CreateSelectDelegate(Select) ??
throw new System.ArgumentException("Invalid value for -Select parameter.", nameof(this.Select));
if (this.PassThru.IsPresent)
{
throw new System.ArgumentException("-PassThru cannot be used when -Select is specified.", nameof(this.Select));
}
}
else if (this.PassThru.IsPresent)
{
context.Select = (response, cmdlet) => this.RecoveryPointArn;
}
#pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute
context.CopySourceTagsToRestoredResource = this.CopySourceTagsToRestoredResource;
context.IamRoleArn = this.IamRoleArn;
context.IdempotencyToken = this.IdempotencyToken;
if (this.Metadata != null)
{
context.Metadata = new Dictionary(StringComparer.Ordinal);
foreach (var hashKey in this.Metadata.Keys)
{
context.Metadata.Add((String)hashKey, (String)(this.Metadata[hashKey]));
}
}
#if MODULAR
if (this.Metadata == null && ParameterWasBound(nameof(this.Metadata)))
{
WriteWarning("You are passing $null as a value for parameter Metadata which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.");
}
#endif
context.RecoveryPointArn = this.RecoveryPointArn;
#if MODULAR
if (this.RecoveryPointArn == null && ParameterWasBound(nameof(this.RecoveryPointArn)))
{
WriteWarning("You are passing $null as a value for parameter RecoveryPointArn which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues.");
}
#endif
context.ResourceType = this.ResourceType;
// allow further manipulation of loaded context prior to processing
PostExecutionContextLoad(context);
var output = Execute(context) as CmdletOutput;
ProcessOutput(output);
}
#region IExecutor Members
public object Execute(ExecutorContext context)
{
var cmdletContext = context as CmdletContext;
// create request
var request = new Amazon.Backup.Model.StartRestoreJobRequest();
if (cmdletContext.CopySourceTagsToRestoredResource != null)
{
request.CopySourceTagsToRestoredResource = cmdletContext.CopySourceTagsToRestoredResource.Value;
}
if (cmdletContext.IamRoleArn != null)
{
request.IamRoleArn = cmdletContext.IamRoleArn;
}
if (cmdletContext.IdempotencyToken != null)
{
request.IdempotencyToken = cmdletContext.IdempotencyToken;
}
if (cmdletContext.Metadata != null)
{
request.Metadata = cmdletContext.Metadata;
}
if (cmdletContext.RecoveryPointArn != null)
{
request.RecoveryPointArn = cmdletContext.RecoveryPointArn;
}
if (cmdletContext.ResourceType != null)
{
request.ResourceType = cmdletContext.ResourceType;
}
CmdletOutput output;
// issue call
var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint);
try
{
var response = CallAWSServiceOperation(client, request);
object pipelineOutput = null;
pipelineOutput = cmdletContext.Select(response, this);
output = new CmdletOutput
{
PipelineOutput = pipelineOutput,
ServiceResponse = response
};
}
catch (Exception e)
{
output = new CmdletOutput { ErrorResponse = e };
}
return output;
}
public ExecutorContext CreateContext()
{
return new CmdletContext();
}
#endregion
#region AWS Service Operation Call
private Amazon.Backup.Model.StartRestoreJobResponse CallAWSServiceOperation(IAmazonBackup client, Amazon.Backup.Model.StartRestoreJobRequest request)
{
Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "AWS Backup", "StartRestoreJob");
try
{
#if DESKTOP
return client.StartRestoreJob(request);
#elif CORECLR
return client.StartRestoreJobAsync(request).GetAwaiter().GetResult();
#else
#error "Unknown build edition"
#endif
}
catch (AmazonServiceException exc)
{
var webException = exc.InnerException as System.Net.WebException;
if (webException != null)
{
throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException);
}
throw;
}
}
#endregion
internal partial class CmdletContext : ExecutorContext
{
public System.Boolean? CopySourceTagsToRestoredResource { get; set; }
public System.String IamRoleArn { get; set; }
public System.String IdempotencyToken { get; set; }
public Dictionary Metadata { get; set; }
public System.String RecoveryPointArn { get; set; }
public System.String ResourceType { get; set; }
public System.Func Select { get; set; } =
(response, cmdlet) => response.RestoreJobId;
}
}
}