summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/config/config.c22
-rw-r--r--lib/config/config.h1
-rw-r--r--man/lvmconfig.8_pregen7
-rw-r--r--tools/args.h3
-rw-r--r--tools/command-lines.in5
-rw-r--r--tools/dumpconfig.c7
7 files changed, 43 insertions, 3 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 6cd53553b..6e9a3fa1d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.17 -
===============================
+ Add --valuesonly option to lvmconfig to print only values without keys.
Updates configure with recent autoconf tooling.
Fix lvconvert --test --type vdo-pool execution.
Add json_std output format for more JSON standard compliant version of output.
diff --git a/lib/config/config.c b/lib/config/config.c
index f9614779a..1142ed345 100644
--- a/lib/config/config.c
+++ b/lib/config/config.c
@@ -1830,8 +1830,10 @@ static int _out_line_fn(const struct dm_config_node *cn, const char *line, void
char summary[MAX_COMMENT_LINE+1];
char version[9];
int pos = 0;
- size_t len;
+ int space_prefix_len;
char *space_prefix;
+ const char *p;
+ size_t len;
if ((out->tree_spec->type == CFG_DEF_TREE_DIFF) &&
(!(out->tree_spec->check_status[cn->id] & CFG_DIFF)))
@@ -1865,9 +1867,24 @@ static int _out_line_fn(const struct dm_config_node *cn, const char *line, void
/* Usual tree view with nodes and their values. */
+ if (out->tree_spec->valuesonly && !(cfg_def->type & CFG_TYPE_SECTION)) {
+ if ((space_prefix_len = strspn(line, "\t "))) {
+ len = strlen(line);
+ p = line + space_prefix_len;
+
+ /* copy space_prefix, skip key and '=', copy value */
+ dm_pool_begin_object(out->mem, len);
+ dm_pool_grow_object(out->mem, line, space_prefix_len);
+ dm_pool_grow_object(out->mem, p + strcspn(p, "=") + 1, len + 1);
+ line = dm_pool_end_object(out->mem);
+ } else
+ line = strchr(line, '=') + 1;
+ }
+
if ((out->tree_spec->type != CFG_DEF_TREE_CURRENT) &&
(out->tree_spec->type != CFG_DEF_TREE_DIFF) &&
(out->tree_spec->type != CFG_DEF_TREE_FULL) &&
+ !out->tree_spec->valuesonly &&
(cfg_def->flags & (CFG_DEFAULT_UNDEFINED | CFG_DEFAULT_COMMENTED))) {
/* print with # at the front to comment out the line */
if (_should_print_cfg_with_undef_def_val(out, cfg_def, cn)) {
@@ -1883,6 +1900,9 @@ static int _out_line_fn(const struct dm_config_node *cn, const char *line, void
if (_should_print_cfg_with_undef_def_val(out, cfg_def, cn))
fprintf(out->fp, "%s\n", line);
+ if (out->tree_spec->valuesonly && !(cfg_def->type & CFG_TYPE_SECTION) && space_prefix_len)
+ dm_pool_free(out->mem, (char *) line);
+
return 1;
}
diff --git a/lib/config/config.h b/lib/config/config.h
index c62ea20a5..3926b12f5 100644
--- a/lib/config/config.h
+++ b/lib/config/config.h
@@ -176,6 +176,7 @@ struct config_def_tree_spec {
unsigned unconfigured:1; /* use unconfigured path strings */
unsigned withgeneralpreamble:1; /* include preamble for a general config file */
unsigned withlocalpreamble:1; /* include preamble for a local config file */
+ unsigned valuesonly:1; /* print only values without keys */
uint8_t *check_status; /* status of last tree check (currently needed for CFG_DEF_TREE_MISSING only) */
};
diff --git a/man/lvmconfig.8_pregen b/man/lvmconfig.8_pregen
index a29255cf4..5279fa4dc 100644
--- a/man/lvmconfig.8_pregen
+++ b/man/lvmconfig.8_pregen
@@ -56,6 +56,8 @@ line settings from --config.
.br
[ \fB--validate\fP ]
.br
+[ \fB--valuesonly\fP ]
+.br
[ \fB--withsummary\fP ]
.br
[ \fB--withcomments\fP ]
@@ -369,6 +371,11 @@ merged configuration tree, also use --mergedconfig.
The validation is done even if \fBlvm.conf\fP(5) \fBconfig/checks\fP is disabled.
.
.HP
+\fB--valuesonly\fP
+.br
+When printing config settings, print only values without keys.
+.
+.HP
\fB-v\fP|\fB--verbose\fP ...
.br
Set verbose level. Repeat from 1 to 4 times to increase the detail
diff --git a/tools/args.h b/tools/args.h
index 9229b8764..bdeefca7d 100644
--- a/tools/args.h
+++ b/tools/args.h
@@ -905,6 +905,9 @@ arg(validate_ARG, '\0', "validate", 0, 0, 0,
"merged configuration tree, also use --mergedconfig.\n"
"The validation is done even if \\fBlvm.conf\\fP(5) \\fBconfig/checks\\fP is disabled.\n")
+arg(valuesonly_ARG, '\0', "valuesonly", 0, 0, 0,
+ "When printing config settings, print only values without keys.\n")
+
arg(vdo_ARG, '\0', "vdo", 0, 0, 0,
"Specifies the command is handling VDO LV.\n"
"See --type vdo.\n"
diff --git a/tools/command-lines.in b/tools/command-lines.in
index b6a03d158..6e9e7bdea 100644
--- a/tools/command-lines.in
+++ b/tools/command-lines.in
@@ -221,8 +221,9 @@ OO_REPORT: --aligned, --all, --binary, --configreport ConfigReport, --foreign,
#
OO_CONFIG: --atversion String, --typeconfig ConfigType, --file String, --ignoreadvanced,
--ignoreunsupported, --ignorelocal, --list, --mergedconfig, --metadataprofile String,
---sinceversion String, --showdeprecated, --showunsupported, --validate, --withsummary,
---withcomments, --withgeneralpreamble, --withlocalpreamble, --withspaces, --unconfigured, --withversions
+--sinceversion String, --showdeprecated, --showunsupported, --validate, --valuesonly,
+--withsummary, --withcomments, --withgeneralpreamble, --withlocalpreamble, --withspaces,
+--unconfigured, --withversions
---
diff --git a/tools/dumpconfig.c b/tools/dumpconfig.c
index 9e4408e16..4a0f193c4 100644
--- a/tools/dumpconfig.c
+++ b/tools/dumpconfig.c
@@ -242,6 +242,10 @@ int dumpconfig(struct cmd_context *cmd, int argc, char **argv)
log_error("--withgeneralpreamble has no effect with --type list");
return EINVALID_CMD_LINE;
}
+ if (arg_is_set(cmd, valuesonly_ARG)) {
+ log_err("--valuesonly has no effect with --type list");
+ return EINVALID_CMD_LINE;
+ }
/* list type does not require status check */
} else if (!strcmp(type, "full")) {
tree_spec.type = CFG_DEF_TREE_FULL;
@@ -320,6 +324,9 @@ int dumpconfig(struct cmd_context *cmd, int argc, char **argv)
if (arg_is_set(cmd, withspaces_ARG))
tree_spec.withspaces = 1;
+ if (arg_is_set(cmd, valuesonly_ARG))
+ tree_spec.valuesonly = 1;
+
if (cft_check_handle)
tree_spec.check_status = cft_check_handle->status;