Hiera 值无法在人偶配置文件中接收

Hiera value not able to receiving in puppet profile

  1. 我创建了一个 proxy_match.yaml 文件作为 hiera 源文件 默认层次数据位置。

  2. 层次结构中添加了proxy_match.yaml

  3. 正在配置文件中查找层次数据

Where and what am I missing, I am not able to receive the hiera data value and thus the error appears mentioned bellow.

其中, proxy_match是新建的环境

层次文件 1 /etc/puppetlabs/code/environments/proxy_match/hiera.yaml

version: 5
defaults:
  # The default value for "datadir" is "data" under the same directory as the hiera.yaml
  # file (this file)
  # When specifying a datadir, make sure the directory exists.
  # See https://docs.puppet.com/puppet/latest/environments.html for further details on environments.
  # datadir: data
  # data_hash: yaml_data


hierarchy:
  - name: "environment specific yaml"
    path: "proxy_match.yaml"
  - name: "Per-node data (yaml version)"
    path: "nodes/%{::trusted.certname}.yaml"
  - name: "Other YAML hierarchy levels"
    paths:
      - "common.yaml"

proxy_match.yamlhiera数据源文件

这是在 herarchy 中命名为 proxy_match.yaml 的 yaml hiera 源 /etc/puppetlabs/code/environments/proxy_match/data/proxy-match.yaml

---
profiles::apache::servername: "taraserver.com"
profiles::apache::port: "80"
profiles::apache::docroot: "/var/www/tarahost"

配置文件中的 hiera 查找

$servername  = hiera('profiles::apache::servername',{})
  $port        = hiera('profiles::apache::port',{})
  $docroot     = hiera('profiles::apache::docroot',{})
  class profile::apache{
    #configure apache
    include apache
    apache::vhost{$servername:
      port    => $port,
      docroot => $docroot,
    }
  }

#错误:


Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: {"message":"Server Error: Evaluation Error: Error while evaluating a Resource Statement, Apache::Vhost[7fba80ae621c.domain.name]: parameter 'docroot' expects a value of type Boolean or String, got Undef at /etc/puppetlabs/code/environments/proxy_match/modules/profile/manifests/apache.pp:29 on node 94707b03ff05.domain.name","issue_kind":"RUNTIME_ERROR"}
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

您正在 class 定义之外定义变量。当 Puppet 加载 class 时,class 之前的那些行将被忽略。

您的个人资料 class 中应该包含的内容是:

class profiles::apache (
  String $servername,
  Integer $port,
  String $docroot,
) {
  include apache
  apache::vhost { $servername:
    port    => $port,
    docroot => $docroot,
  }
}

请注意,我使用 automatic parameter lookup 功能来设置您的变量,而不是显式调用 hiera 函数。