Exemple #1
0
        /// <summary>
        /// 执行命令,调用成功返回执行活动ID(inv-xxxxxxxx),每个执行活动内部有一个或多个执行任务(invt-xxxxxxxx),每个执行任务代表命令在一台 CVM 或一台 Lighthouse 上的执行记录。
        ///
        /// * 如果指定实例未安装 agent,或 agent 不在线,返回失败
        /// * 如果命令类型与 agent 运行环境不符,返回失败
        /// * 指定的实例需要处于 VPC 网络
        /// * 指定的实例需要处于 `RUNNING` 状态
        /// * 不可同时指定 CVM 和 Lighthouse
        /// </summary>
        /// <param name="req"><see cref="RunCommandRequest"/></param>
        /// <returns><see cref="RunCommandResponse"/></returns>
        public RunCommandResponse RunCommandSync(RunCommandRequest req)
        {
            JsonResponseModel <RunCommandResponse> rsp = null;

            try
            {
                var strResp = this.InternalRequestSync(req, "RunCommand");
                rsp = JsonConvert.DeserializeObject <JsonResponseModel <RunCommandResponse> >(strResp);
            }
            catch (JsonSerializationException e)
            {
                throw new TencentCloudSDKException(e.Message);
            }
            return(rsp.Response);
        }
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            switch (ParameterSetName)
            {
            case IdParameterSet:
            {
                var resource = new ResourceIdentifier(Id);
                ResourceGroupName = resource.ResourceGroupName;
                Name = resource.ResourceName;
                break;
            }

            case InputObjectParameterSet:
            {
                var resource = new ResourceIdentifier(InputObject.Id);
                ResourceGroupName = resource.ResourceGroupName;
                Name = resource.ResourceName;
                break;
            }
            }

            var msg = $"{Name} in {ResourceGroupName}";

            ConfirmAction(Force.IsPresent,
                          string.Format(Resources.DoYouWantToExecuteCommandOnCluster, Name),
                          string.Format(Resources.ExecutingCommandOnCluster, Name),
                          msg,
                          () =>
            {
                ManagedCluster cluster    = Client.ManagedClusters.Get(ResourceGroupName, Name);
                RunCommandRequest request = new RunCommandRequest
                {
                    Command = Command,
                    Context = GetCommandContext()
                };
                if (cluster.AadProfile != null && cluster.AadProfile.Managed != null)
                {
                    request.ClusterToken = GetClusterToken();
                }
                RunCommandResult response = Client.ManagedClusters.RunCommand(ResourceGroupName, Name, request);
                WriteObject(PSMapper.Instance.Map <PSRunCommandResult>(response));
            });
        }