Como usar expressões no Cloud Provisioning and Governance

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 9 min. de leitura
  • As expressões em ações de política podem definir ou substituir valores. As expressões em planos gráficos podem acessar atributos de recursos e mapear valores para campos de formulário de solicitação. As expressões estão disponíveis em blocos de recursos, planos gráficos, políticas e em qualquer lugar que Cloud Provisioning and Governance permita scripts.

    Como usar expressões

    As expressões podem conter os valores das informações geradas dinamicamente no sistema, como os valores das seleções que os usuários fazem no Portal de usuário da nuvem. As expressões estão disponíveis em blocos de recursos, planos gráficos, políticas e em qualquer lugar que Cloud Provisioning and Governance permita scripts.

    Como usar expressões em blocos de recursos

    Cada operação de bloco de recursos usa uma expressão para conter um valor para cada parâmetro. A expressão pode usar valores codificados, dados da pilha que o usuário provisiona no Portal de usuário da nuvem, dados no CMDB e dados derivados de scripts. Por padrão, Cloud Provisioning and Governance gera um conjunto de parâmetros e suas expressões para cada operação de bloco de recursos.

    Por exemplo, o parâmetro Location, que contém o datacenter ao qual um recurso pertence, usa a expressão ${parameter.Location}

    Figura 1. Expressões em um bloco de recursos
    Parâmetro de local para um bloco de recursos
    Como usar expressões em planos gráficos

    Os planos gráficos podem usar expressões para mapear parâmetros de entrada para cada operação em um bloco de recursos. Por padrão, o plano gráfico exibe os mesmos parâmetros e valores especificados no bloco de recursos.

    Você pode acessar atributos de plano gráfico com expressões. A expressão na coluna Mapeamento define atributos de plano gráfico para cada operação em uma etapa. Por exemplo, o atributo Local, que aparece no formulário de solicitação de pilha, pode ser acessado por meio da expressão {$parameter.Location}. O parâmetro Local com o valor ${parameter.Location} aparece na guia Entradas quando você seleciona uma operação de plano gráfico.

    Figura 2. Expressões em um plano gráfico
    O parâmetro de localização e a expressão
    Como usar expressões em ações de política

    As ações de política podem usar expressões para substituir valores de parâmetro que os usuários enviam em um formulário de solicitação no Portal de usuário da nuvem. Você também pode acessar e substituir dados do usuário em operações de pilha. Por exemplo, use a seguinte expressão para renomear uma pilha: formData.Stackname = "your-naming-convention";.

    Figura 3. Expressões em um script de política
    Script de exemplo de política

    Você pode acessar atributos de plano gráfico com expressões. A expressão na coluna Mapeamento define atributos de plano gráfico para cada operação em uma etapa. Por exemplo, o atributo Local, que aparece no formulário de solicitação de uma máquina virtual, é acessado na seguinte expressão: {$parameter.Location}.

    Tipos de expressão

    Expressões de definição
    As expressões de definição são uma forma de vinculação antecipada (ou vinculação estática). Essas vinculações se referem à vinculação de tempo de compilação e são avaliadas quando o usuário envia o formulário de solicitação de pilha (quando o provisionamento de pilha ou de recursos é iniciado). As expressões de definição não têm acesso aos dados gerados durante Orquestração. As expressões de definição são colocadas entre chaves. Por exemplo: ${parameter.CloudAccount}
    Expressões de tempo de execução
    As expressões de tempo de execução são uma forma de vinculação atrasada (ou vinculação dinâmica). Essas vinculações se referem à vinculação de tempo de execução e têm acesso aos dados criados durante Orquestração (por exemplo, empilhar itens). As expressões de tempo de execução são avaliadas quando chamadas durante uma execução de Orquestração. As expressões de tempo de execução são normalmente usadas para referência com pontos para dados em tabelas. As expressões de tempo de execução são colocadas entre parênteses. Por exemplo: $(Stack.items[VM1].attributes[node_id])
    Expressões de definição/tempo de execução
    Algumas expressões incluem expressões de definição e de tempo de execução.
    Expressões complexas
    Você pode aninhar expressões de qualquer tipo em outras expressões.

    Sintaxe e exemplos de expressão de definição

    A sintaxe permitida usa um cifrão e chaves. Estes tipos estão disponíveis:
    • ${parameter.}. Use este tipo de expressão para recuperar valores de atributos de entrada de processos, como provisões de planos gráficos. Os dados não são obtidos das tabelas.
    • ${Stack.items[]}. Use esta sintaxe para acessar atributos de itens específicos em uma pilha.
    • ${randomNumber}. Use esta sintaxe para gerar um número aleatório. Por exemplo, você pode provisionar uma VM com um nome de nó aleatório ou nome de pilha.
    Tabela 1. Exemplos de expressão de definição
    Exemplo Descrição
    ${parâmetro.CódigoDeCobrança} Esta expressão mostra como um parâmetro de código de cobrança aparece em um plano gráfico.
    ${parameter.formData.CatalogAttributeType} Esta expressão usa um atributo de catálogo que é enviado por um usuário enquanto o usuário preenche o formulário para um item do catálogo no Portal de usuário da nuvem.
    ${parameter.userData.userId} Esta expressão usa o ID de um usuário enquanto o usuário preenche o formulário de um item do catálogo no Portal de usuário da nuvem.
    ${Stack.items[Virtual Server].attributes[sys_id]} Esta expressão obtém o sys_id de um servidor virtual que está separado de uma pilha. Servidor virtual é o alias de um bloco de recursos usado na pilha.

    Sintaxe e exemplos de expressões de tempo de execução

    A sintaxe permitida usa um cifrão e parênteses. Estes tipos estão disponíveis:
    • $(ci.tablename) em que tablename é uma tabela no sistema, geralmente uma tabela de IC no CMDB. Use esta sintaxe para acessar valores de campos na tabela.
    • $(Stack.items[]). Use esta sintaxe para acessar atributos de itens específicos em uma pilha.
    Tabela 2. Exemplos de expressão de tempo de execução
    Exemplo Descrição
    $(ci.cmdb_ci_cloud_subnet[ sys_id=12231231231231231231].cidr) Este ponto de expressão vai até a tabela Sub-rede em nuvem, encontra o registro específico com o sys_id fornecido e obtém o valor da coluna cidr.
    $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}]) Esta expressão combina expressões de tempo de execução e de tipo de definição. O sinal de igual = é usado para avaliar um valor para uma correspondência. A expressão faz referência com pontos até a tabela de Pool de IPs e procura a sub-rede que tem o ID de sub-rede que o usuário enviou.
    $(ci.cmdb_ci_cloud_subnet[${parameter.formData.SubnetId}].cidr) Esta expressão combina expressões de tempo de execução e de tipo de definição. A expressão obtém o valor do campo cidr de uma sub-rede que o usuário escolheu durante o provisionamento. Os colchetes [] indicam que a expressão faz referência com pontos até a tabela Sub-rede em nuvem e, em seguida, verifica o valor da sub-rede que o usuário enviou em um provisionamento de plano gráfico. A expressão obtém o valor do campo cidr e vai até o valor no campo cidr do sys_id da sub-rede.
    $(Stack.items[Servidor virtual].attributes[sys_id]) Como no exemplo de expressão de definição, esta expressão usa o sys_id de um servidor virtual que está separado de uma pilha.

    Exemplo de expressão

    $(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].private_ip)
    • $(ci: expressão de tempo de execução para recuperar dados da tabela.
    • cmdb_ci_nic: IC para NIC (Placa de Interface de Rede).
    • $(Script: Expressão baseada em script.
    • CMPVMNICs: Inclusão de script.
    • getNICs: função dentro de uma inclusão de script.
    • arg: argumentos para a função de inclusão de script. Os argumentos são separados por "," quando há vários atributos.
    • $(Stack.items: Expressão de pilha de tempo de execução para recuperar item de pilha de uma pilha. O argumento é o alias especificado no plano gráfico.
    • Virtual Server: alias do recurso usado no plano gráfico.
    • $(Stack.items[Virtual Server].attributes[sys_id]): Recupere o sys_id da instância de recurso do item de pilha ("Servidor virtual") em uma pilha.
    • private_ip: Atributo de cmdb_ci_nic. Substitua pelo IP público, se necessário.

    Expressões

    Simple parameter mapping expression

    Este tipo de expressão recupera valores de atributos de entrada de processos, como operações de plano gráfico, blocos de recursos e políticas. Os dados não são obtidos das tabelas. Mapeia valores de uma camada para outra, como de um plano gráfico para um recurso para a API de nuvem.

    • Tipo: definidor
    • Sintaxe: ${parameter.}
    • Exemplos:
      • ${parameter.BillingCode} retorna o código de cobrança.
      • ${parameter.formData.CatalogAttributeType} usa um atributo de catálogo que é enviado no formulário de solicitação no Portal de usuário da nuvem.
      • ${parameter.userData.userId} usa o ID de um usuário que está trabalhando no formulário de solicitação no Portal de usuário da nuvem.

    Stack item expression

    Uma instância de IC no CMDB representa cada item de pilha. Use expressões de item de pilha para pesquisar propriedades de primeiro nível no IC que apóia o item de pilha ou no próprio item de pilha.

    • Tipo: definitional/runtime
    • Sintaxe: ${Stack.items[]} ou $(Stack.items[])
    • Exemplos:

      ${Stack.items[VirtualServer1].attributes[sys_id]} é uma expressão de tipo de definição que obtém o sys_id de um servidor virtual em uma pilha. VirtualServer1 é o alias de um bloco de recursos usado na pilha.

      $(Stack.items[VirtualServer2].attributes[sys_id]) é uma expressão de tipo de tempo de execução que usa o sys_id de um servidor virtual que faz parte de uma pilha.

      ${Stack.items[vm1].attributes[node_id]} lê o atributo node_id do IC que foi criado para a VM. vm1 é o nome do item da pilha (ou o alias do recurso no plano gráfico).

      $(Stack.items[vm1].status) lê o status do item da pilha.

    Property override expressions in policies

    Nas políticas, você pode substituir as propriedades extraindo um valor do sistema ou usando um número aleatório. Você pode usar dados dos formulários no Portal de usuário da nuvem e do usuário que realizou a operação no formulário.

    • Tipo: definitional/runtime
    • Sintaxe: $ {parameter.formData.xyz} ou $ { this.parameter.userData.xyz}
    • Exemplos:

      O valor a seguir pode definir o nome da pilha como Stack_Bob.Smith@company.com: Stack_${parameter.userData.userId}

      Defina valores de pilha ou tabela usando expressões de tempo de execução, obtendo a sub-rede da tabela Pools de IP:

      $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}])

      Em scripts, você pode atribuir valores da seguinte forma:

      formData.App_Server_NodeName = "MyNodeName";

      this.parameter.userData.userId == 'servicenowuserId';

    • Consulte também Criar um script de ação de política.

    Script expression

    No exemplo, VMProperties é uma inclusão de script com uma função chamada getIP. Uma expressão de script também é um exemplo de uma expressão complexa (a expressão está aninhada).

    • Tipo: tempo de execução
    • Sintaxe: $(Script:scriptName.function[])
    • Exemplos:

      $(Script:VMPropertiesUtil.getIP[ arg=$(Stack.items[VM1].attributes[object_id])])

      Expressão para IP privado:$(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].private_ip)

      Expressão para IP público: $(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].public_ip)

      Expressão para obter o alias de credencial: $(Script:CMPVMUtils.getCredentialAlias[arg=${Stack.items[Virtual Server].attributes[sys_id]}])

      Expressão para obter o endereço IP: $(Script:CMPVMUtils.getReachableIp[arg=$(Stack.items[Virtual Server].attributes[sys_id])])

    CI lookup expression

    Acessa valores de campos em uma tabela, geralmente uma tabela de IC no CMDB.

    • Tipo: definitional/runtime
    • Sintaxe: $(ci.tableName)
    • Exemplos:

      $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}]) combina expressões de tempo de execução e tipo de definição. O operador = avalia um valor para uma correspondência. A expressão faz referência com pontos até a tabela de Pool de IPs e procura a sub-rede que tem o ID de sub-rede que o usuário enviou.

      $(ci.cmdb_ci_cloud_subnet[${parameter.formData.SubnetId}].cidr) obtém o valor do campo cidr de uma sub-rede que o usuário especificou durante o provisionamento. A expressão faz referência com pontos até a tabela Sub-rede em nuvem, verifica o valor da sub-rede que o usuário enviou em um provisionamento de plano gráfico, extrai o valor do campo cidr e, em seguida, vai até o valor no campo cidr do sys_id da sub-rede.

    Random number expression

    Gera um número aleatório. Por exemplo, você pode provisionar uma VM com um nome de nó aleatório ou nome de pilha.

    • Tipo: tempo de execução
    • Sintaxe e exemplo: ${randomNumber}

    Scratchpad expression/Resource operation output attribute expression

    Lê atributos de saída de uma operação para outra.

    • Tipo: tempo de execução
    • Sintaxe: varia
    • Exemplo: para definir/expor saídas de uma operação:

      ${Compute Interface.CreateNode.Output.resp.nodeId}

      Para ler os atributos de saída (em que VM1.Provision é a operação cujos atributos de saída são lidos):

      $(Saídas[VM1.Provision].NodeId)

    Conditions in expressions

    Você pode usar expressões condicionais em etapas de plano gráfico e etapas de operação de recursos para executar condicionalmente ou ignorar a etapa. As expressões condicionais são expressões Javascript e oferecem suporte a substituições de expressão.

    • Tipo: definitional/runtime
    • Sintaxe: varia
    • Exemplos:

      '${parameter.CloudAccount}'=='Conta do Amazon Cloud'

      '$(Stack.items[vm1].attributes[node_id]) '== 'VM1'

    Complex expression

    Você pode aninhar expressões. No exemplo, ${parameter.ServerID} mapeia o sys_id do IC e é substituído antes que a expressão externa seja consumida.

    • Tipo: qualquer
    • Sintaxe: varia
    • Exemplo: $(ci.cmdb_ci_vm_instance[${parameter.ServerID}].name)

    Order context

    Esta expressão é útil para operações de ciclo de vida e permite que você faça referência com pontos nos atributos de pedido como parte da tabela sn_cmp_order.

    • Tipo: tempo de execução
    • Sintaxe: $(context.order.column_name)
    • Exemplos:
      • Item da solicitação: $(context.order.sc_req_item)
      • Referência com pontos no objeto do item da solicitação: $(context.order.sc_req_item.number)
      • Expressão mista (constante + expressão): "ram$(context.order.sc_req_item.number)"