ファクト3.6.8でパペット4.10.9を使用しています。マニフェストでの事実の使用に関して、単純な形式とより複雑な形式で質問します。まず、簡単な質問です。
エージェントでは、次のアドレスを確認できます。
facter --show-legacy | grep ipaddress
ipaddress => 192.168.25.75
ipaddress_enp0s3 => 10.0.2.15
ipaddress_enp0s8.25 => 192.168.25.75
ipaddress_lo => 127.0.0.1
マニフェストで「ipaddress_enp0s8.25」(VLANインターフェース)を使用したい。はい、「ipaddress」を使用できることはわかっていますが、後で説明する理由から、VLANインターフェイスを具体的に使用したいと思います。
マニフェストでこのインターフェイス参照を使用しようとすると、構文エラーが発生します。
listenip => $ipaddress_enp0s8.25
これらの参照は機能しますが、ここでも、VLANインターフェイスを具体的に使用したいと思います。
listenip => $ipaddress
listenip => $networking['ip']
では、どうすれば 'ipaddress_enp0s8.25'を使用できますか?
これがより複雑な角度といくつかの背景です。これは、同じ環境を頻繁にリサイクル(スピンアップ、終了)する大規模なプロジェクトの一部です。ノードが初期プロビジョニングを行うときのノードの動作には注意が払われています。私が最初に気づいた問題の1つは次のとおりです。
'Evaluation Error: Operator '[]' is not applicable to an Undef Value.'
その時私は使用しようとしていたので:
$networking['interfaces']['enp0s8.25']['ip']
そして、これは最初の実行では存在しません。 「事実の読み込み」を乗り越えることができませんでした
だから私はうまくいく '$ networking [' ip ']'に落ち着きました。ただし、最初の実行では、これは10.0.2.15を返します。以降の実行では、目的のアドレス192.168.25.75が返されます。その結果、通常は運用ノードになりますが、特定のサービスでは30分経過します。
目的のVLANアドレスが値になるようにここで何を使用できますか? 'ipaddress_enp0s8.25'を試したいのですが、上記の理由でできません。
その他のカップル。注意事項:
ファクトへのアクセスはバージョン4で変更されました。トップスコープ変数を使用する代わりに、$ factsハッシュ$ facts ['ipaddress_enp0s8.25']を介してファクトにアクセスしてみてください。
トップスコープ変数を使用してファクトにアクセスすることはできますが、それらは非推奨になっているため、できるだけ早く$ factsハッシュの使用に移行する必要があります。
この場合、この事実によって名前が変更されたようであり、これがあなたが直面している問題です。以前のバージョンでは、ファクト名はアンダースコアでエスケープされていましたが、新しいバージョンにはピリオドがあり、トップスコープ変数を使用してファクトにアクセスするときにエスケープできないため、$ factsを使用する必要がありますハッシュ。
$ ipaddress_enp0s8.25は、ピリオドをエスケープする必要があるため、正しく補間されません。
$ facts ['ipaddress_enp0s8.25']は、一重引用符でハッシュの要素にアクセスしているため、補間されません。
Puppet 4でファクトがどのように使用されるかについて詳しくは、こちらをご覧ください。
https://puppet.com/docs/puppet/4.10/lang_facts_and_builtin_vars.html