如何检索事实并使用它在Puppet中的变量中存储自定义值?

如何检索事实并使用它在Puppet中的变量中存储自定义值?,puppet,facter,Puppet,Facter,我有一个脚本,在这个脚本中,我从一台机器检索IP地址,然后执行一些逻辑操作,以决定给变量赋予什么值。然后,我使用这个值来决定机器工作的环境 我试图把这个翻译成木偶,但我不知道如何继续。我知道我可以使用事实检索IP地址,但我应该在清单或模板中这样做吗?另外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作 总而言之,这些是我需要的步骤 从计算机获取IP地址 执行逻辑操作 将带有结果的变量传递给傀儡清单 要点是:如何将事实检索为变量,以及应将代码放在何处使用该变量 提前感谢。您无法使用事实准确地

我有一个脚本,在这个脚本中,我从一台机器检索IP地址,然后执行一些逻辑操作,以决定给变量赋予什么值。然后,我使用这个值来决定机器工作的环境

我试图把这个翻译成木偶,但我不知道如何继续。我知道我可以使用事实检索IP地址,但我应该在清单或模板中这样做吗?另外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作

总而言之,这些是我需要的步骤

  • 从计算机获取IP地址

  • 执行逻辑操作

  • 将带有结果的变量传递给傀儡清单

  • 要点是:如何将事实检索为变量,以及应将代码放在何处使用该变量

    提前感谢。

    您无法使用事实准确地“检索”IP,但目录编译器可以并且确实将其作为事实接收。前者表明目录编译器在这个过程中起着积极的作用,而事实并非如此

    您有两个通用的备选方案:

    • 计算节点上的派生值
    • 计算主服务器上的派生值
    您可以通过编写自定义事实来计算节点上的值。通过依赖Facter为其提供IP,其工作可以简化。结果将作为它自己的、独立的事实呈现给目录编译器,在任何地方使用它都不需要任何特殊的东西

    将派生值作为事实进行计算的不利方面包括,这样做的代码被复制到所有节点,在这些节点上可能会对其进行检查,如果某个节点受到损害,则原则上可以伪造该事实的值。此外,定制事实可能需要在Ruby中实现,以防您遇到问题

    在目录生成器中执行计算并不特别困难。您可以将其作为一个自定义函数来执行,这在复杂性上与自定义事实相当,但我建议在类中执行此操作,并将结果分配给该类的类变量。具体来说,应该如何实现值计算取决于计算的细节。比如说,

    class site::derived_data {
        $ip_pieces = split($ipaddress, '[.]')
    
        # This is the derived value we are computing:
        $department = $ip_pieces[2] ? {
            0 => 'network operations',
    
            # ...
    
            default => 'other'
        }
    }
    
    然后,您可以在其他地方使用它,如下所示:

    class mymodule::myclass(
        # parameters ...
        ) {
      include site::derived_data
    
      notify { $site::derived_data::department : }
    }
    
    您无法使用事实准确地“检索”IP,但目录编译器可以并且确实将其作为事实接收。前者表明目录编译器在这个过程中起着积极的作用,而事实并非如此

    您有两个通用的备选方案:

    • 计算节点上的派生值
    • 计算主服务器上的派生值
    您可以通过编写自定义事实来计算节点上的值。通过依赖Facter为其提供IP,其工作可以简化。结果将作为它自己的、独立的事实呈现给目录编译器,在任何地方使用它都不需要任何特殊的东西

    将派生值作为事实进行计算的不利方面包括,这样做的代码被复制到所有节点,在这些节点上可能会对其进行检查,如果某个节点受到损害,则原则上可以伪造该事实的值。此外,定制事实可能需要在Ruby中实现,以防您遇到问题

    在目录生成器中执行计算并不特别困难。您可以将其作为一个自定义函数来执行,这在复杂性上与自定义事实相当,但我建议在类中执行此操作,并将结果分配给该类的类变量。具体来说,应该如何实现值计算取决于计算的细节。比如说,

    class site::derived_data {
        $ip_pieces = split($ipaddress, '[.]')
    
        # This is the derived value we are computing:
        $department = $ip_pieces[2] ? {
            0 => 'network operations',
    
            # ...
    
            default => 'other'
        }
    }
    
    然后,您可以在其他地方使用它,如下所示:

    class mymodule::myclass(
        # parameters ...
        ) {
      include site::derived_data
    
      notify { $site::derived_data::department : }
    }
    

    这是非常模糊的。你应该详细说明第2点和第3点,这样人们可以帮助你。你能提供一个脚本的例子吗?我认为操作不是这里的重要部分。我将执行简单的字符串操作,并检查某些条件是否正确。关键是我如何检索事实来处理它,以及我应该将代码放在哪里?我将编辑这个问题。这是非常模糊的。你应该详细说明第2点和第3点,这样人们可以帮助你。你能提供一个脚本的例子吗?我认为操作不是这里的重要部分。我将执行简单的字符串操作,并检查某些条件是否正确。关键是我如何检索事实来处理它,以及我应该将代码放在哪里?我将编辑这个问题。