public async sendArmTemplateDeployment()

in lib/apiScenario/postmanCollectionRunnerClient.ts [930:1008]


  public async sendArmTemplateDeployment(
    armEndpoint: string,
    armTemplate: ArmTemplate,
    _armDeployment: ArmDeployment,
    step: StepArmTemplate,
    env: VariableEnv
  ): Promise<void> {
    if (this.opts.skipArmCall) return;

    const { item, itemGroup } = this.addNewItem(
      step.isPrepareStep ? "Prepare" : step.isCleanUpStep ? "CleanUp" : "Scenario",
      {
        name: step.step,
      },
      armEndpoint
    );

    item.request = new Request({
      name: step.step,
      method: "PUT",
      url: "",
      body: { mode: "raw" } as RequestBodyDefinition,
    });
    item.request.url = new Url({
      host: this.opts.testProxy ?? armEndpoint,
      path: `/subscriptions/:subscriptionId/resourcegroups/:resourceGroupName/providers/Microsoft.Resources/deployments/:deploymentName`,
      variable: [
        { key: "subscriptionId", value: `{{subscriptionId}}` },
        { key: "resourceGroupName", value: `{{resourceGroupName}}` },
        { key: "deploymentName", value: `${step.step}` },
      ],
      query: [{ key: "api-version", value: DEFAULT_ARM_API_VERSION }],
    });
    const body = {
      properties: {
        mode: "Incremental",
        template: convertPostmanFormat(env.resolveObjectValues(armTemplate)),
      },
    };
    for (const outputName of Object.keys(step.armTemplatePayload.outputs || {})) {
      env.output(outputName, {
        type: "string",
        value: `{{${outputName}}}`,
      });
    }
    item.request.body = new RequestBody({
      mode: "raw",
      raw: JSON.stringify(body, null, 2),
    });
    item.request.addHeader({ key: "Content-Type", value: "application/json" });
    const scriptTypes: PostmanHelper.TestScriptType[] = ["StatusCodeAssertion"];

    const postScripts: string[] = [];
    PostmanHelper.appendScripts(postScripts, {
      name: "response status code assertion.",
      types: scriptTypes,
      variables: undefined,
    });

    this.lroPoll(itemGroup!, item, step, armEndpoint, postScripts);

    if (postScripts.length > 0) {
      // to be improved
      PostmanHelper.addEvent(item.events, "test", postScripts);
    }

    generatePostmanAssertion({ step, type: "armTemplateCall", item: item, opts: this.opts });

    const generatedGetScriptTypes: PostmanHelper.TestScriptType[] = ["ExtractARMTemplateOutput"];
    const generatedGetOperationItem = this.generateFinalGetItem(
      item.name,
      armEndpoint,
      step,
      "put",
      generatedGetScriptTypes,
      armTemplate
    );
    itemGroup!.items.add(generatedGetOperationItem);
  }