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)); }
/// <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)); }