logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Config::Model::IdElementReference - Refer to id element(s) and extract keys

Author

       Dominique Dumont

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.

Constructor

       Construction is handled by the calling object (Config::Model::Node).

Description

       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).

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.

Name

       Config::Model::IdElementReference - Refer to id element(s) and extract keys

See Also

       Config::Model, Config::Model::Value, Config::Model::AnyId, Config::Model::CheckList

Synopsis

        # 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

Version

       version 2.155

See Also