config: support conditional sections
Fixes #9452 @TarantoolBot document Title: config: conditional sections for upgrading See https://github.com/tarantool/tarantool/issues/9452 for the problem statement. In short: some upgrade scenarios may need to configure tarantool instances differently depending on a tarantool version. A new top level configuration block is added for this purpose: `conditional`. Let's look on an example: ```yaml conditional: - if: tarantool_version >= 3.99.0 && tarantool_version < 4.0.0 # This section shouldn't be validated and shouldn't be applied. replication: new_option: foo - if: tarantool_version < 3.99.0 # This section is to be applied. process: title: '{{ instance_name }} -- in upgrade' ``` The block contains an array of conditional sections, each accompanied by `if` predicate to determine, whether to apply it on particular tarantool version. (`if` is required.) If a section is not to be applied on the given version, it is not validated at all and may contain unknown options. If a section is to be applied, it must match the cluster configuration schema like the main config. If the same option is set by several sections with true predicate, the last section wins. The `if` expression supports one data type: `version`. A value may be referenced in two ways: 1. Version literal: `1.2.3` (three components, not less, not more). 2. Variable: `tarantool_version` (only this variable is supported). `tarantool_version` is assumed as three components version, say, 3.0.0. The operations are the following. 1. Logical OR: `||` 2. Logical AND: `&&` 3. Compare: `>`, `<`, `>=`, `<=`, `==`, `!=` 4. Parentheses: `(`, `)` All the comparisons assume the versions as three component ones.
Showing
- changelogs/unreleased/config-conditional-sections.md 3 additions, 0 deletionschangelogs/unreleased/config-conditional-sections.md
- doc/examples/config/upgrade.yaml 24 additions, 0 deletionsdoc/examples/config/upgrade.yaml
- src/box/lua/config/cluster_config.lua 159 additions, 11 deletionssrc/box/lua/config/cluster_config.lua
- src/box/lua/config/init.lua 20 additions, 0 deletionssrc/box/lua/config/init.lua
- test/config-luatest/conditional_section_test.lua 199 additions, 0 deletionstest/config-luatest/conditional_section_test.lua
Loading
Please register or sign in to comment