Config::Model::Loader - Load serialized data into config tree
version 2.078
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
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.
No parameter. The constructor should be used only by Config::Model::Node.
The string is made of the following items (also called actions) separated by spaces. These actions can be divided in 4 groups:
actions
navigation: moving up and down the configuration tree.
list and hash operation: select, add or delete hash or list item (also known as id items)
id
leaf operation: select, modify or delecte leaf value
annotation: modify or delete configuration annotation (aka comment)
Go up one node
Go to the root node of the configuration tree.
Go down using xxx element. (For node type element)
xxx
node
Go up until the element xxx is found. This search can be combined with one of the command specified below, e.g /a_string="foo bar"
/a_string="foo bar"
Go down using xxx element and id yy (For hash or list element with node cargo_type). Literal \n will be replaced by real \n (LF in Unix).
yy
hash
list
\n
Go down using xxx element and loop over the ids that match the regex. (For hash)
For instance, with OpenSsh model, you could do
OpenSsh
Host:~/.*.debian.org/ user='foo-guest'
to set "foo-user" users for all your debian accounts.
Delete item referenced by xxx element and id yy. For a list, this is equivalent to splice 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.
splice xxx,yy,1
-
Remove the element whose value is yy. For list or hash of leaves. Will not complain if the value to delete is not found.
Remove the element whose value matches yy. For list or hash of leaves. Will not complain if no value were deleted.
Substitute a value with another. Perl switches can be used(e.g. xxx:=~s/yy/zz/gi)
xxx:=~s/yy/zz/gi
Push yy value on xxx list
Unshift yy value on xxx list
Sort the list
Insert zz value on xxx list before index yy.
zz
Insert zz value on xxx list before value yy.
Insert zz value on xxx list before value matching yy.
Insert zz value on xxx list so that existing alphanumeric order is preserved.
Set list element xxx to list z1,z2,z3. Use ,, for undef values, and "" for empty values.
z1,z2,z3
,,
""
I.e, for a list ('a',undef,'','c'), use a,,"",c.
('a',undef,'','c')
a,,"",c
For hash element containing leaf cargo_type. Set the leaf identified by key yy to value zz.
leaf
Using xxx:~/yy/=zz is also possible.
xxx:~/yy/=zz
copy item yy in zz
Set element xxx to value yy. load also accepts to set elements with a quoted string. (For leaf element) Literal \n will be replaced by real \n (LF in Unix).
For instance foo="a quoted string". Note that you cannot embed double quote in this string. I.e foo="a \"quoted\" string" will fail.
foo="a quoted string"
foo="a \"quoted\" string"
Apply the substitution to the value of xxx. s/foo/bar/ is the standard Perl s substitution pattern.
s/foo/bar/
s
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
Undef element xxx
Will append zzz value to current values (valid for leaf elements).
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#comment or foo:bar=baz#comment are valid. foo#comment:bar is not valid.
foo#comment
foo:bar#comment
foo:bar=baz#comment
foo#comment:bar
You can surround indexes and values with double quotes. E.g.:
a_string="\"foo\" and \"bar\""
You can use cme to modify configuration with cme modify command.
cme modify
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:
Host *
cme modify ssh 'Host:-"*"'
To specify 2 Host with a single command:
Host
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 "-":
Host:baz
!
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:
.org
.com
:~
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*"'
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).
step
Parameters are:
node ref of the root of the tree (of sub-root) to start the load from.
A string or an array ref containing the steps to load. See above for a description of the string.
Whether to check values while loading. Either yes (default), no or skip. Loading with skip will discard bad values.
yes
no
skip
Dominique Dumont, (ddumont at cpan dot org)
Config::Model,Config::Model::Node,Config::Model::Dumper
Dominique Dumont
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
To install Config::Model, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Config::Model
CPAN shell
perl -MCPAN -e shell install Config::Model
For more information on module installation, please visit the detailed CPAN module installation guide.