/******************************************************************************* * 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.OAM; using Amazon.OAM.Model; namespace Amazon.PowerShell.Cmdlets.CWOAM { /// /// Creates or updates the resource policy that grants permissions to source accounts /// to link to the monitoring account sink. When you create a sink policy, you can grant /// permissions to all accounts in an organization or to individual accounts. /// /// /// /// You can also use a sink policy to limit the types of data that is shared. The three /// types that you can allow or deny are: /// /// See the examples in this section to see how to specify permitted source accounts and /// data types. /// /// [Cmdlet("Write", "CWOAMSinkPolicy", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)] [OutputType("Amazon.OAM.Model.PutSinkPolicyResponse")] [AWSCmdlet("Calls the CloudWatch Observability Access Manager PutSinkPolicy API operation.", Operation = new[] {"PutSinkPolicy"}, SelectReturnType = typeof(Amazon.OAM.Model.PutSinkPolicyResponse))] [AWSCmdletOutput("Amazon.OAM.Model.PutSinkPolicyResponse", "This cmdlet returns an Amazon.OAM.Model.PutSinkPolicyResponse object containing multiple properties. The object can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack." )] public partial class WriteCWOAMSinkPolicyCmdlet : AmazonOAMClientCmdlet, IExecutor { #region Parameter Policy /// /// /// The JSON policy to use. If you are updating an existing policy, the entire existing /// policy is replaced by what you specify here.The policy must be in JSON string format with quotation marks escaped and no newlines.For examples of different types of policies, see the Examples section on this /// page. /// /// #if !MODULAR [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] #else [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)] [System.Management.Automation.AllowEmptyString] [System.Management.Automation.AllowNull] #endif [Amazon.PowerShell.Common.AWSRequiredParameter] public System.String Policy { get; set; } #endregion #region Parameter SinkIdentifier /// /// /// The ARN of the sink to attach this policy to. /// /// #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 SinkIdentifier { get; set; } #endregion #region Parameter Select /// /// Use the -Select parameter to control the cmdlet output. The default value is '*'. /// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.OAM.Model.PutSinkPolicyResponse). /// Specifying the name of a property of type Amazon.OAM.Model.PutSinkPolicyResponse 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; } = "*"; #endregion #region Parameter PassThru /// /// Changes the cmdlet behavior to return the value passed to the SinkIdentifier parameter. /// The -PassThru parameter is deprecated, use -Select '^SinkIdentifier' instead. This parameter will be removed in a future version. /// [System.Obsolete("The -PassThru parameter is deprecated, use -Select '^SinkIdentifier' 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.SinkIdentifier), MyInvocation.BoundParameters); if (!ConfirmShouldProceed(this.Force.IsPresent, resourceIdentifiersText, "Write-CWOAMSinkPolicy (PutSinkPolicy)")) { 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.SinkIdentifier; } #pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute context.Policy = this.Policy; #if MODULAR if (this.Policy == null && ParameterWasBound(nameof(this.Policy))) { WriteWarning("You are passing $null as a value for parameter Policy 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.SinkIdentifier = this.SinkIdentifier; #if MODULAR if (this.SinkIdentifier == null && ParameterWasBound(nameof(this.SinkIdentifier))) { WriteWarning("You are passing $null as a value for parameter SinkIdentifier 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 // 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.OAM.Model.PutSinkPolicyRequest(); if (cmdletContext.Policy != null) { request.Policy = cmdletContext.Policy; } if (cmdletContext.SinkIdentifier != null) { request.SinkIdentifier = cmdletContext.SinkIdentifier; } 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.OAM.Model.PutSinkPolicyResponse CallAWSServiceOperation(IAmazonOAM client, Amazon.OAM.Model.PutSinkPolicyRequest request) { Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "CloudWatch Observability Access Manager", "PutSinkPolicy"); try { #if DESKTOP return client.PutSinkPolicy(request); #elif CORECLR return client.PutSinkPolicyAsync(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.String Policy { get; set; } public System.String SinkIdentifier { get; set; } public System.Func Select { get; set; } = (response, cmdlet) => response; } } }