Aggiungere la logica condizionale ai modelli di ARM

Completato

Potrebbe essere necessario distribuire una risorsa facoltativamente, in determinate condizioni. Un caso comune è l'aggiunta di un servizio di bilanciamento del carico in una macchina virtuale. Si supponga di avere un sito di e-commerce e di voler garantire che il sito sia in grado di far fronte all'aumento del traffico dovuto a una grande svendita. Un servizio di bilanciamento del carico è un tipo di risorsa che è possibile associare a una macchina virtuale. Aggiungendo una regola in modo condizionale, si abilita o disabilita il servizio di bilanciamento del carico applicato alla macchina virtuale in questione.

Immaginare le situazioni seguenti:

  • Risorsa pre-esistente. Quando si specifica una risorsa in un modello e la si distribuisce, si verifica una di queste due situazioni. La risorsa viene distribuita o non viene distribuita se esiste già. La verifica dell'esistenza di una risorsa è un'operazione che Azure Resource Manager esegue automaticamente, è implicita. La domanda è se è possibile usare questo meccanismo a proprio vantaggio quando si pensa come si può verificare se una risorsa esiste già.
  • Logica di ramificazione. In base ai parametri passati a un modello, in fase di distribuzione, potrebbe essere necessario distribuire un set di risorse diverso. Ciò che si esprime è noto come logica di ramificazione. Se il parametro ha un determinato tipo di valore, selezionare il primo ramo. In caso contrario, selezionare il secondo o il terzo ramo da distribuire. La logica di diramazione continua in questo modo.

Entrambe le situazioni precedenti rappresentano scenari in cui viene applicata la logica condizionale. La logica si trova nel sistema Resource Manager stesso o deve essere espressa in modo esplicito.

Distribuzione condizionale

Il condition costrutto consente di esprimere se si vuole distribuire o meno un elemento. Si tratta di una proprietà, con valore true o false, che è possibile associare a un elemento risorsa. In genere si trova un condition costrutto simile al codice JSON seguente nel modello:

"resources" : [
  {
    "condition": "[parameters('shouldDeploy')]"
  }
]

Nel codice JSON precedente, una proprietà condition viene aggiunta a una risorsa. Il valore della proprietà verrà valutato come il valore del parametro shouldDeploy.

Valutazione

Esistono due modi in cui è possibile valutare il condition costrutto. conoscerli può influire su come si decide di esprimere la logica condizionale. I due modi sono:

  • Il valore è true o false. Ad esempio, si consideri il costrutto seguente:

    "condition": "[parameters('deployAccount')]"
    

    Il valore deployAccount è un parametro il cui valore può essere passato in fase di distribuzione oppure può assumere il valore predefinito. Indipendentemente dall'approccio usato, il valore è rigorosamente false o true. Il tentativo di assegnare un altro valore diverso da un valore booleano causerà un errore.

  • Esiste un'espressione che restituisce true o false. Anziché assegnare un valore true/false fisso al costrutto condition è possibile usare la funzione di modello predefinita equals(arg1, arg2). arg1 deve essere uguale a arg2 affinché la funzione restituisca true. Il costrutto condition ora può essere espresso come segue:

    "condition": "[equals(parameters('newOrExisting'),'new')]"
    

    Usando la funzione equals(), il valore passato a un parametro non deve più essere true o false. Deve corrispondere al secondo argomento della funzione equals(). Nell'esempio JSON precedente il valore del parametro newOrExisting deve corrispondere alla stringa new affinché la funzione restituisca true.