Azure ARM - расширение настраиваемого сценария - случайный сбой

Я разработал шаблон Azure ARM для развертывания машины Ubuntu Linux, на которой после подготовки запускается сценарий bash для установки определенного программного обеспечения. Программное обеспечение включает в себя загрузку некоторых пакетов, а также передачу входного параметра от пользователя для завершения конфигурации. Проблема, с которой я столкнулся, заключается в том, что расширение скрипта работает с перебоями. Однажды я успешно развернул его, а теперь он постоянно дает сбой. Вот ошибка, которую он возвращает через несколько секунд, когда пользовательский сценарий начинает выполняться:

    {
  "code": "DeploymentFailed",
  "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.",
  "details": [
    {
      "code": "Conflict",
      "message": "{\r\n  \"status\": \"Failed\",\r\n  \"error\": {\r\n    \"code\": \"ResourceDeploymentFailure\",\r\n    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\r\n    \"details\": [\r\n      {\r\n        \"code\": \"VMExtensionProvisioningError\",\r\n        \"message\": \"VM has reported a failure when processing extension 'metaport-onboard'. Error message: \\\"Enable failed: failed to execute command: command terminated with exit status=1\\n[stdout]\\nReading package lists...\\nBuilding dependency tree...\\nReading state information...\\nsoftware-properties-common is already the newest version (0.96.24.32.14).\\nsoftware-properties-common set to manually installed.\\nThe following packages were automatically installed and are no longer required:\\n  grub-pc-bin linux-headers-4.15.0-121\\nUse 'sudo apt autoremove' to remove them.\\n0 upgraded, 0 newly installed, 0 to remove and 18 not upgraded.\\nReading package lists...\\nBuilding dependency tree...\\nReading state information...\\nSome packages could not be installed. This may mean that you have\\nrequested an impossible situation or if you are using the unstable\\ndistribution that some required packages have not yet been created\\nor been moved out of Incoming.\\nThe following information may help to resolve the situation:\\n\\nThe following packages have unmet dependencies:\\n python3-pip : Depends: python3-distutils but it is not installable\\n               Recommends: build-essential but it is not installable\\n               Recommends: python3-dev (>= 3.2) but it is not installable\\n               Recommends: python3-setuptools but it is not installable\\n               Recommends: python3-wheel but it is not installable\\n\\n[stderr]\\n+ sudo apt-get -qq -y update\\n+ sudo apt-get -q -y install software-properties-common\\n+ sudo apt-get -q -y install python3-pip\\nE: Unable to correct problems, you have held broken packages.\\nNo passwd entry for user 'mpadmin'\\n\\\"\\r\\n\\r\\nMore information on troubleshooting is available at https://aka.ms/VMExtensionCSELinuxTroubleshoot \"\r\n      }\r\n    ]\r\n  }\r\n}"
    }
  ]
}

Ниже приведена часть шаблона, в которой я определил расширение.

    {
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[variables('vmName')]",
  "apiVersion": "2019-12-01",
  "location": "[variables('location')]",
  "dependsOn": [
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
    "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",
    "[resourceId('Microsoft.Network/natGateways', variables('natGatewayName'))]",
    "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
  ],
  "properties": {
    "hardwareProfile": {
      "vmSize": "[parameters('virtualMachineSize')]"
    },
    "osProfile": {
      "computerName": "[variables('vmName')]",
      "adminUsername": "[parameters('adminUsername')]",
      "adminPassword": "[parameters('adminPasswordOrKey')]",
      "linuxConfiguration": "[if(equals(parameters('authenticationType'), 'password'), json('null'), variables('linuxConfiguration'))]"
    },
    "storageProfile": {
      "imageReference": {
        "publisher": "[variables('imagePublisher')]",
        "offer": "[variables('imageOffer')]",
        "sku": "[variables('imageSKU')]",
        "version": "[variables('imageVersion')]"
      },
      "osDisk": {
        "name": "[concat(variables('vmName'), '_OSDisk')]",
        "caching": "ReadWrite",
        "createOption": "FromImage",
        "managedDisk": {
          "storageAccountType": "[variables('storageAccountType')]"
        }
      }
    },
      "networkProfile": {
        "networkInterfaces": [
          {
            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
          }
        ]
      }
    },
    "resources": [
          {
          "name": "metaport-onboard",
          "type": "extensions",
          "apiVersion": "2019-03-01",
          "location": "[resourceGroup().location]",
          "dependsOn": [
            "[resourceId('Microsoft.Compute/virtualMachines/', variables('vmName'))]",
            "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]",
            "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",
            "[resourceId('Microsoft.Network/natGateways', variables('natGatewayName'))]",
            "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
          ],
          "properties": {
            "publisher": "Microsoft.Azure.Extensions",
            "type": "CustomScript",
            "typeHandlerVersion": "2.1",
            "autoUpgradeMinorVersion": true,
            "settings": {
              "fileUris": [
                "https://raw.githubusercontent.com/willguibr/azure/main/Latest/MetaPort-Standalone-NATGW-v1.0/install_metaport.sh"
                ]
              },
            "protectedSettings": {
              "commandToExecute": "[concat('sh install_metaport.sh ', parameters('metaTokenCode'))]"
              }
            }
          }
        ]
      }
    ]
  }

Полный пакет шаблонов находится здесь .

Кто-нибудь знает, как предотвратить эту проблему или внести какие-либо исправления, которые могут потребоваться?


person Security Geek IO    schedule 25.10.2020    source источник


Ответы (2)


Здесь ясно сказано: сценарий завершился с кодом 1. это означает, что сам сценарий не работает. поэтому вам нужно войти в виртуальную машину и посмотреть журналы расширений в c: \ windowsazure \ packages \ logs (или что-то в этом роде) и выяснить, что пошло не так, и обернуть это некоторой логикой try \ catch. Кроме того, рассмотрите возможность распространения ошибок на консоль, чтобы вы могли видеть их в журналах.

person 4c74356b41    schedule 26.10.2020
comment
Мой сценарий довольно простой. Первые 5 строк устанавливают необходимое программное обеспечение, и как только это будет сделано, я добавил спящий режим 30, прежде чем продолжить. Затем я добавил переменную с параметром $ 1. Эта переменная должна содержать входной параметр, на который есть ссылка в шаблоне ARM. Проблема, которую я вижу, заключается в том, что она работает с перерывами. Есть ли предложения? #! / bin / bash sudo mkdir build sudo wget -q -Obuild / build_mp.sh s3.amazonaws.com/public.nsof.io/lxd/metaport-install.sh sudo chmod + x build / build_mp.sh sudo ./build/build_mp.sh sleep 30 metaTokenCode = $ 1 su mpadmin -c метапорт на борту $ metaTokenCode - person Security Geek IO; 26.10.2020
comment
оберните его логикой повтора, эта проблема не имеет ничего общего с расширением скрипта, шаблонами рук или лазурным - person 4c74356b41; 26.10.2020

Я наконец понял, что происходило. У установки программного обеспечения есть зависимости, которые не устанавливались автоматически, и это приводило к сбою всего сценария и выходу со статусом = 1. Я изменил сценарий bash и вручную добавил рекомендуемые зависимости как часть установки, а также повторно развернул шаблон и booom. Установка прошла гладко. Это сообщение об ошибке генерировалось каждые:

Building dependency tree...\\nReading state information...\\nSome packages could not be installed. **This may mean that you have\\nrequested an impossible situation or if you are using the unstable\\ndistribution that some required packages have not yet been created\\nor been moved out of Incoming.\\nThe following information may help to resolve the situation:\\n\\nThe following packages have unmet dependencies:\\n python3-pip : Depends: python3-distutils but it is not installable\\n Recommends: build-essential but it is not installable\\n Recommends: python3-dev (>= 3.2) but it is not installable\\n Recommends: python3-setuptools but it is not installable\\n Recommends: python3-wheel** but it is not installable\\n\\n[stderr]\\n+ sudo apt-get -qq -y update\\n+ sudo apt-get -q -y install software-properties-common\\n+ sudo apt-get -q -y install python3-pip\\nE: Unable to correct problems, you have held broken packages
person Security Geek IO    schedule 26.10.2020