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:
defaultDurationBasisdefaultTermLengthdefaultTimeZonedefaultCurrencydefaultTimeZonedefaultInstallmentPlan
-
Omitting any top-level property (this will be interpreted as leaving that item or class of item unchanged.)
-
Adding to a product's
eligibleAccountTypesif the list is not empty (in other words, if the restrictions are being made more liberal.) -
Removing or changing the
displayNameor any other UI support values for any item -
Making any of these changes for products or elements:
-
Adding subelements to the
contentsusing 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
- From
-
Adding coverage terms with quantifier
? -
Changing the quantifier of any coverage term from
(blank)to? -
Changing the
abstractproperty of any entity fromtruetofalse -
Moving properties to or from a base entity, or adding, removing, or changing the
extendproperty such that the derived entity is unchanged or has safe changes only -- and if the base entity is notabstract, 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
valueortagof any coverage term option
- Changing the default coverage term option (as indicated by the
-
Making any of these changes to data extension properties:
- Removing
minor making it a smaller (or more negative) value - Removing
maxor making it a larger (or less negative) value - Removing
minLengthor making it a smaller value - Removing
maxLengthor making it a larger value - Removing
regex - Adding to the
optionslist for a property that already has at least one option - Removing the
optionslist - Increasing the
precisionof 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.
- Removing
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
- From
-
Removing an element from a product's or element's
contentslist -
Changing the quantifier for a coverage term from
?toblank, 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.