Skip to content

Commit

Permalink
docs(context): spilt strat constraints into ref and how-to.
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasheartman committed Dec 20, 2021
1 parent 1c5d48e commit 498ac4f
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 45 deletions.
68 changes: 24 additions & 44 deletions website/docs/advanced/strategy-constraints.md
Expand Up @@ -3,71 +3,51 @@ id: strategy_constraints
title: Strategy Constraints
---

<div class="alert alert--info" role="alert">
Strategy constraints are part of Unleash Pro and Enterprise.
</div>
<br />
:::info Availability
Strategy constraints are available to Unleash Pro and Enterprise users.
:::

Strategy constraints allow you to set preconditions on activation strategies that must be satisfied for the activation strategy to take effect. For example, you might want a strategy to only trigger if a user belongs to a specific group or is in a specific country.

Constraints use fields from the [Unleash Context](../user_guide/unleash_context) to determine whether a strategy should apply or not. You can constrain on both standard context fields and on custom context fields.
Constraints use fields from the [Unleash Context](../user_guide/unleash_context) to determine whether a strategy should apply or not. You can constrain on both [standard context fields](../user_guide/unleash_context#structure) and on [custom context fields](../user_guide/unleash_context#custom-context-fields). A common use for using custom context fields is a multi-tenant service where you want to use a tenant identifier to control the feature rollout. This would allow you to decide which users should get access to your new feature based on the tenant. Other commonly seen custom context fields include fields for region, country, and customer type.

To be able to constrain on a field, it must be listed under the Context Field menu. If a field isn't listed, you can add it. See [the section on defining your own custom fields](#define-your-own-custom-fields) for more info.

## How to add strategy constraints
Combining strategy constraints with the [gradual rollout strategy](../user_guide/activation_strategy#gradual-rollout) allows you to do a gradual rollout to a specific segment of your user base.

To add a strategy constraint, you'll need a feature toggle with a defined strategy.
![A toggle with the gradual rollout strategy. The toggle is constrained on the custom content field "region" and set to only activate if the region is Africa or Europe.](/img/custom-constraints.png)

Then, use the "add constraint" button in the UI, choose your context field, and the appropriate values that you wish to constrain it to.
## Constraint structure

![A feature toggle strategy view showing a button labeled with add constraints.](/img/add-constraint.png)
Each strategy constraint has three parts:

- **Context field**: The context field to evaluate.
- **Operator**: Either `IN` or `NOT_IN`.
- **Values**: The list of values that trigger this constraint.

### Constraining on standard context fields
The **context field** is the field that you want to use for constraining this strategy. The **values** field is a list of values that the constraint should either allow or deny. The **operator** determines whether the values are allowed or denied.

To constrain on a standard context field, choose the field you wish to constrain on. If the context field you want to constrain on isn't listed, you'll need to add it manually via the Context Field menu. Follow the procedure as if you were [defining custom context fields](#define-your-own-custom-fields), but give it a name that matches the desired field in the Unleash Context. Note that context fields are case-sensitive.
For instance, to constrain the strategy to only users with IDs `id-123` and `id-456`: select `userId` as the context field, use the `IN` operator, and set values to `id-123, id-456`. The strategy will then be evaluated only for these two users.

### Constraining on custom context fields {#constrain-on-custom-context-fields}
If, on the other hand, you would like to ensure the strategy is never evaluated for the same users, you would use the same configuration as above, but set the operator to `NOT_IN`. This would mean that the strategy is evaluated for all users _not_ listed in the values.

If you need context data that isn't available in the default Unleash Context, you can also constrain on custom context fields. A common use case is a multi-tenant service where you want to use a tenant identifier to control the feature rollout. This would allow you to decide which users should get access to your new feature based on the tenant.
## Interacting with strategy constraints in the client SDKs {#sdks}

![A toggle with the gradual rollout strategy. The toggle is constrained on the custom content field \"region\" and set to only activate if the region is Africa or Europe.](/img/custom-constraints.png)
:::note
This section gives a brief overview over to use the client SDKs to interact with strategy constraints. The exact steps will vary depending on which client you are using, so make sure to consult the documentation for your specific client SDK.
:::

#### Defining custom fields {#define-your-own-custom-fields}
For the [Unleash client SDKs](../sdks/index.md) to use a strategy constraint during strategy evaluation, they must also receive the current Unleash context.

> Starting with Unleash-enterprise version 3.2.28 customers can define their custom context fields via the user interface.

You can also define custom context fields to use with strategy constraints. We have seen customers use multiple variants of custom context fields to control their feature rollout, such as:
In the

- `region`
- `country`
- `customerType`
- `tenantId`
Refer to the individual SDK's docs for exact examples, but the gist of it is that the context field must be filled out, either as a constant or as a custom field (`properties`), and that you must pass the unleash context to the evaluation.

Combining strategy constraints with the [gradual rollout strategy](../user_guide/activation_strategy#gradual-rollout) would allow you to do a gradual rollout to a specific segment of your user base.
## Prerequisites

##### Step 1: Navigate to Context Fields“ {#step-1-navigate-to-context-fields}
To be able to constrain on a field, it must be listed under the Context Field menu. If a field isn't listed, you can add it yourself. See [the how-to guide for creating your own custom fields](../how-to/how-to-define-custom-context-fields.md) for more info.

Locate “context fields in the menu"

![The top Unleash navigation menu with the \"advanced\" section expanded. The dropdown shows a number of options, including one called \"context fields\", which is highlighted by an overlaid arrow.](/img/context-fields.png)

##### Step 2: Define new context field {#step-2-define-new-context-field}

Next you can define your new context field. The minimum requirement is to give it a unique _name_. In addition, you can give it a description and define [_legal values_](#what-is-legal-values).

![A form to define new context fields. It has fields labeled \"name\", \"description\", and \"legal values\".](/img/new_context_field.png)

###### What are “legal values”? {#what-is-legal-values}

To constrain what values a user can enter for a context field in the Unleash Admin UI, you can use _legal values_. This is a set of predefined values that show up as a dropdown

A context field's _legal values_ are a set of predefined values that you can

define all possible values for that context field. These values appear in the Unleash Admin UI to guide users when working with context fields to make sure they only use legal values.

![A modal to define constraints. The \"region\" context field is selected and a dropdown is showing the legal values defined for that field: Africa, Asia, Europe, North-America.](/img/constraints_legal_values.png)

### [Deprecated]: Constrain on a specific environment {#constrain-on-a-specific-environment}
## [Deprecated]: Constrain on a specific environment {#constrain-on-a-specific-environment}

Before Unleash 4.3, using strategy constraints was the recommended way to have different toggle configurations per environment. Now that Unleash has environment support built in, we no longer recommend you use strategy constraints for this. Instead, see the [environments documentation](../user_guide/environments).
44 changes: 44 additions & 0 deletions website/docs/how-to/how-to-add-strategy-constraints.md
@@ -0,0 +1,44 @@
---
title: How to add strategy constraints to a feature toggle
---

:::info Availability
Strategy constraints are available to Unleash Pro and Enterprise users.
:::

This guide shows you how to add [strategy constraints](../advanced/strategy-constraints.md) to your feature toggles via the admin UI. For information on how to interact with strategy constraints from an [Unleash client SDK](../sdks/index.md), visit the specific SDKs documentation or see [the relevant section in the strategy constraints documentation](../advanced/strategy-constraints.md#sdks "strategy constraints documentation, section on interacting with constraints from client SDKs").

## Prerequisites

You'll need to have an existing feature toggle with a defined strategy to add a constraint. The rest of this guide assumes you have a specific strategy that you're working with.

## Step 1: Open the constraints menu {#step-1}

Every strategy will have button labeled "add constraints" when viewed in the admin UI. Interact with this to open the constraints menu.

![A feature toggle strategy view showing a button labeled with add constraints.](/img/add-constraint.png)

## Step 2: Configure the constraint {#step-2}

Refer to [the _constraint structure_ section of the strategy constraints reference](../advanced/strategy-constraints.md#constraint-structure) for a thorough explanation of the fields.

From the "Context Field" dropdown, select the context field you would like to constrain the strategy on.

![A strategy constraint form with a constraint set to "region". The "values" input is a dropdown menu containing the options "Africa", "Asia", "Europe", and "North America", as defined in the preceding paragraph.](/img/constraints_legal_values.png)

## Step 3: Add additional constraints {#step-3}

To add additional constraints:
1. Repeat [step one](#step-1 "step 1: open the constraints menu") to open the constraints menu.
2. Use the "Add constraint" button to add a new constraint.

![The add constraint modal menu with an existing constraint. There is a button labeled "add constraint" that is being highlighted by an arrow.](/img/constraints-add-additional.png)

3. Follow [step two](#step-2 "step 2: configure the constraint") for the new constraint.

## How to update existing constraints

You can update any existing constraint by doing one of the following:

- Open the "add constraints" menu and modify existing constraints.
- Using the constraint's "edit" button to bring up the constraints menu.
3 changes: 2 additions & 1 deletion website/sidebars.js
Expand Up @@ -70,7 +70,8 @@ module.exports = {
'topics/a-b-testing'
],
"How-to guides": [
"how-to/how-to-define-custom-context-fields"
"how-to/how-to-add-strategy-constraints",
"how-to/how-to-define-custom-context-fields",
]
},
api: {
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 498ac4f

Please sign in to comment.