Integrazione con ServiceNow

Come proprietario di un'app, è possibile gestire l'abilitazione dei flag delle funzionalità aggiungendo un flusso di lavoro supplementare con l'integrazione di ServiceNow® con App Configuration.

Puoi associare il flusso del processo di approvazione per tutte le modifiche alla configurazione a App Configuration a livello di ambiente. Quando si abilita il flusso di lavoro di approvazione, le modifiche si riflettono solo dopo l'approvazione e lo spostamento dello stato della richiesta di modifica da implementare. Una volta che la richiesta di modifica è nello stato di implementazione, le modifiche verranno riflesse automaticamente.

Assicurarsi di avere un'istanza di ServiceNow con privilegi di amministratore per aggiornare la configurazione.

Il nome esterno ServiceNow segue lo standard https://xxx.service-now.com, dove xxx è il nome dell'istanza. Il nome dell'istanza ServiceNow, il nome utente e la password possono essere recuperati dalla console ServiceNow. Accedere al proprio profilo ServiceNow e andare su Manage Instance Password per ottenere i dettagli.

Per l'integrazione con il flusso di lavoro ServiceNow, effettuare le seguenti operazioni:

  1. Dalla dashboard della tua istanza del servizio App Configuration, clicca su Impostazioni.

  2. Nella sezione " Flussi di lavoro di approvazione ", fare clic su " Crea flusso di lavoro ".

  3. Nella fase 1, definire l'ambito del flusso di lavoro:

    1. Indicare il nome del flusso di lavoro.

    2. Seleziona le risorse per le quali desideri attivare il flusso di lavoro.

      • Per le raccolte, le cancellazioni richiedono l'approvazione.

      • Per i segmenti, le modifiche e le cancellazioni richiedono l'approvazione.

      • Per gli ambienti, l'approvazione può essere richiesta per tutte le azioni relative ai flag di funzionalità, tutte le azioni relative alle proprietà e l'eliminazione dell'ambiente.

  4. Fai clic su Next.

  5. Al punto 2, configurare la connessione a un'istanza di ServiceNow. Selezionare il tipo di istanza per l'istanza di " ServiceNow " come " ServiceNow esterno ".

  6. Fai clic su " Rivedi " per controllare la configurazione del flusso di lavoro.

  7. Verifica i dettagli del flusso di lavoro e clicca su Crea per creare e applicare il flusso di lavoro.

Flusso di lavoro esterno

Per il flusso di lavoro esterno, di seguito sono riportati i passi da seguire.

  1. Immettere il nome URL dell'istanza ServiceNow.

  2. Inserisci il nome utente da utilizzare per connettersi all'istanza di ServiceNow.

  3. Immetti la Password da utilizzare per l'autenticazione del Nome utente menzionato in precedenza per l'autenticazione nell'istanza ServiceNow.

  4. Inserisci l'ID cliente necessario per recuperare il token di accesso OAuth.

  5. Immettere il segreto client richiesto per l'autenticazione dell' ID client fornito in precedenza.

L' ID e il segreto del client sono necessari per accedere all'istanza di ServiceNow. Per la creazione di un ID cliente e di un segreto cliente, consultare la documentazione di Service Now su come creare un endpoint API OAuth per i clienti esterni.

  1. Inserisci il nome del gruppo di approvazione definito in ServiceNow. Il nome del gruppo di approvazione conterrà una serie di persone autorizzate ad approvare le richieste di modifica create nel workflow ServiceNow.

  2. Impostare l'ora di scadenza della richiesta di modifica (in ore). Minimo 1 a massimo 999 ore.

  3. Imposta l'interruttore a levetta " Abilitato " su ON per attivare il flusso di lavoro per l'ambito selezionato.

È possibile creare un solo flusso di lavoro di approvazione per una risorsa.

Quando si crea un flusso di lavoro per un ambiente, è necessaria un'approvazione per la modifica o l'eliminazione delle risorse nell'ambito selezionato durante la creazione del flusso di lavoro (ad esempio, tutti i flag, tutte le proprietà o l'eliminazione dell'ambiente).

Per ogni operazione viene creata una richiesta di modifica e la risorsa non può essere modificata o eliminata in quell'ambiente finché la richiesta di modifica non viene approvata. La risorsa in attesa di approvazione in un ambiente può comunque essere modificata in altri ambienti.

Per visualizzare la richiesta di modifica, passa il mouse sull'icona CR accanto al nome della risorsa che stai modificando. Vedrai il link alla tua richiesta di modifica.

Ad esempio, se sono stati selezionati tutti i flag nell'ambito, l'attivazione o la disattivazione di un feature flag in quell'ambiente dà avvio a una richiesta di modifica che deve essere sottoposta al processo di approvazione.

I flag di funzionalità o le proprietà che erano già attivi prima dell'applicazione del flusso di lavoro continuano a funzionare normalmente, ma eventuali modifiche successive richiedono l'approvazione. Se si disattiva un flag di funzionalità, si applica il flusso di lavoro e poi si tenta di riattivare il flag, il suo stato passa a " : Operazione riuscita!" È stato avviato il flusso di lavoro relativo alle richieste di modifica ed è stata creata una richiesta di modifica.

Come aggiungere un tag obbligatorio alla richiesta di modifica del flusso di lavoro ServiceNow esterno?

Attenersi alla seguente procedura per aggiungere un tag obbligatorio alla richiesta di modifica per l'integrazione del flusso di lavoro ServiceNow esterno:

  1. Accedere all'istanza ServiceNow come amministratore.

  2. Apri una richiesta di modifica esistente.

    ServiceNow richiesta di modifica richiesta di modifica richiesta di modifica
    ServiceNow

  3. Fare clic sull'icona delle azioni aggiuntive per aprire le opzioni aggiuntive.

    ServiceNow azioni supplementari azioni supplementari azioni supplementari
    ServiceNow

  4. Fare clic su Configura e selezionare Layout modulo.

    Layout del modulo
    ServiceNow opzione di configurazione aggiuntiva - Layout del modulo

  5. In Layout modulo in Vista modulo e sezione, selezionare Richiesta di modifica e creare un nuovo campo con Nome esattamente come Tag Appconfiguration, Tipo come Stringae Lunghezza campo come Medio (100).

    Assicurarsi di immettere il campo Nome esattamente come Tag Appconfiguration (sensibile al maiuscolo / minuscolo).

    Crea nuovo campo
    ServiceNow opzione di configurazione aggiuntiva - Layout modulo - Crea nuovo campo

  6. Fai clic su Aggiungi. Una volta aggiunto, il nuovo campo verrà mostrato nella sezione Disponibile.

    Creato nuovo campo visualizzato nella sezione Disponibile
    ServiceNow opzione di configurazione aggiuntiva - Layout modulo - nuovo campo visualizzato nella sezione Disponibile

  7. Selezionare Appconfiguration tag dalla sezione Available e aggiungerlo alla sezione Selected.

    Selezione di un nuovo campo dalla sezione Disponibile alla sezione Selezionata
    ServiceNow opzione di configurazione aggiuntiva - Layout modulo - selezione di un nuovo campo dalla sezione Disponibile alla sezione Selezionata

  8. È possibile visualizzare il nuovo campo nella richiesta di modifica.

    Nuovo campo visualizzato nella richiesta di
    di modifica*Nuovo campo visualizzato nella richiesta di

    Il valore del campo viene aggiunto dal servizio App Configuration durante la creazione di nuove richieste di modifica. Pertanto, non modificare il valore o aggiungere altri valori al campo Tag Appconfiguration. La modifica o l'aggiunta di qualsiasi altro valore al campo può portare ad ignorare gli eventi della richiesta di modifica.

Come registrare o aggiungere lo script webhook alla tua istanza ServiceNow esterna?

Attieniti alla seguente procedura per registrare o aggiungere lo script webhook alla tua istanza ServiceNow:

  1. Accedere all'istanza ServiceNow come amministratore.

  2. Fare clic sulla scheda Tutti e cercare Business Rules elencate in System Definitions.

    ServiceNow Tutte le schede Tutte le schede - elencate in Definizioni di sistema
    ServiceNow Business Rules

  3. Nella pagina Business Rules, fare clic sul pulsante Nuovo.

    Nuova regola aziendale
    ServiceNow- Creare una nuova regola aziendale

  4. Nel nuovo record, aggiungere il Nome, selezionare la tabella come Richiesta di modifica. Selezionare la casella di spunta Avanzate per visualizzare la scheda delle opzioni avanzate.

    Opzione avanzata per aggiungere uno{: caption="webhookOpzione avanzata per aggiungere uno " caption-side="bottom"} webhook

  5. Nella scheda delle opzioni Avanzate, aggiungi lo script webhook.

    (function executeRule(current, previous /*null when async*/) {
       try {
          if (current.u_appconfiguration_tag == "appconfig-workflow" && (current.state == -1 || current.state == -5 || current.state == 4)) {
                //creating the glider Encrypt object
                var glideEncrypt = new GlideEncrypter();
                //fetching the sys_property that contains the IAM key
                var encryptedIbmIAMKey = gs.getProperty('<Add System property name which holds the IBM IAM key (Case Sensitive)>');
                //example: var encryptedKey = gs.getProperty('WorkflowAppConfigIamKey');
                //Decrypting the key
                var decryptedIAMKey = glideEncrypt.decrypt(encryptedIbmIAMKey);
                gs.addInfoMessage("IBM KEY DECRYPTION COMPLETED");
                if (Object.keys(decryptedIAMKey).length !== 0) {
                   gs.addInfoMessage("CHANGE REQUEST IDENTIFIED AS WORKFLOW RELATED");
                   //Adding the decrypted key to the IAM token generation body
                   var bodyContent = "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=" + decryptedIAMKey;
                   //Making POST call to IBM IAM to generate token
                   var ibmIamTokenRequest = new sn_ws.RESTMessageV2();
                   ibmIamTokenRequest.setHttpMethod('POST');
                   ibmIamTokenRequest.setEndpoint('https://iam.cloud.ibm.com/identity/token');
                   ibmIamTokenRequest.setRequestBody(bodyContent);
                   ibmIamTokenResponse = ibmIamTokenRequest.execute();
                   var ibmIamTokenResponseCode = ibmIamTokenResponse.getStatusCode();
                   gs.addInfoMessage("IBM IAM TOKEN CREATION HTTP RESPONSE CODE: " + ibmIamTokenResponseCode);
                   if (ibmIamTokenResponseCode == 200) {
                      //parsing json response to extract the access_token
                      var ibmIamTokenResponseData = JSON.parse(ibmIamTokenResponse.getBody());
    
                      //extracting the access_token
                      var access_token = ibmIamTokenResponseData.access_token;
                      var encryptedInstanceId = gs.getProperty('<Add System property name which holds the AppConfig InstanceId (Case Sensitive)>');
                      //example: var encryptedInstanceId = gs.getProperty('WorkflowIbmAppConfigInstanceId');
                      var decryptedInstanceId = glideEncrypt.decrypt(encryptedInstanceId);
                      gs.addInfoMessage("IBM APP CONFIG INSTANCE ID DECRYPTION COMPLETED");
                      //preparing webhook request to forward
                      var webHookRequest = new sn_ws.RESTMessageV2();
                      //Refer link https://cloud.ibm.com/apis/app-configuration#endpoints-urls for more info on base URL
                      //Choose the base url from below based on your AppConfig instance region
                      //Dallas: https://us-south.apprapp.cloud.ibm.com
                      //Washington DC: https://us-east.apprapp.cloud.ibm.com
                      //London: https://eu-gb.apprapp.cloud.ibm.com
                      //Sydney: https://au-syd.apprapp.cloud.ibm.com
                      //Frankfurt: https://eu-de.apprapp.cloud.ibm.com
                      //Madrid: https://eu-es.apprapp.cloud.ibm.com
    
                      webHookRequest.setEndpoint('{{AppConfigRegionBaseURL}}/apprapp/workflow/v1/instances/' + decryptedInstanceId + '/crevents');
                      webHookRequest.setRequestHeader('Authorization', 'Bearer ' + access_token);
                      webHookRequest.setHttpMethod('POST');
                      webHookRequest.setRequestHeader("Accept", "application/json");
                      webHookRequest.setRequestHeader("Content-Type", "application/json");
    
                      //preparing the data for the webhook request
                      var webHookReqDataObject = new Object();
                      //BELOW ARE THE DATA THAT IS NEEDED TO PROCESS THE REQUEST, MODIFYING OR ALTERING THE DATA OR THE ATTRIBUTE WILL RESULT IN WEBHOOK REQUEST FAILURE.
                      webHookReqDataObject.operation = String(current.operation());
                      webHookReqDataObject.short_description = String(current.short_description);
                      webHookReqDataObject.change_request_id = String(current.number);
                      webHookReqDataObject.description = String(current.description);
                      webHookReqDataObject.cr_state = String(current.state);
                      webHookReqDataObject.cr_approval_assignment_group = String(current.assignment_group);
                      webHookReqDataObject.appconfiguration_tag = String(current.u_appconfiguration_tag);
                      webHookReqDataObject.implementation_time = String(current.work_start);
                      var webHookJsonStringData = JSON.stringify(webHookReqDataObject);
                      gs.addInfoMessage(webHookJsonStringData);
                      webHookRequest.setRequestBody(webHookJsonStringData);
    
                      //checking the change request has the tag, we only accept the CR with the below mentioned tag id
                      gs.addInfoMessage("SENDING REQUEST TO APP CONFIGURATION WEBHOOK HANDLER");
                      var webHookResponse = webHookRequest.execute();
                      httpResponseStatus = webHookResponse.getStatusCode();
                      gs.addInfoMessage("APP CONFIGURATION WEBHOOK HANDLER RESPONSE CODE:  " + httpResponseStatus);
                      if (httpResponseStatus == 200) {
                            gs.addInfoMessage("SUCCESSFULLY EXECUTED THE WEBHOOK CALL");
                      } else {
                            //try once more
                            webHookResponse = webHookRequest.execute();
                            httpResponseStatus = webHookResponse.getStatusCode();
                            gs.addInfoMessage("WEBHOOK CALL RETRY STATUS CODE:  " + httpResponseStatus);
                            gs.addInfoMessage(webHookResponse.getBody());
                      }
                   } else {
                      gs.addInfoMessage("IBM IAM TOKEN GENERATION FAILED");
                   }
                } else {
                   gs.addInfoMessage("DECRYPTED IAM KEY IS EMPTY OR NOT FOUND");
                }
          } else {
                gs.addInfoMessage("CR STATE : " + current.state + " CR APPCONFIGURATION TAG VALUE : " + current.u_appconfiguration_tag);
                gs.addInfoMessage("CHANGE REQUEST DOES NOT BELONG TO WORKFLOW INTEGRATION OR STATE OF THE CR IS NOT VALID");
          }
       } catch (ex) {
          var message = ex.getMessage();
          gs.info(message);
       }
    })(current, previous);
    
  6. Modifica lo script copiato con la tua chiave API delle credenziali del servizio IBM IAM o App Configuration e l'ID istanza App Configuration.

  7. Passare al separatore Quando eseguire e selezionare la casella di controllo Aggiorna.

    ServiceNow- Quando eseguire la scheda - Quando eseguire la scheda - Quando eseguire la scheda
    ServiceNow

  8. Fare clic su Inoltra per salvare i dettagli.

Come aggiungere la chiave API delle credenziali del servizio IBM IAM o App Configuration per lo script webhook?

Lo script webhook ha bisogno della chiave API delle credenziali del servizio IBM IAM per le chiamate webhook o App Configuration, dove puoi archiviare la chiave API per generare il token.

Attieniti alla seguente procedura:

  1. Accedere all'istanza ServiceNow come amministratore.

  2. Fare clic sulla scheda Tutti e ricercare sys_properties.LIST e premere Invio. In alternativa, puoi andare a https://{{instanceid}}.service-now.com/sys_properties_list.do, dove instanceid è il tuo ID istanza ServiceNow.

    ServiceNow Tutte le schede Tutte le schede - Tutte le schede
    ServiceNow

  3. Vengono visualizzati i dettagli Proprietà di sistema.

    Proprietà del sistema
    ServiceNow- Proprietà del sistema

  4. Fare clic su Nuovo per creare una nuova proprietà di sistema.

    Nuova proprietà del sistema
    ServiceNow- Nuova proprietà del sistema

  5. Aggiungere i seguenti dettagli per aggiungere il token. Utilizzare il tipo password2 per memorizzare la chiave. Questo tipo crittografa i dati e può essere decrittografato solo con l'istanza ServiceNow.

    Proprietà del sistema
    ServiceNow- Proprietà del sistema

  6. Fare clic su Inoltra per salvare la chiave nell'istanza ServiceNow. Una volta salvati, puoi vedere che i dati sono crittografati.

Come aggiungere l'ID istanza App Configuration alla proprietà di sistema ServiceNow per lo script webhook?

Attieniti alla seguente procedura:

  1. Accedere all'istanza ServiceNow come amministratore.

  2. Fare clic sulla scheda Tutti e ricercare sys_properties.LIST e premere Invio. In alternativa, puoi andare a https://{{instanceid}}.service-now.com/sys_properties_list.do, dove instanceid è il tuo ID istanza ServiceNow.

    ServiceNow Tutte le schede Tutte le schede - Tutte le schede
    ServiceNow

  3. Vengono visualizzati i dettagli Proprietà di sistema.

    Proprietà del sistema
    ServiceNow- Proprietà del sistema

  4. Fare clic su Nuovo per creare una nuova proprietà di sistema.

    Nuova proprietà del sistema
    ServiceNow- Nuova proprietà del sistema

  5. Aggiungi l'ID istanza App Configuration. Utilizzare il tipo password2 per memorizzare la chiave. Questo tipo crittografa i dati e può essere decrittografato solo con l'istanza ServiceNow.

    Proprietà del sistema
    ServiceNow- Proprietà del sistema

  6. Fare clic su Inoltra per salvare la chiave nell'istanza ServiceNow. Una volta salvati, puoi vedere che i dati sono crittografati.