예제 #1
0
        public static async Task <TModel> RunAsync <TModel>(
            Client client,
            IParameters <TModel> parameters,
            IAsyncCmdlet asyncCmdlet,
            CancellationToken cancellationToken)
            where TModel : class
        {
            // create a DAG of configs.
            var config = await parameters.CreateConfigAsync();

            // reade current Azure state.
            var current = await config.GetStateAsync(client, cancellationToken);

            // update location.
            parameters.Location = current.UpdateLocation(parameters.Location, config);

            // update a DAG of configs.
            config = await parameters.CreateConfigAsync();

            var engine = new SdkEngine(client.SubscriptionId);
            var target = config.GetTargetState(current, engine, parameters.Location);

            // apply target state
            var newState = await config.UpdateStateAsync(
                client,
                target,
                cancellationToken,
                new ShouldProcess(asyncCmdlet),
                asyncCmdlet.ReportTaskProgress);

            return(newState.Get(config) ?? current.Get(config));
        }
예제 #2
0
        /// <summary>
        /// The function read current Azure state and update it according to the `parameters`.
        /// </summary>
        /// <typeparam name="TModel">A resource model type.</typeparam>
        /// <param name="client">Azure SDK client.</param>
        /// <param name="subscriptionId">Subbscription Id.</param>
        /// <param name="parameters">Cmdlet parameters.</param>
        /// <param name="asyncCmdlet">Asynchronous cmdlet interface.</param>
        /// <param name="cancellationToken">Cancellation token.</param>
        /// <returns></returns>
        public static async Task <TModel> RunAsync <TModel>(
            this IClient client,
            string subscriptionId,
            IParameters <TModel> parameters,
            IAsyncCmdlet asyncCmdlet)
            where TModel : class
        {
            // create a DAG of configs.
            var config = await parameters.CreateConfigAsync();

            // read current Azure state.
            var current = await config.GetStateAsync(client, asyncCmdlet.CancellationToken);

            // update location.
            parameters.Location =
                parameters.Location ?? current.GetLocation(config) ?? parameters.DefaultLocation;
            // update a DAG of configs.
            config = await parameters.CreateConfigAsync();

            // create a target.
            var target = config.GetTargetState(
                current, new SdkEngine(subscriptionId), parameters.Location);

            // print paramaters to a verbose stream.
            foreach (var p in asyncCmdlet.Parameters)
            {
                asyncCmdlet.WriteVerbose(p.Key + " = " + ToPowerShellString(p.Value));
            }

            // apply the target state
            var newState = await config.UpdateStateAsync(
                client,
                target,
                asyncCmdlet.CancellationToken,
                new ShouldProcess(asyncCmdlet),
                asyncCmdlet.ReportTaskProgress);

            // return a resource model
            return(newState.Get(config) ?? current.Get(config));
        }