web-dev-qa-db-ja.com

人形:ドットのあるマニフェストの事実

ファクト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'を試したいのですが、上記の理由でできません。

その他のカップル。注意事項:

  • 私はrazorsedge-networkモジュールを使用してそのVLANインターフェースを作成しています。
  • Puppet3.8では問題なく「ipaddress_enp0s8_25」を使用できました。
1
me2017

ファクトへのアクセスはバージョン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

1
nologo