> For the complete documentation index, see [llms.txt](https://docs.inforiver.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.inforiver.com/inforiver-enterprise-on-prem/upgrade/update-inforiver-editable-container-instances-for-v4.6.x.x-and-above.md).

# Update Inforiver EDITable Container Instances (for V4.6.x.x and above)

This guide details the required steps to update Inforiver Editable container instances within an Azure on-premises environment. Please follow these instructions carefully to ensure a smooth and successful update that incorporates the latest features.

### 1. Edit the CNI Configuration

1. Open your Azure CLI window and run the following command:

{% code fullWidth="false" %}

```shell
az container export -g <resource_group_name> -n <container_instance_name> --file output_file.yaml
```

{% endcode %}

<figure><img src="/files/Z73OtpI4n9rI3UX3IYm9" alt=""><figcaption><p>Launch Azure CLI and execute the command to export ACI config into file</p></figcaption></figure>

2. To download the output file, click on **Manage files -> Download** and enter the path of the output file. Click **Download**.

<figure><img src="/files/Xba4ht195sGAIEz2uyPy" alt=""><figcaption><p>Download the output file</p></figcaption></figure>

3. Click on the output file to download it to your local system.

<figure><img src="/files/WrSKZEsg55fb4l8VDmP4" alt=""><figcaption><p>Download locally</p></figcaption></figure>

4. A secret environment variable with a minimum length of 32 characters is configured across all containers within the container instance. The secret should be generated as a secure alphanumeric value using a password generator.

* Example Value: dEvMOiJTIfjb5U1TVzzQhts2WLQR4GC1

<figure><img src="/files/5xkFXxzdEm8KlqDrwFTp" alt=""><figcaption><p>      Add the SECRET environment variable</p></figcaption></figure>

5. Provide the username and password for pulling the image from the registry. You would have received this information during the initial deployment. If not, please get in touch with our support team.
6. Remove the IP configuration section from the configuration file for the ACI.

<figure><img src="/files/OWlXAncVCHdncnDgWIiR" alt=""><figcaption><p>      Remove the IP configuration</p></figcaption></figure>

7. Provide the storage account details in the volume section for the container instance.

```yaml
volumes:
  - azureFile:
      shareName: <fileshare_name>
      storageAccountName: <storage_account_name>
      storageAccountKey: <storage_account_primary_key>
    name: infofile

```

**Note:** Storage account keys can be obtained from the respective storage account's **Access keys** section.

<figure><img src="/files/GwkHSx5UFuIyhaMKLPhn" alt=""><figcaption><p>    Storage account - Access key</p></figcaption></figure>

8. Please update the API version as specified below.

```yaml
apiVersion: '2023-02-01-preview'
```

9. Now configure the container configurations listed below in this file for Inforiver EDITable container deployment.

#### Containers Instance List

The Container Instances have been split into **Core**, **EDITable**, **Inforiver**, and **Infobridge** based on product requirements to support flexible and independent deployment of each component.

> #### Note: Transition from Default Azure Domain to Custom Domain
>
> When transitioning to a custom domain (e.g., [https://webapp.inforiver.com](https://webapp.inforiver.com/)) from the default Azure domain (e.g., [https://webapp.azurewebsites.net](https://webapp.azurewebsites.net/)), it is necessary to update the URL in the configuration settings of both the Azure App Service and the associated Container Instances. Specifically, ensure the environment variable `ADMIN_PORTAL_URL` is updated to reflect the new custom domain in both services.

#### 1. Core Container Instance:

**inforiver-cron-container**

```yaml
- name: inforiver-cron-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>         
      image: turing.azurecr.io/turing-cron:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 0.5

```

**inforiver-audit-container**

{% code overflow="wrap" %}

```yaml
- name: inforiver-audit-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>         
      image: turing.azurecr.io/turing-audit:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 0.5

```

{% endcode %}

**inforiver-orchestrator-container**

```yaml
- name: inforiver-orchestrator-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-orchestrator:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 1.0
```

**inforiver-worker-container**

```yaml
- name: inforiver-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 3.0
```

**inforiver-comment-worker-container**

```yaml
- name: inforiver-comment-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SERVICE_NAME
        value: commentWorker
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 1.0
```

#### 2. Editable Container Instance:

**inforiver-mdm-worker-container**

```yaml
- name: inforiver-mdm-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: PRODUCT_BUILD
        value: mde
      - name: SECRET
        secureValue: <Secret_Value>           
      image: turing.azurecr.io/turing-mdm-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 3.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile
```

**editable-visual-worker-container**

```yaml
- name: editable-visual-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: PRODUCT_BUILD
        value: mde
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-visual-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 2.0
```

#### 3. Inforiver Container Instance:

**inforiver-writeback-worker-container-1**

```yaml
- name: inforiver-writeback-worker-container-1
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>         
      image: turing.azurecr.io/turing-writeback-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 3.0
```

**inforiver-datainput-engine-worker-container**

```yaml
- name: inforiver-datainput-engine-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: DUCKDB_MOUNT_PATH
        value: /mnt/azure
      - name: PORT
        value: '9007'
      - name: SERVER_MODE
        value: ccv
      - name: SECRET
        secureValue: <Secret_Value>                          
      image: turing.azurecr.io/turing-infobridge-engine:<tag>
      ports:
        - port: 9007
          protocol: TCP
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 2.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile 
```

**inforiver-writeback-worker-container-2**

```yaml
- name: inforiver-writeback-worker-container-2
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-writeback-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 3.0
```

**inforiver-auto-writeback-worker-container**

```yaml
- name: inforiver-auto-writeback-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: IS_AUTO_WRITEBACK_CONTAINER
        value: Y
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-writeback-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 3.0

```

**inforiver-visual-worker-container**

```yaml
- name: inforiver-visual-worker-container
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-visual-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.25
          memoryInGB: 2.0

```

#### 4. Infobridge Container Instance:

**inforiver-infobridge-writeback-worker**

```yaml
- name: inforiver-infobridge-writeback-worker
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: PRODUCT_BUILD
        value: inforiver
      - name: LISTENER_MODE
        value: dataflow
      - name: SECRET
        secureValue: <Secret_Value>         
      image: turing.azurecr.io/turing-writeback-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 2.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile
```

**inforiver-infobridge-transformation-worker**

```yaml
- name: inforiver-infobridge-transformation-worker
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: PRODUCT_BUILD
        value: inforiver
      - name: SERVICE_NAME
        value: infobridgeTransformationWorker
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-datasource-integration-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 2.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile
```

**inforiver-infobridge-visual-worker**

```yaml
- name: inforiver-infobridge-visual-worker
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: PRODUCT_BUILD
        value: inforiver
      - name: SERVICE_NAME
        value: infobridgeVisualWorker
      - name: VISUAL_WORKER_LISTENER_MODE
        value: dataFlowSourceIntegration
      - name: DEFAULT_MODE
        value: Non-Aks
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-visual-worker:<tag>
      ports: []
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 2.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile
```

**inforiver-infobridge-engine-worker**

```yaml
- name: inforiver-infobridge-engine-worker
    properties:
      configMap:
        keyValuePairs: {}
      environmentVariables:
      - name: ADMIN_PORTAL_URL
        value: <Admin_Portal_URL>
      - name: DUCKDB_MOUNT_PATH
        value: /mnt/azure
      - name: SERVER_MODE
        value: engine
      - name: SECRET
        secureValue: <Secret_Value>              
      image: turing.azurecr.io/turing-infobridge-engine:<tag>
      ports:
        - port: 9006
          protocol: tcp
      resources:
        requests:
          cpu: 0.5
          memoryInGB: 4.0
      volumeMounts:
      - mountPath: /mnt/azure
        name: infofile
```

After applying the container configurations to all instances, review each container's settings to ensure that all the above configurations have been applied correctly.

### 2. Create ACI

After adding all the containers in the configuration files, execute the following commands in the Azure CLI to create each container instance.

```shell
az container create -g <resource_group_name> -n <container_instance_name> --file output_file.yaml
```

<img src="/files/x8sZR8Ik5ic0j0eLV9nb" alt="Launch Azure CLI and execute the command to create ACI" height="493" width="942">

The CNI will start provisioning the ACI. Please wait for the process to complete, then make the same updates to the other three files based on the product requirements.

After updating the ACI to the latest configuration, **update the app service environment variables** with the IP addresses of the container instance. To do this,

1. Navigate to **Inforiver App Service** > **Settings** > **Environment Variables**.
2. Once the Infobridge Container Instance is created, copy its assigned IP address and set the following environment variable. Then click **Apply** to save the configuration.

* Name: `IB_ENGINE_ENDPOINT`
* Value: \<IP address of infobridge container instance>:`9006`

<figure><img src="/files/y4vY7ugDg22wGZ2Y5pio" alt=""><figcaption><p>IP address of Infobridge Container Instance</p></figcaption></figure>

<figure><img src="/files/vjbrKLALb6jxNixB3R3x" alt=""><figcaption><p>Update the app service's environment variables</p></figcaption></figure>

3. Once the Inforiver container instance is created, copy its assigned IP address and set the following environment variable. Then click **Apply** to save the configuration.

* Name: `IR_ENGINE_ENDPOINT`
* Value: \<IP address of inforiver container instance>:`9007`

<figure><img src="/files/z2OYhgWmeVvrhX9SLell" alt=""><figcaption><p>IP address of Inforiver Container Instance</p></figcaption></figure>

<figure><img src="/files/MN7lprbmSFAxuE81zQpT" alt=""><figcaption><p>Update the app service's environment variables</p></figcaption></figure>

4. The secret environment variable configured in the container instance also needs to be added as an environment variable in the App Service with the same value.

<figure><img src="/files/VfxU32IGcgEcHzsVj9eh" alt=""><figcaption><p>Add the SECRET as environment variable in the app service</p></figcaption></figure>

By following the above steps, you will be able to successfully update your Inforiver EDITable container instance. The update brings enhanced features and improvements that will benefit your Azure on-premises environment. Ensure all the above steps are completed carefully, and refer to the provided screenshots for additional assistance.&#x20;

If you encounter any issues or need further assistance, please contact our technical support team [here](https://inforiver.com/contact-us/).

> We do support delta template updates, which are more efficient than manual updates; however, implementing them requires assistance from our DevOps team.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.inforiver.com/inforiver-enterprise-on-prem/upgrade/update-inforiver-editable-container-instances-for-v4.6.x.x-and-above.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
