Socotra
Configuration GuideConfiguration General Topics

Configuration Redeployment

Overview

The first configuration for a tenant is deployed when the tenant is created. Any subsequent deployment is called a redeployment. The structure of a redeployed configuration is the same as for the first deployment, but there are rules about the changes to the configuration package that must be followed to ensure compatibility with existing data in the tenant.

The differences between a redeployed configuration and the existing active configuration fall into one of these categories:

  • Safe changes are allowed without restriction.
  • Disallowed changes will always cause re-deployment to fail.

If all changes between the new configuration and the active configuration are Safe, then the redeployment will overwrite the existing active configuration.

Clients can force the redeployment of unsafe changes for test tenants in non-production environments by setting the overwrite flag to true. This will cause the latest configuration to be overwritten with the configuration in the payload. This could cause system instability and data incompatibility, so should only be done with thorough testing on a test tenant. After the migration features described in this topic are delivered, it will be discouraged to bypass redeployment safety checks.

Safe Changes

The evaluation of a configuration change as Safe is based on the system's ability to anticipate and handle certain changes. Some changes may be defined as Safe but cause errors or exceptions in client-created plugin code or template definitions. You should always test prospective configuration changes in a test tenant before deploying them to production.

The following changes are defined as Safe and can be deployed without restriction:

  • Adding new definitions for:

    • Accounts
    • Products
    • Elements (of any category)
    • Charges
    • Custom Data Types
    • Coverage Terms
    • Documents
    • Tables
    • Installment Plans
    • Regions
    • Jurisdictions
  • Changing any of these properties, either globally or for a specific product:

    • defaultDurationBasis
    • defaultTermLength
    • defaultTimeZone
    • defaultCurrency
    • defaultTimeZone
    • defaultInstallmentPlan
  • Omitting any top-level property (this will be interpreted as leaving that item or class of item unchanged.)

  • Adding to a product's eligibleAccountTypes if the list is not empty (in other words, if the restrictions are being made more liberal.)

  • Removing or changing the displayName or any other UI support values for any item

  • Making any of these changes for products or elements:

    • Adding subelements to the contents using the ? or * quantifier

    • Changing the quantifier of any item in contents:

      • From + to *
      • From (blank) to ?
      • From ! to (blank)
      • From (blank) to ! if all the requirements for the automatic quantifier are met for that element definition
    • Adding coverage terms with quantifier ?

    • Changing the quantifier of any coverage term from (blank) to ?

    • Changing the abstract property of any entity from true to false

    • Moving properties to or from a base entity, or adding, removing, or changing the extend property such that the derived entity is unchanged or has safe changes only -- and if the base entity is not abstract, it too has only safe changes. This means that it is the final structure of the item that is being evaluated, irrespective of whether it has that structure because of inheritance or explicit declarations.

  • Making any of these changes for coverage terms:

    • Changing the default coverage term option (as indicated by the * prefix)
    • Changing the value or tag of any coverage term option
  • Making any of these changes to data extension properties:

    • Removing min or making it a smaller (or more negative) value
    • Removing max or making it a larger (or less negative) value
    • Removing minLength or making it a smaller value
    • Removing maxLength or making it a larger value
    • Removing regex
    • Adding to the options list for a property that already has at least one option
    • Removing the options list
    • Increasing the precision of a numeric property
    • Adding or changing the defaultValue
    • Removing a required ((blank) or +) data extension, or making them optional (? or *, respectively)
    • Adding a new required data extension, or changing it from optional to required, with a defaultValue (see PropertyRef). The default value will be used whenever a record is changed and no other value is provided, ensuring that the system is able to validate the record against the current configuration. Historical data will not be updated otherwise.

Disallowed Changes

Any change not specifically indicated as Safe is Disallowed. This includes, but is not limited to, these changes:

  • Making any of these changes to a product or element definition:

    • Changing the quantifier of any of its contents:

      • From * or ? to any other value
      • To ! if the requirements are not met for automatic creation of the element
    • Removing an element from a product's or element's contents list

    • Changing the quantifier for a coverage term from ? to blank, or removing a coverage term

  • Removing a coverage term option from a coverage term

Future Functionality

Upcoming configuration versioning functionality will allow for the deployment of a subset of currently disallowed changes, which will then be classed as "migratable". Configuration versioning will allow for multiple configuration versions on a tenant, where each configuration is assigned an effective date. The feature will provide data migration capabilities to be used in conjunction with a customer-developed migration plugin.

On this page