deployer/terraform/sap_bgprint/logicapp.tf (176 lines of code) (raw):

resource "azurerm_logic_app_workflow" "logic_app" { name = format("%s%s-logicapp", lower(var.environment), lower(var.location)) location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name workflow_version = "1.0.0.0" workflow_schema = "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#" parameters = { "$connections" = jsonencode({ "${azurerm_resource_group_template_deployment.apiconnection.name}" = { connectionId = "${jsondecode(azurerm_resource_group_template_deployment.apiconnection.output_content).apiConnectionId.value}" connectionName = "${azurerm_resource_group_template_deployment.apiconnection.name}" id = "${azapi_resource.custom_connector.id}" } }) } workflow_parameters = { "$connections" = jsonencode({ defaultValue = {} type = "Object" }) } depends_on = [ azurerm_resource_group_template_deployment.apiconnection ] } resource "azurerm_logic_app_trigger_http_request" "logic_app_trigger" { name = "FunctionAppCallee" logic_app_id = azurerm_logic_app_workflow.logic_app.id method = "POST" schema = data.local_file.http_trigger.content } resource "azurerm_logic_app_action_custom" "logic_app_action_get_printer_share" { name = "GetPrinterShare" logic_app_id = azurerm_logic_app_workflow.logic_app.id body = <<BODY { "inputs": { "headers": { "Content-Type": "application/json" }, "host": { "connection": { "name": "@parameters('$connections')['${azurerm_resource_group_template_deployment.apiconnection.name}']['connectionId']" } }, "method": "get", "path": "/v1.0/print/shares/@{encodeURIComponent(triggerBody()?['printer_share_id'])}" }, "runAfter": {}, "type": "ApiConnection" } BODY } resource "azurerm_logic_app_action_custom" "logic_app_action_create_print_job" { name = "CreatePrintJob" logic_app_id = azurerm_logic_app_workflow.logic_app.id body = <<BODY { "inputs": { "headers": { "Content-Type": "application/json" }, "body": { "configuration": { "copies": 1, "dpi": "@body('${azurerm_logic_app_action_custom.logic_app_action_get_printer_share.name}')?['defaults']?['dpi']", "duplexMode": "oneSided", "fitPdfToPage": false, "mediaType": "stationery", "pagesPerSheet": "@body('${azurerm_logic_app_action_custom.logic_app_action_get_printer_share.name}')?['defaults']?['pagesPerSheet']", "quality": "medium", "scaling": "shrinkToFit" } }, "host": { "connection": { "name": "@parameters('$connections')['${azurerm_resource_group_template_deployment.apiconnection.name}']['connectionId']" } }, "method": "post", "path": "/v1.0/print/shares/@{encodeURIComponent(triggerBody()?['printer_share_id'])}/jobs" }, "runAfter": { "${azurerm_logic_app_action_custom.logic_app_action_get_printer_share.name}": [ "Succeeded" ] }, "type": "ApiConnection" } BODY } resource "azurerm_logic_app_action_custom" "logic_app_action_create_upload_session_for_printer_share" { name = "CreateUploadSessionForPrinterShareLoop" logic_app_id = azurerm_logic_app_workflow.logic_app.id body = <<BODY { "actions": { "CreateUploadSessionForPrinterShare": { "inputs": { "body": { "properties": { "contentType": "@triggerBody()?['document_content_type']", "documentName": "@triggerBody()?['document_name']", "size": "@triggerBody()?['document_file_size']" } }, "host": { "connection": { "name": "@parameters('$connections')['${azurerm_resource_group_template_deployment.apiconnection.name}']['connectionId']" } }, "method": "post", "path": "/v1.0/print/shares/@{encodeURIComponent(triggerBody()?['printer_share_id'])}/jobs/@{encodeURIComponent(body('${azurerm_logic_app_action_custom.logic_app_action_create_print_job.name}')?['id'])}/documents/@{encodeURIComponent(items('CreateUploadSessionForPrinterShareLoop')?['id'])}/createUploadSession" }, "runAfter": {}, "type": "ApiConnection" }, "UploadDocumentToUP": { "inputs": { "body": { "document_blob": "@{triggerBody()?['document_blob']}", "document_file_size": "@{triggerBody()?['document_file_size']}", "document_name": "@{triggerBody()?['document_name']}", "next_expected_range": "@{body('CreateUploadSessionForPrinterShare')?['nextExpectedRanges']}", "upload_url": "@{body('CreateUploadSessionForPrinterShare')?['uploadUrl']}" }, "function": { "id": "${azurerm_linux_function_app.function_app.id}/functions/uploaddocumenttoup" }, "headers": { "Content-Type": "application/json" }, "method": "POST" }, "runAfter": { "CreateUploadSessionForPrinterShare": [ "Succeeded" ] }, "type": "Function" } }, "foreach": "@body('${azurerm_logic_app_action_custom.logic_app_action_create_print_job.name}')?['documents']", "runAfter": { "${azurerm_logic_app_action_custom.logic_app_action_create_print_job.name}": [ "Succeeded" ] }, "type": "Foreach" } BODY } resource "azurerm_logic_app_action_custom" "logic_app_action_start_print_job" { name = "StartPrintJob" logic_app_id = azurerm_logic_app_workflow.logic_app.id body = <<BODY { "inputs": { "headers": { "Content-Type": "application/json" }, "host": { "connection": { "name": "@parameters('$connections')['${azurerm_resource_group_template_deployment.apiconnection.name}']['connectionId']" } }, "method": "post", "path": "/v1.0/print/shares/@{encodeURIComponent(triggerBody()?['printer_share_id'])}/jobs/@{encodeURIComponent(body('${azurerm_logic_app_action_custom.logic_app_action_create_print_job.name}')?['id'])}/start" }, "runAfter": { "${azurerm_logic_app_action_custom.logic_app_action_create_upload_session_for_printer_share.name}": [ "Succeeded" ] }, "type": "ApiConnection" } BODY }