0

外部ファクトを設定してから、hiera yaml ファイルの値が入力されたテンプレート ファイルをコピーしようとしているという問題があります。テンプレート ファイルは、外部ファクト ファイルによって設定される特定のファクト (テンプレート ファイルの所有者やグループなど) に依存します。以下はパペットコードです。

    file {['/etc/facter/','/etc/facter/facts.d']:
            ensure => directory,
            owner => 'root',
            group => 'root',
            mode => '0755',
    }

    file {"/etc/facter/facts.d/domain_facts.sh":
            ensure => present,
            owner => 'root',
            group => 'root',
            mode => '0755',
            source => $::hostname?{
                    'hostname1' => 'puppet:///modules/vfecare/hostname1.sh',
                    },
            require => File['/etc/facter/','/etc/facter/facts.d'],
    }

    file {"/tmp/testing123":
            ensure => present,
            owner => "${::remoteuser}",
            group => "${::remotegroup}",
            content => template("vfecare/testscript.erb"),
            require => File["/etc/facter/facts.d/domain_facts.sh"]
    }

ただし、実行中に、テンプレートが最初に puppet エージェント マシンにコピーされ、テンプレートには外部ファクト ファイルから必要な値がいくつか含まれているため、テンプレートが見つからず、「所有者とグループの値が無効です」というエラーがスローされます。

以下は、外部ファクト ファイルの内容です。

#!/bin/bash

echo "remoteuser=tempuser"
echo "remotegroup=tempuser"

ここでパペットが依存関係サイクルを無視しているように見えるのはなぜですか?

4

1 に答える 1

3

ファクトは、ファイル リソースを含むカタログが実行される前に、Puppet 実行の開始時にエージェントによって収集されます。ファクトが失われるため、実行中に外部ファクトをデプロイしてこのように使用することはできません。

代わりに、ファクトを収集する前に外部ファクトをマスターからエージェントにコピーする Puppet の「pluginsync」メカニズムに依存する必要があります。

vfecare/files/hostname1.shモジュール内のファクト ファイルを に移動し、vfecare/facts.d/hostname1.sh/etc/facter 用のファイル リソースを削除し、外部ファクトをコピーしてから、エージェントを再実行します。最初に hostname1.sh ファクト ファイルをダウンロードしてから、remoteuser/group 値を使用して /tmp/testing123 ファイル リソースを正しく評価する必要があります。

詳細については、エージェント側プラグインの自動ダウンロードのドキュメントを参照してください。

于 2016-10-19T10:09:09.547 に答える