Extensão de DSC para Linux (Microsoft.OSTCExtensions.DSCForLinux)

O Desired State Configuration (DSC) é uma plataforma de gerenciamento que permite gerenciar a equipe de TI e a infraestrutura de desenvolvimento tendo a configuração como código.

Observação

No momento, a extensão de DSC para Linux e a extensão de máquina virtual do Log Analytics para Linux apresentam um conflito e não têm suporte em uma configuração lado a lado. Não use as duas soluções em conjunto na mesma VM.

A extensão DSCForLinux é publicada e tem o suporte da Microsoft. A extensão instala o agente OMI e DSC em máquinas virtuais do Azure. A Extensão de DSC também pode realizar as seguintes ações:

  • Registrar a VM do Linux em uma conta da Automação do Azure para efetuar pull das configurações do serviço de Automação do Azure (Register ExtensionAction).
  • Enviar por push as configurações de MOF para a VM do Linux (Push ExtensionAction).
  • Aplicar a configuração de MOF Meta para a VM do Linux para configurar o servidor de pull para que efetue pull de configuração de nó (Pull ExtensionAction).
  • Instalar módulos de DSC personalizados na VM do Linux (Install ExtensionAction).
  • Remover módulos de DSC personalizados da VM do Linux (Remove ExtensionAction).

Pré-requisitos

Sistema operacional

Para os nós que executam o Linux, a extensão de DSC do Linux dá suporte a todas as distribuições do Linux listadas na Documentação de DSC do PowerShell.

Conectividade com a Internet

A extensão DSCForLinux requer que a máquina virtual de destino esteja conectada à Internet. A extensão de Registro, por sua vez, exige conectividade com o serviço de Automação. Para outras ações, como Efetuar Pull, Enviar por Push e Instalar, é preciso ter conectividade com o Armazenamento do Microsoft Azure e o GitHub. A conectividade depende de configurações fornecidas pelo cliente.

Esquema de extensão

Configuração pública

Aqui estão todos os parâmetros de configuração pública com suporte:

  • FileUri: (opcional, cadeia de caracteres) o URI do arquivo MOF, arquivo MOF meta ou arquivo ZIP de recursos personalizado.
  • ResourceName: (opcional, cadeia de caracteres) o nome do módulo de recurso personalizado.
  • ExtensionAction: (opcional, cadeia de caracteres) Especifica o que faz uma extensão. Os valores válidos são Registrar, Enviar por Push, Efetuar Pull, Instalar e Remover. Caso não especificado, é considerado por padrão como uma ação de Enviar por Push.
  • NodeConfigurationName: (opcional, cadeia de caracteres) o nome de uma configuração de nó a ser aplicada.
  • RefreshFrequencyMins: (opcional, int) especifica a frequência (em minutos) com que o DSC tenta obter a configuração do servidor de pull. Se a configuração no servidor de pull for diferente da atual no nó de destino, ela é copiada para o repositório pendente e aplicada.
  • ConfigurationMode: (opcional, cadeia de caracteres) Especifica como DSC deve aplicar a configuração. Os valores possíveis são ApplyOnly, ApplyAndMonitor e ApplyAndAutoCorrect.
  • ConfigurationModeFrequencyMins: (opcional, int) Especifica a frequência (em minutos) DSC garante que a configuração está no estado desejado.

Observação

No caso de uma versão anterior à 2.3, parâmetro de modo é o mesmo que ExtensionAction. “Modo” é um termo já bastante sobrecarregado em seu uso. Para evitar ambiguidade, da versão 2.3 em diante é usado Extensionaction. Para compatibilidade com versões anteriores, a extensão dá suporte ao modo e ExtensionAction.

Configuração protegida

Aqui estão todos os parâmetros de configuração protegidos com suporte:

  • StorageAccountName: (opcional, cadeia de caracteres): o nome da conta de armazenamento que contém o arquivo
  • StorageAccountKey: (opcional, cadeia de caracteres): a chave da conta de armazenamento que contém o arquivo
  • RegistrationUrl: (opcional, cadeia de caracteres) a URL da conta de Automação do Azure
  • RegistrationKey: (opcional, cadeia de caracteres) a chave de acesso da conta de Automação do Azure

Cenários

Registrar uma conta de Automação do Azure

protected.json

{
  "RegistrationUrl": "<azure-automation-account-url>",
  "RegistrationKey": "<azure-automation-account-key>"
}

public.json

{
  "ExtensionAction" : "Register",
  "NodeConfigurationName" : "<node-configuration-name>",
  "RefreshFrequencyMins" : "<value>",
  "ConfigurationMode" : "<ApplyAndMonitor | ApplyAndAutoCorrect | ApplyOnly>",
  "ConfigurationModeFrequencyMins" : "<value>"
}

Formato PowerShell

$privateConfig = '{
  "RegistrationUrl": "<azure-automation-account-url>",
  "RegistrationKey": "<azure-automation-account-key>"
}'

$publicConfig = '{
  "ExtensionAction" : "Register",
  "NodeConfigurationName": "<node-configuration-name>",
  "RefreshFrequencyMins": "<value>",
  "ConfigurationMode": "<ApplyAndMonitor | ApplyAndAutoCorrect | ApplyOnly>",
  "ConfigurationModeFrequencyMins": "<value>"
}'

Aplicar um arquivo de configuração do MOF (em uma conta do Armazenamento do Azure) à VM

protected.json

{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "FileUri": "<mof-file-uri>",
  "ExtensionAction": "Push"
}

Formato PowerShell

$privateConfig = '{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "FileUri": "<mof-file-uri>",
  "ExtensionAction": "Push"
}'

Aplicar um arquivo de configuração do MOF (no armazenamento público) à VM

public.json

{
  "FileUri": "<mof-file-uri>"
}

Formato PowerShell

$publicConfig = '{
  "FileUri": "<mof-file-uri>"
}'

Aplicar um arquivo de configuração do MOF meta (na conta de armazenamento do Azure) à VM

protected.json

{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "ExtensionAction": "Pull",
  "FileUri": "<meta-mof-file-uri>"
}

Formato PowerShell

$privateConfig = '{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "ExtensionAction": "Pull",
  "FileUri": "<meta-mof-file-uri>"
}'

Aplicar um arquivo de configuração do MOF meta (no armazenamento público) à VM

public.json

{
  "FileUri": "<meta-mof-file-uri>",
  "ExtensionAction": "Pull"
}

Formato PowerShell

$publicConfig = '{
  "FileUri": "<meta-mof-file-uri>",
  "ExtensionAction": "Pull"
}'

Instalar um módulo de recurso personalizado (arquivo ZIP na conta de Armazenamento do Azure) na máquina virtual

protected.json

{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}

Formato PowerShell

$privateConfig = '{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}'

Instalar um módulo de recurso personalizado (arquivo ZIP no armazenamento público) na máquina virtual

public.json

{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}

Formato PowerShell

$publicConfig = '{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}'

Remover um módulo de recurso personalizado de VM

public.json

{
  "ResourceName": "<resource-name>",
  "ExtensionAction": "Remove"
}

Formato PowerShell

$publicConfig = '{
  "ResourceName": "<resource-name>",
  "ExtensionAction": "Remove"
}'

Implantação de modelo

Extensões de VM do Azure podem ser implantadas com modelos do Azure Resource Manager. Modelos são ideais ao implantar uma ou mais máquinas virtuais que exigem configuração pós-implantação, tal como integração à Automação do Azure.

O modelo do Resource Manager de exemplo é dsc-linux-azure-storage-on-ubuntu e dsc-linux-public-storage-on-ubuntu.

Para mais informações sobre os modelos do Azure Resource Manager, consulte Criação de Modelos do Azure Resource Manager.

Implantação da CLI do Azure

Usar [Azure CLI][azure-cli]

Antes de implantar a extensão DSCForLinux, você deve configurar o public.json e o protected.json de acordo com os diferentes cenários descritos na seção 3.

Clássico

Importante

As VMs clássicas serão desativadas em 1º de março de 2023.

Se você usa os recursos de IaaS do ASM, realize a migração até 1º de março de 2023. Recomendamos que faça a migração o quanto antes para aproveitar as inúmeras melhorias feitas no Azure Resource Manager.

Para mais informações, confira Migrar os recursos de IaaS para o Azure Resource Manager até 1º de março de 2023.

O modo de implantação clássico também é chamado de modo de gerenciamento de serviços do Azure. Você pode alternar para ele, executando:

$ azure config mode asm

Você pode implantar Extensão DSCForLinux executando:

$ azure vm extension set <vm-name> DSCForLinux Microsoft.OSTCExtensions <version> \
--private-config-path protected.json --public-config-path public.json

Para saber a versão mais recente da extensão disponível, execute:

$ azure vm extension list

Gerenciador de Recursos

Você pode mudar para o modo do Gerenciador de Recursos do Azure executando:

$ azure config mode arm

Você pode implantar a extensão DSCForLinux executando:

$ azure vm extension set <resource-group> <vm-name> \
DSCForLinux Microsoft.OSTCExtensions <version> \
--private-config-path protected.json --public-config-path public.json

Observação

No modo Azure Resource Manager, azure vm extension list não está disponível no momento.

Usar [Azure PowerShell][azure-powershell]

Clássico

Você pode fazer logon sua conta do Azure (modo de gerenciamento de serviços do Azure) executando:

Add-AzureAccount

Você pode implantar a extensão DSCForLinux executando:

$vmname = '<vm-name>'
$vm = Get-AzureVM -ServiceName $vmname -Name $vmname
$extensionName = 'DSCForLinux'
$publisher = 'Microsoft.OSTCExtensions'
$version = '< version>'

Mude o conteúdo de $privateConfig e $publicConfig de acordo com os diferentes cenários na seção anterior.

$privateConfig = '{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'
$publicConfig = '{
  "ExtensionAction": "Push",
  "FileUri": "<mof-file-uri>"
}'
Set-AzureVMExtension -ExtensionName $extensionName -VM $vm -Publisher $publisher `
  -Version $version -PrivateConfiguration $privateConfig `
  -PublicConfiguration $publicConfig | Update-AzureVM

Gerenciador de Recursos

Você pode fazer logon na sua conta do Azure para o Azure Resource Manager executando:

Login-AzAccount

Para saber mais sobre como usar o Azure PowerShell com o Azure Resource Manager, consulte Gerenciar recursos do Azure usando o Azure PowerShell.

Você pode implantar a extensão DSCForLinux executando:

$rgName = '<resource-group-name>'
$vmName = '<vm-name>'
$location = '< location>'
$extensionName = 'DSCForLinux'
$publisher = 'Microsoft.OSTCExtensions'
$version = '< version>'

Mude o conteúdo de $privateConfig e $publicConfig de acordo com os diferentes cenários na seção anterior.

$privateConfig = '{
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'
$publicConfig = '{
  "ExtensionAction": "Push",
  "FileUri": "<mof-file-uri>"
}'
Set-AzVMExtension -ResourceGroupName $rgName -VMName $vmName -Location $location `
  -Name $extensionName -Publisher $publisher -ExtensionType $extensionName `
  -TypeHandlerVersion $version -SettingString $publicConfig -ProtectedSettingString $privateConfig

Solução de problemas e suporte

Solucionar problemas

Dados sobre o estado das implantações de extensão podem ser recuperados do Portal do Azure usando a CLI do Azure. Para exibir o estado da implantação das extensões de uma determinada máquina virtual, execute o seguinte comando usando a CLI do Azure.

az vm extension list --resource-group myResourceGroup --vm-name myVM -o table

A saída de execução da extensão é registrada no seguinte arquivo:

/var/log/azure/<extension-name>/<version>/extension.log file.

Código de erro: 51 representa uma distribuição sem suporte ou uma ação de extensão sem suporte. Em alguns casos, a extensão Linux DSC falha ao instalar a OMI quando já existe uma versão superior da OMI na máquina. [resposta de erro: não permitido de Downgrade (000003)]

Suporte

Caso precise de mais ajuda a qualquer momento neste artigo, entre em contato com os especialistas do Azure nos fóruns do Azure e do Stack Overflow no MSDN. Como alternativa, você pode registrar um incidente de suporte do Azure. Acesse o site de Suporte do Azure e selecione Obter Suporte. Para saber mais sobre como usar o suporte do Azure, leia as Perguntas frequentes do Suporte do Microsoft Azure.

Próximas etapas

Para obter mais informações sobre extensões, consulte Recursos e extensões da máquina virtual para Linux.