Config::Model::IdElementReference3pm
Refer to id element(s) and extract keys
Usage
# synopsis shows an example of model of a network to use referencesuse 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 hostsmaster_host => {type => 'leaf',value_type => 'reference', # provided by tConfig::Model::IdElementReferencerefer_to => '! host'},# master_nic is one NIC of the master hostmaster_nic => {type => 'leaf',value_type => 'reference', # provided by tConfig::Model::IdElementReferencecomputed_refer_to => { # provided by Config::Model::ValueComputerformula => ' ! host:$h ip_nic ',variables => { h => '- master_host' }}},# provided by Config::Model::ValueComputermaster_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 networkmy $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 modelprint "master IP is ",$root->grab_value('master_ip'),"\n";# prints master IP is 192.168.1.2
Version
version 2.155
Overview
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).
Constructor
Construction is handled by the calling object (Config::Model::Node).
Config class parameters
- 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.
Methods
reference_info
Returns a human readable string with explains how is retrieved the reference. This method is mostly used to construct an error messages.
Copyright and license
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
Releases
8 releases since Debian 6.0 (Squeeze); the text changed 7 times.