Contact Us 1-800-596-4880

Replacing Mule License Keys

When your Mule license expires, you must replace your Mule license key. Also use this procedure if you entered an incorrect license key during installation.

Perform the following steps on the controller node used to start the installation. For Azure and AWS installations, this node is named rtf-controller-1 by default.

Install rtfctl

The rtfctl utility is required to replace your Mule license key on Runtime Fabric. Follow the steps in Install rtfctl before continuing.

Confirm that the rtfctl binary is present in the current working directory and in the user $PATH.

Run rtfctl commands as a privileged user.

Procedure

  1. Base64 encode the new Mule .lic license file provided by MuleSoft:

    • On MacOS, run the following command in the terminal:

      BASE64_ENCODED_LICENSE=$(base64 -b0 license.lic)
    • On Unix, run the following command:

      BASE64_ENCODED_LICENSE=$(base64 -w0 license.lic)
    • On Windows, choose one of the following:

      • Use a WSL or Cygwin shell that includes the base64 tool and use the above Unix command.

      • Use the base64.exe program included with Windows git (C:\Program Files\Git\usr\bin).

      • Use the following Powershell command:

        $BASE64_ENCODED_LICENSE=[convert]::ToBase64String((Get-Content -path "license.lic" -Encoding byte))
  2. Use the rtfctl utility to apply the Base64 value of your license key. For more information on the rtfctl command, refer to rtfctl commands.

    rtfctl apply mule-license $BASE64_ENCODED_LICENSE
  3. To verify the Mule license key has applied correctly, retrieve the contents using the rtfctl utility:

    rtfctl get mule-license
You need to restart your Runtime Fabric Mule apps to take the latest changed license.

Get License Expiry Date

The GET fabric API (/organizations/{organizationId}/fabrics/{id}) response includes an optional licenseExpiryDate field:

{
    "id": "fabric_id",
    "name": "anna-qa-gke-rtf-1",
    "region": "us-east-1",
    "vendor": "gke",
    "vendorMetadata": {},
    "organizationId": "organization_id",
    "version": "2.2.9",
    "status": "Active",
    "desiredVersion": "2.2.9",
    "availableUpgradeVersion": "2.2.29",
    "createdAt": 1679684859167,
    "nodes": [
        {
            "uid": "50f344a7-a982-4380-b6ab-7cc8f26881ab",
            "name": "gke-cluster-1-default-pool-f4437ec2-7lkq",
            "kubeletVersion": "v1.24.9-gke.3200",
            "dockerVersion": "containerd://1.6.9",
            "role": "worker",
            "status": {
                "isHealthy": true,
                "isReady": true,
                "isSchedulable": true
            },
            "capacity": {
                "cpu": 0,
                "cpuMillis": 940,
                "memory": "2812Mi",
                "memoryMi": 2812,
                "pods": 110
            },
            "allocatedRequestCapacity": {
                "cpu": 0,
                "cpuMillis": 676,
                "memory": "2075Mi",
                "memoryMi": 2075,
                "pods": 9
            },
            "allocatedLimitCapacity": {
                "cpu": 2,
                "cpuMillis": 2383,
                "memory": "2940Mi",
                "memoryMi": 2940,
                "pods": 9
            }
        },
        {
            "uid": "31b86558-8009-44d9-985a-094952c11a78",
            "name": "gke-cluster-1-default-pool-f4437ec2-9mz7",
            "kubeletVersion": "v1.24.9-gke.3200",
            "dockerVersion": "containerd://1.6.9",
            "role": "worker",
            "status": {
                "isHealthy": true,
                "isReady": true,
                "isSchedulable": true
            },
            "capacity": {
                "cpu": 0,
                "cpuMillis": 940,
                "memory": "2812Mi",
                "memoryMi": 2812,
                "pods": 110
            },
            "allocatedRequestCapacity": {
                "cpu": 0,
                "cpuMillis": 708,
                "memory": "1310Mi",
                "memoryMi": 1310,
                "pods": 8
            },
            "allocatedLimitCapacity": {
                "cpu": 0,
                "cpuMillis": 900,
                "memory": "2040Mi",
                "memoryMi": 2040,
                "pods": 8
            }
        },
        {
            "uid": "a2e5d50b-e8a8-45df-a278-4bba4d30619f",
            "name": "gke-cluster-1-default-pool-f4437ec2-gr6e",
            "kubeletVersion": "v1.24.9-gke.3200",
            "dockerVersion": "containerd://1.6.9",
            "role": "worker",
            "status": {
                "isHealthy": true,
                "isReady": true,
                "isSchedulable": true
            },
            "capacity": {
                "cpu": 0,
                "cpuMillis": 940,
                "memory": "2812Mi",
                "memoryMi": 2812,
                "pods": 110
            },
            "allocatedRequestCapacity": {
                "cpu": 0,
                "cpuMillis": 488,
                "memory": "1350Mi",
                "memoryMi": 1350,
                "pods": 12
            },
            "allocatedLimitCapacity": {
                "cpu": 1,
                "cpuMillis": 1670,
                "memory": "2230Mi",
                "memoryMi": 2230,
                "pods": 12
            }
        }
    ],
    "secondsSinceHeartbeat": 192,
    "kubernetesVersion": "v1.24.11-gke.1000",
    "licenseExpiryDate": 1653523200000,
    "isManaged": false,
    "isHelmManaged": true,
    "clusterConfigurationLevel": "production",
    "features": {
        "enhancedSecurity": true,
        "persistentStore": false
    },
    "ingress": {
        "domains": []
    }
}

The Runtime Fabric Mule License Expiry Date is also exposed in the Runtime Manager UI, with a warning notification of License is expiring soon:

Runtime Manager UI with Mule License Expiry Date warning notification

See Also