DOKK / manpages / debian 12 / libconfig-model-perl / Config::Model::IdElementReference.3pm.en
Config::Model::IdElementReference(3pm) User Contributed Perl Documentation Config::Model::IdElementReference(3pm)

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" 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).
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
2022-07-28 perl v5.34.0