NAME
Config::Model::Loader - Load serialized data into config tree
VERSION
version 2.080
SYNOPSIS
use Config::Model;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($WARN);
# define configuration tree object
my $model = Config::Model->new;
$model->create_config_class(
name => "Foo",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
]
);
$model ->create_config_class (
name => "MyClass",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
hash_of_nodes => {
type => 'hash', # hash id
index_type => 'string',
cargo => {
type => 'node',
config_class_name => 'Foo'
},
},
[qw/lista listb/] => {
type => 'list',
cargo => {type => 'leaf',
value_type => 'string'
}
},
],
) ;
my $inst = $model->instance(root_class_name => 'MyClass' );
my $root = $inst->config_root ;
# put data
my $step = 'foo=FOO hash_of_nodes:fr foo=bonjour -
hash_of_nodes:en foo=hello
! lista=foo,bar lista:2=baz
listb:0=foo listb:1=baz';
$root->load( step => $step );
print $root->describe,"\n" ;
# name value type comment
# foo FOO string
# bar [undef] string
# hash_of_nodes <Foo> node hash keys: "en" "fr"
# lista foo,bar,baz list
# listb foo,baz list
# delete some data
$root->load( step => 'lista~2' );
print $root->describe(element => 'lista'),"\n" ;
# name value type comment
# lista foo,bar list
# append some data
$root->load( step => q!hash_of_nodes:en foo.=" world"! );
print $root->grab('hash_of_nodes:en')->describe(element => 'foo'),"\n" ;
# name value type comment
# foo "hello world" string
DESCRIPTION
This module is used directly by Config::Model::Node to load serialized configuration data into the configuration tree.
Serialized data can be written by the user or produced by Config::Model::Dumper while dumping data from a configuration tree.
CONSTRUCTOR
new ( )
No parameter. The constructor should be used only by Config::Model::Node.
load string syntax
The string is made of the following items (also called actions) separated by spaces. These actions can be divided in 4 groups:
navigation: moving up and down the configuration tree.
list and hash operation: select, add or delete hash or list item (also known as
iditems)leaf operation: select, modify or delecte leaf value
annotation: modify or delete configuration annotation (aka comment)
navigation
- -
-
Go up one node
- !
-
Go to the root node of the configuration tree.
- xxx
-
Go down using
xxxelement. (Fornodetype element) - /xxx
-
Go up until the element
xxxis found. This search can be combined with one of the command specified below, e.g/a_string="foo bar"
list and hash operation
- xxx:yy
-
Go down using
xxxelement and idyy(Forhashorlistelement withnodecargo_type). Literal\nwill be replaced by real\n(LF in Unix). - xxx:~/yy/
-
Go down using
xxxelement and loop over the ids that match the regex. (Forhash)For instance, with
OpenSshmodel, you could doHost:~/.*.debian.org/ user='foo-guest'to set "foo-user" users for all your debian accounts.
- xxx:-yy
-
Delete item referenced by
xxxelement and idyy. For a list, this is equivalent tosplice xxx,yy,1. This command does not go down in the tree (since it has just deleted the element). I.e. a '-' is generally not needed afterwards. - xxx:-=yy
-
Remove the element whose value is
yy. For list or hash of leaves. Will not complain if the value to delete is not found. - xxx:-~/yy/
-
Remove the element whose value matches
yy. For list or hash of leaves. Will not complain if no value were deleted. - xxx:=~s/yy/zz/
-
Substitute a value with another. Perl switches can be used(e.g.
xxx:=~s/yy/zz/gi) - xxx:<yy or xxx:.push(yy)
-
Push
yyvalue onxxxlist - xxx:>yy or xxx:.unshift(yy)
-
Unshift
yyvalue onxxxlist - xxx:@ or xxx:.sort
-
Sort the list
- xxx:.insert_at(yy,zz)
-
Insert
zzvalue onxxxlist before indexyy. - xxx:.insert_before(yy,zz)
-
Insert
zzvalue onxxxlist before valueyy. - xxx:.insert_before(/yy/,zz)
-
Insert
zzvalue onxxxlist before value matchingyy. - xxx:.insort(zz)
-
Insert
zzvalue onxxxlist so that existing alphanumeric order is preserved. - xxx:=z1,z2,z3
-
Set list element
xxxto listz1,z2,z3. Use,,for undef values, and""for empty values.I.e, for a list
('a',undef,'','c'), usea,,"",c. - xxx:yy=zz
-
For
hashelement containingleafcargo_type. Set the leaf identified by keyyyto valuezz.Using
xxx:~/yy/=zzis also possible. - xxx:.copy(yy,zz)
-
copy item
yyinzz
leaf operation
- xxx=zz
-
Set element
xxxto valueyy. load also accepts to set elements with a quoted string. (Forleafelement) Literal\nwill be replaced by real\n(LF in Unix). Literal\\will be replaced by\.For instance
foo="a quoted string"orfoo="\"bar\" and \"baz\"". - xxx=~s/foo/bar/
-
Apply the substitution to the value of xxx.
s/foo/bar/is the standard Perlssubstitution pattern.If your patten needs white spaces, you will need to surround the pattern with quotes:
xxx=~"s/foo bar/bar baz/"Perl pattern modifiers are accepted
xxx=~s/FOO/bar/i - xxx~
-
Undef element
xxx - xxx.=zzz
-
Will append
zzzvalue to current values (valid forleafelements).
annotation
- xxx#zzz or xxx:yyy#zzz
-
Element annotation. Can be quoted or not quoted. Note that annotations are always placed at the end of an action item.
I.e.
foo#comment,foo:bar#commentorfoo:bar=baz#commentare valid.foo#comment:baris not valid.
Quotes
You can surround indexes and values with double quotes. E.g.:
a_string="\"foo\" and \"bar\""
Examples
You can use cme to modify configuration with cme modify command.
For instance, if Config::Model::Ssh is installed, you can run:
cme modify ssh 'ControlMaster=auto ControlPath="~/.ssh/master-%r@%n:%p"'
To delete Host * entry:
cme modify ssh 'Host:-"*"'
To specify 2 Host with a single command:
cme modify ssh 'Host:"foo* bar*" ForwardX11=yes HostName="foo.com" - Host:baz HostName="baz.com"'
Note the '-' used to go up one node before "Host:baz". In this case, "up one node" leads to the "root node", so "!" could also be used instead of "-":
cme modify ssh 'Host:"foo* bar*" ForwardX11=yes HostName="foo.com" ! Host:baz HostName="baz.com"'
Let's modify now the host name of using a .org domain instead of .com. The :~ operator uses a regexp to loop over several Host entries:
cme modify ssh 'Host:~/ba[rz]/ HostName=~s/.com$/.org/'
Now that ssh config is mucked up with dummy entries, let's clean up:
cme modify ssh 'Host:-"baz" Host:-"foo* bar*"'
Methods
load ( ... )
Load data into the node tree (from the node passed with node) and fill values as we go following the instructions passed with step. (step can also be an array ref).
Parameters are:
- node
-
node ref of the root of the tree (of sub-root) to start the load from.
- step
-
A string or an array ref containing the steps to load. See above for a description of the string.
- check
-
Whether to check values while loading. Either
yes(default),noorskip. Loading withskipwill discard bad values.
AUTHOR
Dominique Dumont, (ddumont at cpan dot org)
SEE ALSO
Config::Model,Config::Model::Node,Config::Model::Dumper
AUTHOR
Dominique Dumont
COPYRIGHT AND LICENSE
This software is Copyright (c) 2016 by Dominique Dumont.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999