Azure / Azure-DataFactory

Other
483 stars 589 forks source link

PrePostDeploymentScript fails to parse triggers that contain double-quotes in their definition #699

Open DavidJade27 opened 2 weeks ago

DavidJade27 commented 2 weeks ago

I am using the microsoft/azure-data-factory-utilities npm package for CI/CD to my ADF. My triggers are used against pipelines that take parameters, and those parameter values contain double-quotes in them. When I run PrePostDeploymentScript.ps1, I get errors like this:

##[warning] Unable to compare 'MyTrigger' trigger payload, this is not a failure. You can post the issue to https://github.com/Azure/Azure-DataFactory/issues to check if this is user error or limitation.
##[warning] Conversion from JSON failed with error: After parsing a value an unexpected character was encountered: '. Path 'pipelines[0].parameters.Param1', line 12, position 32. from Line: 200

While these are warnings, the result is that these triggers get unnecessarily stopped and restarted because the script fails to compare them against the current definition.

For reference, my trigger looks like this:

{
  "name": "MyTrigger",
  "properties": {
    "annotations": [],
    "runtimeState": "Started",
    "pipelines": [
      {
        "pipelineReference": {
          "referenceName": "MyPipeline",
          "type": "PipelineReference"
        },
        "parameters": {
          "Param1": "\"MyStringValue\"",
          "StartDate": "@concat('\"', formatDateTime(adddays(trigger().scheduledTime, -10), 'yyyy-MM-dd'), '\"')",
          "EndDate": "@concat('\"', formatDateTime(adddays(trigger().scheduledTime, -3), 'yyyy-MM-dd'), '\"')"
        }
      }
    ],
    "type": "ScheduleTrigger",
    "typeProperties": {
      "recurrence": {
        "frequency": "Week",
        "interval": 1,
        "startTime": "2020-10-13T04:00:00Z",
        "timeZone": "UTC",
        "schedule": {
          "weekDays": [
            "Saturday"
          ]
        }
      }
    }
  }
}
DavidJade27 commented 2 weeks ago

Looking through PrePostDeploymentScript.ps1, I believe the issue is in the Update-TriggerTemplate function -- the final else-clause takes a value out of the ARM template parameters and uses it in a string-replace into a JSON string without escaping the double-quotes, creating malformed JSON. This then causes problems when ConvertFrom-Json is called on it.