A key feature of Config Actions is the ability to perform variable substitutions within the configuration data.
Variables have the syntax:
%variable_name% where “variable_name” is the
alphanumeric name of the variable (with underscores or hyphens allowed)
The value of a variable is specified in the action file using the form:
Anywhere else in the action or included template files, a reference to
%variable_name% will be replaced with the
replace option is an array of string replacement patterns and values.
The above syntax for variables actually causes an entry to be made into the
string replacement array. But you can actually replace any string value.
replace: foo: bar
will cause any text matching “foo” to be replaced with the value of “bar”.
Variables and string replacement values are passed from action to sub-action. Typically, global values for variables are set at the top of the action file, allowing any other modules that “include” the action to override the value.
For example, if
ActionA.yml had the contents:
"%bundle%": article "%name%": "Article" source: node.type.%bundle% value: name: %name%
then another action could “include” it and change the variable data that is passed:
plugin: include file: "ActionA.yml" "%name%": "My Article Content"
Sub-actions can also override variable values. For example:
"%name%": "Article" source: node.type.%bundle% actions: action1: "%bundle%": article value: name: "My article" action1: "%bundle%": page value: name: "My page"
Each sub-action sets its own value of “%bundle%” and the value of
is automatically recomputed for each action.
NOTE: When specifying variables directly within a sub-action, any other module
including this action will not be able to override it. External actions will
normally only override the global value of the variables in the file. To force
a sub-action variable to be overridden, you can specify the exact
(such as “action1”) you want to include rather than including the entire file.
The following topics are for more advanced usage and understanding.
### Option Variables
Each “option” in your action is available as a pre-defined variable. For example:
source: [ "%dest%", node.type.template.yml ] dest: node.type.article
will automatically expand to:
source: [ node.type.article, node.type.template.yml ] dest: node.type.article
### The special “id” variable
In addition to the pre-defined option variables, the “id” of each action is
available via the
%id% variable. For example:
source: "node.type.%id%" path: [ "description" ] actions: article: value: "This is the article description" page: value: "This is the page description"
This would execute two sub-actions, and the key value of each sub-action is
used as the
%id% variable, which is then replaced in the
Thus, the description of the “article” and “page” content types can be easily
changed without needing to specify the
source directly in each sub-action.
### The special “key” option
To parse the action “id” into other user-defined variables, use the
option to specify the pattern of the action id. For example, here we load
different template files based on the name and type of fields being created:
source: "field.field.node.%type%.yml" key: "%bundle%.%name%.%type%" path: [ "description" ] actions: article.my_text_field.text: value: "Description of my_text_field page.my_image_field.image: value: "Description of my_image_field
This would first load the “field.field.node.text.yml” template and define the
and next it would load the “field.field.node.image.yml” template and define
### Replacement Locations
You can control which options perform string replacement, and whether the patterns are replaced in just the array values within config data, or also in the keys.
replace_in option overrides the array of options that perform string
(and variable) replacements. The default of this array varies from plugin to
plugin. Override it to specify only the exact options to replace. For example:
source: "foo.bar" dest: "bar.foo" replace: foo: bar replace_in: [ 'dest' ]
will only replace “foo” in the
dest option but not in the