Improve DynCfg documentation (#20384)
Co-authored-by: ilyam8 <ilya@netdata.cloud>
Kanela committed
Jun 2, 2025 at 14:33 UTC
e0ab77d35ac4d876db26cbb3d021175e5515794a
2 files changed
+387
-101
docs/developer-and-contributor-corner/dyncfg.md
+143
-71
@@ -1,116 +1,188 @@
1
# Developing with Dynamic Configuration (DynCfg)
2
3
-Dynamic Configuration (DynCfg) is a system in Netdata that enables both internal and external plugins/modules to expose their configurations dynamically to users through a unified interface. This document provides an overview of the DynCfg system and directs developers to detailed implementation documentation.
3
+:::tip
4
5
-## Overview
5
+**What You'll Learn**
6
7
-DynCfg provides a centralized mechanism for:
7
+How to integrate Dynamic Configuration into your Netdata plugins and modules to create configurable, user-friendly monitoring solutions.
8
9
-1. Registering configuration objects from any plugin or module
10
-2. Providing a unified interface for users to view and modify these configurations
11
-3. Persisting configurations between Netdata agent restarts
12
-4. Validating configuration changes through the originating plugin/module
13
-5. Standardizing configuration UI using JSON Schema
9
+:::
10
15
-Key features:
11
+Dynamic Configuration (DynCfg) enables your plugins and modules to expose their configurations through Netdata's unified interface. Instead of requiring users to manually edit configuration files, they can configure your plugin directly through the Netdata UI.
12
17
-- Plugins can expose multiple configuration objects
18
-- Each configuration object has a unique ID
19
-- The owning plugin validates configuration changes before being committed
20
-- The DynCfg manager maintains the state of all dynamic configurations
21
-- JSON Schema is used to define the structure of configuration objects
22
-- The UI is based on adaptations of the react-jsonschema-form project
13
+## What DynCfg Does for You
14
24
-## Architecture
15
+DynCfg provides a complete configuration management system that handles:
16
26
-DynCfg consists of these key components:
17
+| Feature | What It Does |
18
+|--------------------------------|----------------------------------------------------------------|
19
+| **Configuration Registration** | Register your plugin's configuration objects with Netdata |
20
+| **User Interface Generation** | Automatically create UI forms from JSON Schema definitions |
21
+| **Configuration Persistence** | Save and restore configurations across Netdata agent restarts |
22
+| **Validation Pipeline** | Route configuration changes back to your plugin for validation |
23
+| **Standardized Experience** | Provide users with consistent configuration workflows |
24
28
-1. **DynCfg Manager**: Core system that tracks configurations and routes commands
29
-2. **Internal Plugin API**: Used by modules inside the Netdata agent
30
-3. **External Plugin API**: Used by independent plugins communicating via plugins.d protocol
31
-4. **Web API**: Exposes configuration management to users and applications
25
+:::info
26
33
-## Configuration Types
27
+**Key Benefits**
28
35
-DynCfg supports three types of configurations:
29
+- Users configure your plugin through the UI instead of editing files
30
+- JSON Schema automatically generates user-friendly forms
31
+- Your plugin validates all configuration changes before they're applied
32
+- Configurations persist automatically across restarts
33
37
-- **SINGLE**: A standalone configuration object (e.g., systemd-journal directories)
38
-- **TEMPLATE**: A blueprint for creating multiple related configurations (e.g., Nginx collector template)
39
-- **JOB**: A specific configuration instance derived from a template (e.g., a specific Nginx server to monitor)
34
+:::
35
41
-## Implementation Documentation
36
+## How DynCfg Works
37
43
-For detailed implementation guidance, refer to these documents:
38
+The system consists of four main parts working together:
39
45
-### For Internal Modules/Plugins
40
+```mermaid
41
+graph TB
42
+ DM("**DynCfg Manager**<br/><br/>Tracks all configurations<br/>Routes commands between<br/>components")
43
+
44
+ IPA("**Internal Plugin API**<br/><br/>For modules built into<br/>the Netdata agent")
45
+
46
+ EPA("**External Plugin API**<br/><br/>For independent plugins<br/>using plugins.d protocol")
47
+
48
+ WA("**Web API**<br/><br/>Exposes configuration<br/>management to users<br/>and applications")
49
+
50
+ %% Connections showing data flow
51
+ DM <--> IPA
52
+ DM <--> EPA
53
+ DM <--> WA
54
+
55
+ %% Style definitions
56
+ classDef manager fill:#f9f9f9,stroke:#000000,stroke-width:3px,color:#000000,font-size:16px
57
+ classDef api fill:#ffeb3b,stroke:#000000,stroke-width:3px,color:#000000,font-size:16px
58
+ classDef web fill:#4caf50,stroke:#000000,stroke-width:3px,color:#000000,font-size:16px
59
+
60
+ %% Apply styles
61
+ class DM manager
62
+ class IPA,EPA api
63
+ class WA web
64
+```
65
47
-If you're developing an internal Netdata module or plugin, see:
66
+1. **DynCfg Manager** - Tracks all configurations and routes commands between components
67
+2. **Internal Plugin API** - For modules built into the Netdata agent
68
+3. **External Plugin API** - For independent plugins using the plugins.d protocol
69
+4. **Web API** - Exposes configuration management to users and applications
70
49
-👉 [**Internal DynCfg Implementation Guide**](/src/daemon/dyncfg/README.md)
71
+## Configuration Types You Can Create
72
51
-This document covers:
73
+Choose the configuration type that matches your use case:
74
53
-- Low-level and high-level APIs
54
-- Configuration ID structure
75
+| Type | Use Case | Example |
76
+|--------------|------------------------------------------------|------------------------------------|
77
+| **SINGLE** | One standalone configuration | systemd-journal directories |
78
+| **TEMPLATE** | Blueprint for creating multiple configurations | Nginx collector template |
79
+| **JOB** | Specific instance created from a template | Individual Nginx server to monitor |
80
+
81
+## Implementation Guides
82
+
83
+### Getting Started
84
+
85
+1. **Choose your implementation path** - Internal module or external plugin?
86
+2. **Read the relevant implementation guide** - Follow the detailed documentation for your chosen approach
87
+3. **Study working examples** - Look at existing implementations for patterns and best practices
88
+4. **Start with simple configurations** - Begin with basic SINGLE type configurations before moving to TEMPLATE/JOB patterns
89
+5. **Test thoroughly** - Verify your configurations work correctly through both API and UI
90
+
91
+:::tip
92
+
93
+Ready to make your plugin configurable through the Netdata UI? Choose your implementation guide and start building!
94
+
95
+:::
96
+
97
+### For Internal Modules
98
+
99
+Are you developing a module built into the Netdata agent?
100
+
101
+👉 **[Internal DynCfg Implementation Guide](/src/daemon/dyncfg/README.md)**
102
+
103
+<details>
104
+<summary><strong>This guide covers:</strong></summary><br/>
105
+
106
+- Low-level and high-level APIs for internal modules
107
+- Configuration ID structure and naming conventions
108
- Response codes and status handling
109
- Action behavior for different configuration types
57
-- JSON Schema implementation
58
-- API access and endpoints
59
-- Best practices
110
+- JSON Schema implementation details
111
+- API access patterns and endpoints
112
+- Implementation best practices
113
+
114
+<br/>
115
+</details>
116
117
### For External Plugins
118
63
-If you're developing an external plugin that communicates with Netdata using the plugins.d protocol, see:
119
+Are you developing a standalone plugin that communicates with Netdata using the plugins.d protocol?
120
65
-👉 [**External Plugin DynCfg Implementation Guide**](/src/plugins.d/DYNCFG.md)
121
+👉 **[External Plugin DynCfg Implementation Guide](/src/plugins.d/DYNCFG.md)**
122
67
-This document covers:
123
+<details>
124
+<summary><strong>This guide covers:</strong></summary><br/>
125
69
-- Plugin protocol commands and responses
70
-- Registering configurations
71
-- Handling configuration commands
72
-- Responding to status changes
73
-- Schema handling
74
-- Working examples
126
+- Plugin protocol commands and response formats
127
+- Configuration registration process
128
+- Handling incoming configuration commands
129
+- Responding to status changes and validation requests
130
+- Schema definition and management
131
+- Complete working examples with code
132
76
-## Example Implementations
133
+<br/>
134
+</details>
135
78
-For reference, you can study these existing implementations:
136
+## Learn from Working Examples
137
80
-### Health Alerts System (Internal)
138
+Study these real implementations to understand DynCfg patterns:
139
82
-The health module uses DynCfg to manage alert definitions. Key files:
140
+<details>
141
+<summary><strong>Health Alerts System (Internal Module)</strong></summary><br/>
142
84
-- `src/health/health_dyncfg.c`: Implements DynCfg integration for health alerts
85
-- Uses the high-level API for internal plugins
143
+The health module manages alert definitions through DynCfg:
144
87
-### systemd-journal.plugin (External)
145
+- **File**: `src/health/health_dyncfg.c`
146
+- **Pattern**: Uses high-level internal API
147
+- **Type**: TEMPLATE and JOB configurations for alert definitions
148
89
-The systemd-journal.plugin is a C-based external plugin that uses DynCfg. Key files:
149
+<br/>
150
+</details>
151
91
-- `src/collectors/systemd-journal.plugin/systemd-journal-dyncfg.c`: Implements a SINGLE configuration for journal directories
152
+<details>
153
+<summary><strong>systemd-journal.plugin (External Plugin, C)</strong></summary><br/>
154
93
-### go.d.plugin (External)
155
+External C plugin that manages journal directory configurations:
156
95
-go.d.plugin is a Go-based external plugin that uses DynCfg to manage job configurations:
157
+- **File**: `src/collectors/systemd-journal.plugin/systemd-journal-dyncfg.c`
158
+- **Pattern**: SINGLE configuration type
159
+- **Use Case**: Managing journal directory paths
160
97
-- Implements templates and jobs for various data collectors
98
-- Dynamically generates JSON Schema based on Go struct tags
161
+<br/>
162
+</details>
163
100
-## Best Practices
164
+<details>
165
+<summary><strong>go.d.plugin (External Plugin, Go)</strong></summary><br/>
166
102
-When implementing DynCfg for your module or plugin:
167
+Go-based plugin managing multiple data collector configurations:
168
104
-1. **Use Clear ID Structure**: Follow the component:category:name pattern
105
-2. **Choose Logical Paths**: The path parameter affects UI organization
106
-3. **Validate Thoroughly**: Always validate configuration changes before accepting
107
-4. **Provide Detailed Errors**: Help users understand why a configuration was rejected
108
-5. **Document Your Schema**: Include good descriptions in your JSON Schema
109
-6. **Respect Type-Action Relationships**: Different actions behave differently for each configuration type
110
-7. **Return Appropriate Status Codes**: Use the correct response codes for each situation
169
+- **Pattern**: TEMPLATE and JOB configurations
170
+- **Feature**: Dynamically generates JSON Schema from Go struct tags
171
+- **Scale**: Manages dozens of different collector types
172
112
-## More Information
173
+<br/>
174
+</details>
175
114
-For more details about using the Netdata Agent UI to manage dynamic configurations, see the [Netdata Cloud documentation](https://learn.netdata.cloud/docs/agent/web/gui/).
176
+## Implementation Best Practices
177
116
-To learn about developing for Netdata, see the [Developer Corner](https://learn.netdata.cloud/docs/agent/contribute/).
178
+| Category | Best Practice | Description |
179
+|-----------------------------------|-----------------------------------|------------------------------------------------------------------|
180
+| **Configuration Design** | Use clear ID structure | Follow the `component:category:name` pattern consistently |
181
+| | Choose logical paths | The path parameter affects how configurations appear in the UI |
182
+| | Design intuitive schemas | Include helpful descriptions and examples in your JSON Schema |
183
+| **Validation and Error Handling** | Validate thoroughly | Always validate configuration changes before accepting them |
184
+| | Provide helpful errors | Give users clear explanations when configurations are rejected |
185
+| | Return appropriate codes | Use correct HTTP status codes for different situations |
186
+| **User Experience** | Respect type-action relationships | Different actions behave differently for each configuration type |
187
+| | Test your UI | Verify that your JSON Schema generates usable forms |
188
+| | Document your options | Help users understand what each configuration option does |
docs/netdata-agent/configuration/dynamic-configuration.md
+244
-30
@@ -1,64 +1,278 @@
1
# Dynamic Configuration Manager
2
3
-> **Info**
4
->
5
-> Netdata Cloud paid subscription is required.
3
+## Table of Contents
4
7
-The Dynamic Configuration Manager allows direct configuration of collectors and alerts through the Netdata UI. This feature allows users to:
5
+- [Overview](#overview)
6
+- [Quick Access Methods](#quick-access-methods)
7
+- [Getting Started](#getting-started)
8
+- [Collectors](#collectors)
9
+- [Multi-Node Deployment](#multi-node-deployment)
10
9
-- **Create, test, and deploy configurations** for one or more nodes directly within the UI.
10
-- **Eliminate the need for manual command-line edits and node access**, enhancing workflow efficiency.
11
+## Overview
12
12
-**Cloud Connection and Security**: Nodes using Dynamic Configuration Manager require a connection to Netdata Cloud. This ensures proper permission handling and data security.
13
+:::important
14
14
-> **Info**
15
->
16
-> To understand what actions users can perform based on their role, refer to the [Role-Based Access documentation](/docs/netdata-cloud/authentication-and-authorization/role-based-access-model.md#dynamic-configuration-manager).
15
+Netdata Cloud paid subscription is required.
16
+
17
+:::
18
+
19
+:::tip
20
+
21
+**What You'll Learn**
22
+
23
+How to access the Dynamic Configuration Manager and understand its key features for managing your monitoring infrastructure.
24
+
25
+:::
26
+
27
+The Dynamic Configuration Manager allows you to configure collectors and alerts directly through the Netdata UI. This feature enables you to:
28
+
29
+- **Create, test, and deploy configurations** for one or more nodes directly within the UI
30
+- **Eliminate manual command-line edits and node access**, enhancing your workflow efficiency
31
+
32
+:::note
33
+
34
+**Cloud Connection and Security**
35
+
36
+Your nodes using Dynamic Configuration Manager require a connection to Netdata Cloud. This ensures proper permission handling and data security.
37
+
38
+:::
39
+
40
+**Key Features:**
41
+
42
+| Feature | Purpose |
43
+|------------------------------------------|-----------------------------------------------------------------------------------------------|
44
+| Configure collector parameters | Set up data collection settings directly in the UI |
45
+| Fill out configuration forms | Use guided interfaces instead of editing config files |
46
+| Test configurations before deployment | Validate settings to prevent errors |
47
+| Create alert templates | Build reusable alert definitions |
48
+| Apply templates to instances or contexts | Target specific services or apply broadly |
49
+| Deploy to multiple nodes simultaneously | Ensure consistency across your infrastructure |
50
+| Manage Health tab alert templates | Create configurations for templates and individual alerts that apply to instances or contexts |
51
+
52
+:::info
53
+
54
+To understand what actions you can perform based on your role, refer to the [Role-Based Access documentation](/docs/netdata-cloud/authentication-and-authorization/role-based-access-model.md#dynamic-configuration-manager).
55
+
56
+:::
57
+
58
+## Quick Access Methods
59
+
60
+:::tip
61
+
62
+**What You'll Learn**
63
+
64
+Four different ways to access the Dynamic Configuration Manager, each optimized for different workflows.
65
+
66
+:::
67
+
68
+You can access the Dynamic Configuration Manager in multiple ways:
69
+
70
+<details>
71
+<summary><strong>From Any Chart</strong></summary><br/>
72
+
73
+1. Navigate to any chart on your dashboard
74
+2. Click the **Alert icon (bell icon)** at the top of the chart
75
+3. Choose to edit an existing alert or create a new one
76
+4. Configure your alert parameters and submit changes
77
+
78
+<br/>
79
+</details>
80
+
81
+<details>
82
+<summary><strong>From the Alerts Tab</strong></summary><br/>
83
+
84
+1. Go to the **Alerts tab** on your Netdata dashboard
85
+2. Locate the alert you want to modify and click on it
86
+3. Adjust thresholds and parameters to match your needs
87
+4. Save your changes
88
+
89
+<br/>
90
+</details>
91
+
92
+<details>
93
+<summary><strong>From the Integrations Section</strong></summary><br/>
94
+
95
+1. Navigate to the **Integrations section** on your dashboard
96
+2. Browse through the available collectors
97
+3. Click on the **Configure** button for the collector you want to set up
98
+4. Once configured, they will start collecting data as specified
99
+
100
+<br/>
101
+</details>
102
+
103
+<details>
104
+<summary><strong>From Space Settings</strong></summary><br/>
105
+
106
+1. Go to **Space Settings** on your Dashboard
107
+2. Navigate to the **Configurations** section
108
+3. Explore, create, and edit collector, health and logs configurations
109
+
110
+<br/>
111
+</details><br/>
112
+
113
+:::tip
114
+
115
+Currently available for go.d collectors, you can configure collectors straight from the Integrations section. This means you can quickly identify what Netdata can monitor and set up your configurations in one go.
116
+
117
+:::
118
+
119
+## Getting Started
120
+
121
+:::tip
122
+
123
+**What You'll Learn**
124
+
125
+How to use each of the four access methods with practical step-by-step workflows.
126
+
127
+:::
128
+
129
+:::tip
130
+
131
+To help you get started with the Dynamic Configuration Manager, try using the Netdata demo environment to explore these capabilities firsthand and see how they can enhance your monitoring workflows.
132
+
133
+:::
134
+
135
+### Step-by-Step Walkthrough
136
+
137
+<details>
138
+<summary><strong>Creating Alerts from Charts</strong></summary><br/>
139
+
140
+Learn more about this access method: [From Any Chart](#quick-access-methods)
141
+
142
+1. Navigate to the chart (context) you want to create an alert for
143
+2. Click on the Alert icon (bell icon) on top of the chart to edit an existing alert or create a new one
144
+3. Configure your alert parameters, such as rules, instances, thresholds, etc.
145
+4. Submit your changes
146
+
147
+<br/>
148
+</details>
149
+
150
+<details>
151
+<summary><strong>Managing Alerts from the Alerts Tab</strong></summary><br/>
152
+
153
+Learn more about this access method: [From the Alerts Tab](#quick-access-methods)
154
+
155
+1. Go to the Alerts tab on your Netdata dashboard
156
+2. Locate the alert you wish to modify and click on it
157
+3. Adjust the thresholds and other parameters to match your specific needs
158
+4. Save the changes
159
+
160
+<br/>
161
+</details>
162
+
163
+<details>
164
+<summary><strong>Configuring Collectors from Integrations</strong></summary><br/>
165
+
166
+Learn more about this access method: [From the Integrations Section](#quick-access-methods)
167
+
168
+1. Navigate to the Integrations section on the dashboard
169
+2. Browse through the available collectors
170
+3. Click on the **Configure** button for the collector you want to set up
171
+4. Once configured, they will start collecting data as specified
172
+
173
+<br/>
174
+</details>
175
+
176
+<details>
177
+<summary><strong>Managing Configurations from Space Settings</strong></summary><br/>
178
+
179
+Learn more about this access method: [From Space Settings](#quick-access-methods)
180
+
181
+1. Go to **Space Settings** on your Dashboard
182
+2. Navigate to the **Configurations** section
183
+3. Explore, create, and edit collector, health and logs configurations
184
+
185
+<br/>
186
+</details>
187
188
## Collectors
189
190
+:::tip
191
+
192
+**What You'll Learn**
193
+
194
+How modules and jobs work together to collect data, and the specific actions you can perform on each.
195
+
196
+:::
197
+
198
### Module
199
200
A module represents a specific data collector, such as Apache, MySQL, or Redis. Think of modules as templates for data collection.
201
202
Each module can have multiple jobs, which are unique configurations of that template tailored to your specific needs.
203
26
-You can manage individual modules using the following actions:
204
+**Module Management Actions:**
205
206
| Action | Description |
207
|--------------------|---------------------------------------------------------------------------------------------------------------------------|
30
-| **Add job** | Create new configuration instances (jobs) for a particular module. |
208
+| **Add job** | Create new configuration instances (jobs) for a particular module |
209
| **Enable/Disable** | Disabling a module deactivates all currently running jobs and prevents any future jobs from being created for that module |
210
211
### Job
212
213
A job represents a running instance of a module with a specific configuration. Think of it as a customized data collection task based on a module template.
214
215
+**Job Source Types:**
216
+
217
Every job has a designated "source type" indicating its origin:
218
39
-- **Stock**: Pre-installed with Netdata and provides basic data collection for common services.
40
-- **User**: Created from user-defined configuration files on the node.
41
-- **Discovered**: Automatically generated by Netdata upon discovering a service running on the node.
42
-- **Dynamic Configuration**: Managed and created through the Dynamic Configuration Manager.
219
+| Source Type | Description |
220
+|---------------------------|-----------------------------------------------------------------------------------|
221
+| **Stock** | Pre-installed with Netdata and provides basic data collection for common services |
222
+| **User** | Created from user-defined configuration files on the node |
223
+| **Discovered** | Automatically generated by Netdata upon discovering a service running on the node |
224
+| **Dynamic Configuration** | Managed and created through the Dynamic Configuration Manager |
225
+
226
+**Job Management Actions:**
227
+
228
+| Category | Action | Description |
229
+|-------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
230
+| **Configuration** | **Edit** | Modify an existing job's configuration |
231
+| **Configuration** | **Test** | Validate newly created or edited configurations before applying them permanently |
232
+| **Management** | **Enable/Disable** | Control the job's activity. Disabling a running job stops data collection |
233
+| **Management** | **Restart** | Restart a job's data collection, useful if a job encounters a "Failed" state. Upon restart, you'll see a notification with the failure message |
234
+| **Management** | **Remove** | Delete a job configuration entirely. Note that you can only remove jobs created through Dynamic Configuration. Other job types originate from files on the node and cannot be deleted here |
235
+
236
+:::important
237
+
238
+Only jobs created through Dynamic Configuration can be removed. Other job types originate from files on the node and can’t be deleted through the UI.
239
+
240
+:::
241
+
242
+## Multi-Node Deployment
243
+
244
+:::tip
245
+
246
+**What You'll Learn**
247
+
248
+How to deploy configurations to multiple nodes simultaneously, saving time and ensuring consistency across your infrastructure.
249
+
250
+:::
251
+
252
+The Dynamic Configuration Manager allows you to submit configurations to multiple nodes with just one click, eliminating the need to configure each node individually.
253
+
254
+:::note
255
+For teams using Infrastructure as Code solutions, the Dynamic Configuration Manager allows you to construct and copy configurations easily, integrating them into your IaC workflows. This ensures your configurations are consistent and reproducible across different environments.
256
+:::
257
+
258
+### Multi-Node Deployment Process
259
44
-You can manage individual jobs using the following actions:
260
+<details>
261
+<summary><strong>Deploy to Multiple Nodes</strong></summary><br/>
262
46
-| Action | Description |
47
-|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
48
-| **Restart** | This restarts a job's data collection, useful if a job encounters a "Failed" state. Upon restart, a notification with the failure message will be displayed. |
49
-| **Remove** | Delete a job configuration entirely. Note that only jobs created through Dynamic Configuration can be removed. Other job types originate from files on the node and cannot be deleted here. |
50
-| **Enable/Disable** | Control the job's activity. Disabling a running job stops data collection. |
51
-| **Edit** | Modify an existing job's configuration. |
52
-| **Test** | Validate newly created or edited configurations before applying them permanently. |
263
+1. Configure your collectors or alerts using any of the methods described above
264
+2. Use the multi-node feature to select your target nodes
265
+3. Submit your configuration, and it will be applied to all selected nodes instantly
266
54
-## Health
267
+<br/>
268
+</details><br/>
269
56
-Each entry in the Health tab contains an Alert template that then is used to create Alerts.
270
+:::note
271
58
-The functionality in the main view is the same as with the [Collectors tab](#collectors).
272
+This feature is particularly valuable for managing large infrastructures where manual configuration of individual nodes would be time-consuming and error-prone.
273
60
-### Health entry configuration
274
+:::
275
62
-You can create new configurations both for templates or individual Alerts.
276
+Experience the efficiency and power of the Dynamic Configuration Manager in Netdata today. Whether you're managing a handful of nodes or a vast infrastructure, this feature will make your monitoring and alerting tasks smoother and more intuitive.
277
64
-Each template can have multiple items which resemble Alerts that either apply to a certain [instance](/docs/dashboards-and-charts/netdata-charts.md#instances-dropdown), or all instances under a specific [context](/docs/dashboards-and-charts/netdata-charts.md#contexts)
278
+Developing with dynamic configuration? [Click here](https://learn.netdata.cloud/docs/developer-and-contributor-corner/dynamic-configuration/).