Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширение пользовательских скриптов версии 2 скачивает и запускает скрипты на виртуальных машинах Azure. Используйте это расширение для настройки после развертывания, установки программного обеспечения или любой другой задачи настройки или управления. Сценарии можно скачать из службы хранилища Azure или другого интернет-ресурса, доступного из Интернета, или передать в среду выполнения расширения.
Расширение Custom Script интегрируется с шаблонами Azure Resource Manager. Вы также можете запустить его с помощью Azure CLI, Azure PowerShell или REST API Azure Virtual Machines.
В этой статье описывается, как использовать расширение пользовательского скрипта из Azure CLI и как запустить расширение с помощью шаблона Azure Resource Manager. В этой статье также показаны шаги по устранению неполадок в системах Linux.
Существует две версии расширения пользовательских скриптов:
- Версия 1 — Microsoft.OSTCExtensions.CustomScriptForLinux
- Версия 2 — Microsoft.Azure.Extensions.CustomScript
Используйте версию 2 для новых и существующих развертываний. Новая версия заменит собой старую. Это так же просто, как смена названия или версии. Изменение конфигурации расширения не требуется.
Предпосылки
Поддерживаемые дистрибутивы Linux
Распределение | x64 | ARM64 |
---|---|---|
AlmaLinux | 9.x+ | 9.x+ |
Debian | 10+ | 11.x+ |
Flatcar Linux | 3374.2.x+ | 3374.2.x+ |
Azure Linux | 2.x | 2.x |
openSUSE | 12.3+ | Не поддерживается |
Oracle Linux | 6.4+, 7.x+, 8.x+ | Не поддерживается |
Red Hat Enterprise Linux | 6.7+, 7.x+, 8.x+, 9.x+ | 8.6+, 9.x+ |
Rocky Linux | 9.x+ | 9.x+ |
SLES | 12.x+, 15.x+ | 15.x SP4+ |
Ubuntu | 18.04+, 20.04+, 22.04+ | 20.04+, 22.04+ |
Расположение скрипта
Вы можете настроить расширение на использование ваших учетных данных для доступа к Хранилищу BLOB-объектов Azure. Скрипт может находиться в любом расположении при условии, что виртуальная машина может осуществлять маршрутизацию в конечную точку, например, GitHub или внутренний файловый сервер.
Подключение к Интернету
Чтобы загрузить скрипт из внешнего источника, например из GitHub или службы хранилища Azure, нужно открыть другой брандмауэр или порты группы безопасности сети (NSG). К примеру, если ваш скрипт находится в службе хранилища Azure, можете предоставить к нему доступ с помощью служебных тегов для хранилища Azure NSG.
Если ваш скрипт находится на локальном сервере, вам может потребоваться открыть другие порты брандмауэра или порты группы безопасности сети (NSG).
Советы
- Наибольшая частота сбоев для этого расширения обусловлена синтаксическими ошибками в скрипте. Проверьте, что скрипт запускается без ошибок. Добавьте больше возможностей ведения журнала в скрипт, чтобы упростить поиск ошибок.
- Пишите идемпотентные скрипты, чтобы их повторные запуски не вызывали изменения системы.
- Выполняемые скрипты не должны запрашивать ввод данных пользователем.
- Выполнение скрипта разрешено в течение 90 минут. Более длительный процесс приведёт к ошибке предоставления расширения.
- Не помещайте перезагрузки в скрипт. Перезапуск вызывает проблемы с другими устанавливаемыми расширениями, и расширение не будет работать после перезагрузки.
- Если у вас есть скрипт, вызывающий перезагрузку перед установкой приложений и запуском скриптов, назначьте время перезагрузки с помощью задания cron или таких инструментов, как расширения DSC, Chef или Puppet.
- Не запускайте скрипт, который вызывает остановку или обновление агента Linux для Azure. Это может привести к тому, что расширение останется в переходном состоянии и истечет время ожидания.
- Расширение выполняет скрипт только один раз. Если вы хотите запускать скрипт при каждом старте системы, можете использовать образ cloud-init и модуль Scripts Per Boot. Кроме того, можно использовать скрипт для создания модуля службы systemd.
- К виртуальной машине можно применить только одну версию расширения. Чтобы запустить второй пользовательский скрипт, можно применить к имеющемуся расширению новую конфигурацию. Кроме того, можно удалить расширение пользовательских скриптов и повторно применить его с измененным скриптом.
- Чтобы запланировать время выполнения скрипта, воспользуйтесь расширением что бы создать задание cron.
- Во время выполнения скрипта на портале Azure или в CLI вы увидите только переходное состояние расширения. Если требуются более частые обновления состояния выполняющегося скрипта, создайте собственное решение.
- Расширение пользовательских скриптов не предусматривает собственную поддержку прокси-серверов. Но вы можете использовать средство передачи файлов, которое поддерживает прокси-серверы в скрипте, такое как
Curl
. - Учитывайте нестандартные расположения каталогов, которые могут использоваться вашими скриптами или командами. Для решения этой ситуации необходимо иметь в распоряжении логику.
Схема расширения
В конфигурации расширения пользовательских сценариев указываются такие параметры, как расположение сценария и команда для его выполнения. Эту информацию можно хранить в файлах конфигурации, указать в командной строке или в шаблоне Azure Resource Manager.
Конфиденциальные данные можно хранить в защищенной конфигурации, которая шифруется и расшифровывается только на целевой виртуальной машине. Защищенную конфигурацию можно использовать для команд, которые содержат секретные данные, например пароли. Ниже приведен пример:
{
"name": "config-app",
"type": "Extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2019-03-01",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"skipDos2Unix":false,
"timestamp":123456789
},
"protectedSettings": {
"commandToExecute": "<command-to-execute>",
"script": "<base64-script-to-execute>",
"storageAccountName": "<storage-account-name>",
"storageAccountKey": "<storage-account-key>",
"fileUris": ["https://.."],
"managedIdentity" : "<managed-identity-identifier>"
}
}
}
Примечание.
Свойство managedIdentity
не должно применяться вместе со свойствами storageAccountName
или storageAccountKey
.
Значения свойств
Имя | Значение или пример | Тип данных |
---|---|---|
apiVersion | 2019-03-01 |
дата |
издатель | Microsoft.Azure.Extensions |
струна |
тип | CustomScript |
струна |
typeHandlerVersion | 2.1 |
инт |
URI файла | https://github.com/MyProject/Archive/MyPythonScript.py |
массив |
commandToExecute | python MyPythonScript.py \<my-param1> |
струна |
сценарий | IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= |
струна |
skipDos2Unix | false |
булевый |
отметка времени | 123456789 |
32-разрядное целое число |
storageAccountName | examplestorageacct |
струна |
ключХранилищаАккаунта | TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== |
струна |
управляемая идентичность |
{ } или { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } или { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" } |
Объект JSON |
Подробности о значениях свойств
Недвижимость | Необязательное или обязательное | Сведения |
---|---|---|
apiVersion | Неприменимо | Самую свежую версию API можно найти с помощью Обозревателя ресурсов или с помощью команды az provider list -o json в Azure CLI. |
fileUris | Необязательно | URL-адреса для загрузки файлов. |
commandToExecute | Требуется, если script не задано |
Скрипт точки входа для выполнения. Используйте это свойство вместо script , если команда содержит секреты, например пароли. |
сценарий | Требуется, если commandToExecute не задано |
Скрипт в кодировке Base64 и при необходимости сжатый с помощью gzip, выполняемый /bin/sh . |
skipDos2Unix | Необязательно | Задайте значение false , если хотите пропустить преобразование dos2unix для URL-адресов файлов на основе скриптов или самих скриптов. |
отметка времени | Необязательно | Меняйте это значение, только чтобы вызвать перезапуск скрипта. Допускается любое целое значение, если оно отличается от предыдущего значения. |
storageAccountName | Необязательно | Название учетной записи хранения. Если указаны учетные данные хранилища, все значения fileUris должны иметь формат URL-адресов для BLOB-объектов Azure. |
ключ аккаунта хранилища | Необязательно | Ключ доступа к учетной записи хранения. |
управляемая идентичность | Необязательно | Управляемая идентичность для скачивания файлов. Значения: clientId (необязательно, строка), являющийся идентификатором клиента управляемого удостоверения, и objectId (необязательно, строка), являющийся идентификатором объекта управляемого удостоверения. |
Общедоступные параметры отправляются в виде открытого текста на виртуальную машину, в которой выполняется скрипт. Защищенные параметры шифруются с помощью ключа, известного только в Azure и виртуальной машине. Параметры сохраняются на виртуальной машине по мере их отправки. Это значит, что если параметры были зашифрованы, они сохранятся в таком виде и на виртуальной машине. Сертификат, используемый для расшифровки зашифрованных значений, хранится на виртуальной машине. При необходимости сертификат также используется для расшифровки параметров во время выполнения.
Открытые параметры могут быть полезны для отладки, но мы настоятельно рекомендуем использовать защищенные параметры.
Приведенные ниже значения можно задать в открытых или защищенных параметрах. Расширение отклоняет любую конфигурацию, в которой эти значения задаются как в общедоступных, так и защищенных параметрах.
commandToExecute
script
fileUris
Свойство skipDos2Unix
Предыдущая версия расширения Microsoft.OSTCExtensions.CustomScriptForLinux
пользовательского скрипта автоматически преобразует файлы DOS в файлы UNIX, переводя \r\n
в \n
. Этот перевод по-прежнему присутствует и включен по умолчанию. Это преобразование применяется ко всем файлам, скачанным из fileUris
, или к параметрам скрипта, основанного на любом из приведенных ниже критериев:
- Расширение .sh, .txt, .py или .pl. Параметр скрипта всегда соответствует этому критерию, так как предполагается, что сценарий выполняется с /bin/sh. Параметр скрипта сохраняется как script.sh на виртуальной машине.
- Файл начинается с
#!
.
Значение по умолчанию равно false
, что означает преобразование dos2unix выполнено. Преобразование dos2unix можно пропустить, задав для параметра skipDos2Unix
значение true
:
{
"fileUris": ["<url>"],
"commandToExecute": "<command-to-execute>",
"skipDos2Unix": true
}
Свойство сценарий
Расширение пользовательских скриптов поддерживает выполнение определяемого пользователем скрипта. Параметры скрипта объединяют commandToExecute
и fileUris
в один параметр. Вместо того чтобы настраивать файл для скачивания из службы хранилища Azure или GitHub Gist, можно зашифровать скрипт в качестве параметра. Скрипт можно использовать для замены commandToExecute
и fileUris
.
Есть некоторые требования:
- Скрипт должен быть представлен в кодировке Base64.
- Скрипт также можно при необходимости сжать в формате GZIP.
- Настройка скрипта может использоваться в публичных или защищенных настройках.
- Максимальный размер данных параметра script — 256 КБ. Если скрипт превышает этот размер, он не выполняется.
К примеру, следующий скрипт сохранен в файл /script.sh/:
#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata
Вы должны создать правильную настройку скриптового расширения Custom Script Extension, используя выходные данные следующей команды.
cat script.sh | base64 -w0
{
"script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}
В большинстве случаев скрипт можно в дальнейшем при необходимости сжать в формат GZIP, чтобы еще больше уменьшить размер. Расширение пользовательских скриптов автоматически обнаруживает использование сжатия в формат GZIP.
cat script | gzip -9 | base64 -w 0
Для выполнения скрипта расширение для пользовательских сценариев использует следующий алгоритм:
- Убедитесь, что длина значения скрипта не превышает 256 КБ.
- Base64 декодирует значение скрипта.
- Попробуйте распаковать декодированное из кодировки Base64 значение с помощью gunzip.
- Запишите декодированное и по желанию распакованное значение на диск: /var/lib/waagent/custom-script/#/script.sh.
- Запустите скрипт с помощью команды
_/bin/sh -c /var/lib/waagent/custom-script/#/script.sh
.
Свойство: управляемая идентификация
Примечание.
Это свойство должно быть задано только в защищенных параметрах.
Расширение пользовательского скрипта версии 2.1 и более поздних версий поддерживает управляемые удостоверения для скачивания файлов из URL-адресов, предоставленных в параметре fileUris
. Этот подход позволяет расширению Custom Script получать доступ к частным blob-объектам или контейнерам хранилища Azure без необходимости передавать секреты, такие как токены общей подписи (SAS) или ключи учетной записи хранилища.
Чтобы использовать эту функцию, добавьте удостоверение, назначаемое системой или удостоверение, назначаемое пользователем, на ВМ или в масштабируемый набор виртуальных машин, где должно выполняться расширение пользовательского скрипта. Затем предоставьте управляемому удостоверению доступ к контейнеру хранилища Azure или объекту BLOB.
Чтобы использовать назначаемое системой удостоверение на целевой виртуальной машине или масштабируемом наборе виртуальных машин, задайте managedidentity
пустой объект JSON.
{
"fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
"commandToExecute": "sh script1.sh",
"managedIdentity" : {}
}
Чтобы использовать назначенное пользователем удостоверение на целевой виртуальной машине или масштабируемом наборе виртуальных машин, настройте managedidentity
с клиентским или объектным ID управляемого удостоверения.
{
"fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
"commandToExecute": "sh script1.sh",
"managedIdentity" : { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }
}
{
"fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
"commandToExecute": "sh script1.sh",
"managedIdentity" : { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }
}
Примечание.
Свойство managedIdentity
не должно применяться вместе со свойствами storageAccountName
или storageAccountKey
.
Развертывание шаблона
Вы можете развернуть расширения виртуальной машины Azure с помощью шаблонов диспетчера ресурсов Azure. Схема JSON, подробно описанная в предыдущем разделе, может использоваться в шаблоне Azure Resource Manager для запуска расширения пользовательского скрипта во время развертывания шаблона. Пример шаблона, который содержит расширение пользовательских скриптов, можно найти на сайте GitHub.
{
"name": "config-app",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2019-03-01",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
],
"tags": {
"displayName": "config-app"
},
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
},
"protectedSettings": {
"commandToExecute": "sh hello.sh <param2>",
"fileUris": ["https://github.com/MyProject/Archive/hello.sh"
]
}
}
}
Примечание.
Имена этих свойств зависимы от регистра. Чтобы избежать проблем с развертыванием, используйте имена, как показано здесь.
Azure CLI (интерфейс командной строки Azure)
При использовании Azure CLI для запуска расширения пользовательского скрипта создайте один или несколько файлов конфигурации. Как минимум, файл конфигурации должен содержаться commandToExecute
. Команда az vm extension set
ссылается на файл конфигурации:
az vm extension set \
--resource-group myResourceGroup \
--vm-name myVM --name customScript \
--publisher Microsoft.Azure.Extensions \
--protected-settings ./script-config.json
Кроме того, можно указать параметры в команде в виде строки в формате JSON. Такой подход позволяет задать конфигурацию во время выполнения и без отдельного файла конфигурации.
az vm extension set \
--resource-group exttest \
--vm-name exttest \
--name customScript \
--publisher Microsoft.Azure.Extensions \
--protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'
Пример: общедоступная конфигурация с файлом сценария
В этом примере используется следующий файл скрипта с именем script-config.json:
{
"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
"commandToExecute": "./config-music.sh"
}
Создайте файл скрипта с помощью текстового редактора или с помощью следующей команды CLI:
cat <<EOF > script-config.json { "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"], "commandToExecute": "./config-music.sh" } EOF
Выполните следующую команду:
az vm extension set \ --resource-group myResourceGroup \ --vm-name myVM --name customScript \ --publisher Microsoft.Azure.Extensions \ --settings ./script-config.json
Пример: общедоступная конфигурация без файла сценария
В этом примере используется следующее содержимое в формате JSON:
{
"commandToExecute": "apt-get -y update && apt-get install -y apache2"
}
Выполните следующую команду:
az vm extension set \
--resource-group tim0329vmRG \
--vm-name tim0329vm --name customScript \
--publisher Microsoft.Azure.Extensions \
--settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'
Пример: открытые и защищенные файлы конфигурации
Используйте общедоступный файл конфигурации, чтобы указать универсальный код ресурса (URI) файла скрипта:
{
"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}
Используйте защищенный файл конфигурации, чтобы указать команду для выполнения:
{
"commandToExecute": "./config-music.sh"
}
Создайте общедоступный файл конфигурации с помощью текстового редактора или с помощью следующей команды CLI:
cat <<EOF > script-config.json { "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"] } EOF
Создайте защищенный файл конфигурации с помощью текстового редактора или с помощью следующей команды CLI:
cat <<EOF > protected-config.json { "commandToExecute": "./config-music.sh" } EOF
Выполните следующую команду:
az vm extension set \ --resource-group myResourceGroup \ --vm-name myVM \ --name customScript \ --publisher Microsoft.Azure.Extensions \ --settings ./script-config.json \ --protected-settings ./protected-config.json
Наборы масштабирования виртуальных машин
Если развернуть расширение пользовательского скрипта из портала Azure, у вас нет контроля за истечением срока действия токена SAS для доступа к скрипту в учетной записи хранилища. Начальное развертывание работает, но по истечении срока действия SAS-токена учетной записи хранения любая последующая операция масштабирования завершается ошибкой, потому что расширение для пользовательских скриптов больше не может получить доступ к учетной записи хранения.
Рекомендуется использовать PowerShell, Azure CLI или шаблон Azure Resource Manager при развертывании расширения пользовательского скрипта в масштабируемом наборе виртуальных машин. Таким образом, вы можете использовать управляемое удостоверение или напрямую управлять сроком действия маркера SAS для доступа к скрипту в вашей учетной записи хранения так долго, как вам нужно.
Устранение неполадок
Когда расширение пользовательских сценариев выполняется, сценарий создается или загружается в каталог, который выглядит, как показано в следующем примере. Выходные данные команды также сохраняются в этот каталог в файлах stdout
и stderr
.
sudo ls -l /var/lib/waagent/custom-script/download/0/
Чтобы устранить неполадки, сначала проверьте журнал агента Linux и убедитесь, что расширение запущено:
sudo cat /var/log/waagent.log
Отслеживайте выполнение расширения. Выглядит примерно так:
2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc
В приведенных выше выходных данных:
-
Enable
— означает момент запуска команды. -
Download
— относится к скачиванию пакета расширения пользовательских скриптов из Azure, а не файлов сценария, указанных вfileUris
.
Расширение сценариев Azure создает журнал, который можно найти здесь:
sudo cat /var/log/azure/custom-script/handler.log
Найдите отдельное исполнение. Выглядит примерно так:
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end
Здесь вы можете увидеть:
- команда
enable
, запускающая этот журнал; - Параметры, переданные в расширение.
- Расширение, скачающее файл и результат этого действия.
- выполняемая команда и результат выполнения.
Вы можете также получить состояние выполнения расширения пользовательских скриптов, включая фактически переданные аргументы как commandToExecute
, с помощью Azure CLI.
az vm extension list -g myResourceGroup --vm-name myVM
Выходные данные выглядят так:
[
{
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
"resourceGroup": "rgname",
"settings": {
"commandToExecute": "sh script.sh > ",
"fileUris": [
"https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
"https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
]
},
"tags": null,
"type": "Microsoft.Compute/virtualMachines/extensions",
"typeHandlerVersion": "2.0",
"virtualMachineExtensionType": "CustomScript"
},
{
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
"instanceView": null,
"location": "eastus",
"name": "OmsAgentForLinux",
"protectedSettings": null,
"provisioningState": "Succeeded",
"publisher": "Microsoft.EnterpriseCloud.Monitoring",
"resourceGroup": "rgname",
"settings": {
"workspaceId": "workspaceid"
},
"tags": null,
"type": "Microsoft.Compute/virtualMachines/extensions",
"typeHandlerVersion": "1.0",
"virtualMachineExtensionType": "OmsAgentForLinux"
}
]
Проблемы синтаксиса Azure CLI
Azure CLI может выполняться в нескольких средах оболочки, но с небольшими вариантами формата. Если вы столкнулись с непредвиденными результатами команд Azure CLI, см. статью Как успешно использовать Azure CLI.
Дальнейшие действия
Смотрите код, текущие проблемы и версии в custom-script-extension-linux.