Config::Model::IdElementReference - Refer to id element(s) and extract keys
version 2.152
# synopsis shows an example of model of a network to use references
use Config::Model;
my $model = Config::Model->new;
# model of several hosts with several NICs
$model->create_config_class(
name => 'Host',
'element' => [
ip_nic => {
type => 'hash',
index_type => 'string',
cargo => {
type => 'leaf',
value_type => 'uniline',
}
},
]
);
# model to choose a master host and a master NIC (whatever that may be)
# among configured hosts. Once these 2 are configured, the model computes
# the master IP
$model->create_config_class(
name => "MyNetwork",
element => [
host => {
type => 'hash',
index_type => 'string',
cargo => {
type => 'node',
config_class_name => 'Host'
},
},
# master_host is one of the configured hosts
master_host => {
type => 'leaf',
value_type => 'reference', # provided by tConfig::Model::IdElementReference
refer_to => '! host'
},
# master_nic is one NIC of the master host
master_nic => {
type => 'leaf',
value_type => 'reference', # provided by tConfig::Model::IdElementReference
computed_refer_to => { # provided by Config::Model::ValueComputer
formula => ' ! host:$h ip_nic ',
variables => { h => '- master_host' }
}
},
# provided by Config::Model::ValueComputer
master_ip => {
type => 'leaf',
value_type => 'string',
compute => {
formula => '$ip',
variables => {
h => '- master_host',
nic => '- master_nic',
ip => '! host:$h ip_nic:$nic'
}
}
},
],
);
my $inst = $model->instance(root_class_name => 'MyNetwork' );
my $root = $inst->config_root ;
# configure hosts on my network
my $steps = 'host:foo ip_nic:eth0=192.168.0.1 ip_nic:eth1=192.168.1.1 -
host:bar ip_nic:eth0=192.168.0.2 ip_nic:eth1=192.168.1.2 -
host:baz ip_nic:eth0=192.168.0.3 ip_nic:eth1=192.168.1.3 ';
$root->load( steps => $steps );
print "master host can be one of ",
join(' ',$root->fetch_element('master_host')->get_choice),"\n" ;
# prints: master host can be one of bar baz foo
# choose master host
$root->load('master_host=bar') ;
print "master NIC of master host can be one of ",
join(' ',$root->fetch_element('master_nic')->get_choice),"\n" ;
# prints: master NIC of master host can be one of eth0 eth1
# choose master nic
$root->load('master_nic=eth1') ;
# check what is the master IP computed by the model
print "master IP is ",$root->grab_value('master_ip'),"\n";
# prints master IP is 192.168.1.2
This class is user by Config::Model::Value to set up an enumerated value where
the possible choice depends on the key of a Config::Model::HashId or the
content of a Config::Model::ListId object.
This class is also used by Config::Model::CheckList to define the checklist
items from the keys of another hash (or content of a list).
Construction is handled by the calling object (Config::Model::Node).
- refer_to
- "refer_to" is used to specify a hash element that
is used as a reference. "refer_to" points to an array or hash
element in the configuration tree using the path syntax (See
"grab" in Config::Model::Role::Grab for details).
- computed_refer_to
- When "computed_refer_to" is used, the path is
computed using values from several elements in the configuration tree.
"computed_refer_to" is a hash with 2 mandatory elements:
"formula" and "variables".
The available choice of this (computed or not) reference value is made from the
available keys of the "referred_to" hash element or the values of
the "referred_to" array element.
The example means the the value must correspond to an existing host:
value_type => 'reference',
refer_to => '! host'
This example means the the value must correspond to an existing lan within the
host whose Id is specified by hostname:
value_type => 'reference',
computed_refer_to => {
formula => '! host:$a lan',
variables => { a => '- hostname' }
}
If you need to combine possibilities from several hash, use the
""+"" token to separate 2 paths:
value_type => 'reference',
computed_refer_to => {
formula => '! host:$a lan + ! host:foobar lan',
variables => { a => '- hostname' }
}
You can specify "refer_to" or "computed_refer_to" with a
"choice" argument so the possible enum value will be the combination
of the specified choice and the referred_to values.
Returns a human readable string with explains how is retrieved the reference.
This method is mostly used to construct an error messages.
Dominique Dumont, (ddumont at cpan dot org)
Config::Model, Config::Model::Value, Config::Model::AnyId,
Config::Model::CheckList
Dominique Dumont
This software is Copyright (c) 2005-2022 by Dominique Dumont.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999