Иера не раскрывает факты

У меня возникли проблемы с Puppet и Hiera, поскольку Hiera, похоже, не использует факты, которые я запрашиваю в шаблонах.

У меня есть файл /etc/puppetlabs/puppet/hiera.yaml с простой иерархией примеров:

---
version: 5

defaults:
  datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata"
  data_hash: yaml_data

hierarchy:
  - name: "Per-node data"
    path: "nodes/%{trusted.certname}.yaml"

  - name: "Per-OS defaults"
    path: "os/%{facts.os.family}.yaml"

  - name: "Common data"
    path: "common.yaml"

Затем у меня есть марионеточный агент, который запускается и отправляет свои факты в Puppet. Когда я проверяю поиск, все переменные расширяются до пустых строк:

> puppet lookup profiles --environment production --node puppet.example.local --explain

Searching for "lookup_options"
  Global Data Provider (hiera configuration version 5)
    Using configuration "/etc/puppetlabs/puppet/hiera.yaml"
    Merge strategy hash
      Hierarchy entry "Per-node data"
        Path "/etc/puppetlabs/code/environments/production/hieradata/nodes/test-.yaml"
          Original path: "nodes/test-%{trusted.certname}.yaml"
          Path not found
      Hierarchy entry "Per-OS defaults"
        Path "/etc/puppetlabs/code/environments/production/hieradata/os/.yaml"
          Original path: "os/%{facts.os.family}.yaml"
          Path not found
      Hierarchy entry "Common data"
        Path "/etc/puppetlabs/code/environments/production/hieradata/common.yaml"
          Original path: "common.yaml"
          No such key: "lookup_options"
Searching for "profiles"
  Global Data Provider (hiera configuration version 5)
    Using configuration "/etc/puppetlabs/puppet/hiera.yaml"
    Hierarchy entry "Per-node data"
      Path "/etc/puppetlabs/code/environments/production/hieradata/nodes/.yaml"
        Original path: "nodes/test-%{trusted.certname}.yaml"
        Path not found
    Hierarchy entry "Per-OS defaults"
      Path "/etc/puppetlabs/code/environments/production/hieradata/os/.yaml"
        Original path: "os/%{facts.os.family}.yaml"
        Path not found
    Hierarchy entry "Common data"
      Path "/etc/puppetlabs/code/environments/production/hieradata/common.yaml"
        Original path: "common.yaml"
        No such key: "profiles"
Function lookup() did not find a value for the name 'profiles'

Значение не найдено, но я полагаю, что это не имеет значения, потому что он даже не ищет никаких реальных файлов, которые все отображаются как nodes/.yaml и os/.yaml.

Если я снова запущу команду с --debug, я увижу дамп информации об узле, включающий факты:

Debug: Facter: fact "osfamily" has resolved to "RedHat".
...
Debug: Facter: fact "os" has resolved to {
  architecture => "x86_64",
  family => "RedHat",
  hardware => "x86_64",
  name => "CentOS",
  release => {
    full => "7.4.1708",
    major => "7",
    minor => "4"
  },

Марионетка: 5.4.0


person Cylindric    schedule 19.02.2018    source источник
comment
Это Фактор 3.х?   -  person Matt Schuchard    schedule 19.02.2018
comment
@MattSchuchard facter --version говорит 3.10.0.   -  person Cylindric    schedule 19.02.2018
comment
Вы не указываете никаких фактов в командной строке. Команда puppet lookup получит и использует самые последние факты для указанного узла, если они записаны в puppetdb и команда запущена на узле, имеющем доступ. Он не собирает факты автоматически, как это сделали бы puppet agent или puppet apply.   -  person John Bollinger    schedule 20.09.2018


Ответы (1)


Укажите файл фактов по следующему пути

/etc/facter/facts.d/${your_component_facts}.sh

и дайте необходимые разрешения:

chmod +x /etc/facter/facts.d/${your_component_facts}.sh
person Santosh    schedule 27.06.2019