4

Chefクックブックnetwork_interfacesに、ノードごとにIPアドレスやネットマスクなどの動的な値を設定したいと思います。私のために働くのは次のとおりです。

db_role.rb(block1):

override_attributes(
  "network_interfaces" => {
      :device => 'eth0',
      :address => '123.123.123.123',
  }
)

しかし、それはあまり動的ではありません。私のアイデアは、の各ノードにIPアドレス(、ネットマスクなど)を送信することでしたknife bootstrap

その場合、ノードは次のようになります(block2):

{
    "normal": {
      "network_interfaces" => {
          "device" : "eth0",
          "address" : "123.123.123.123"
      }
    },
    "name": "foobar",
    "run_list": [
       "recipe[zsh]",
       "role[networking_interfaces]"
    ]
}

残念ながら、network_interfacesクックブックはデフォルトでこれらの値を取得しません。私のアイデアは、次のようにロール定義でblock2に示されているノード固有の属性を参照することでした。

override_attributes(
  "network_interfaces" => {
      :device => node['network_interfaces']['device'],
      :address => node['network_interfaces']['address'],
  }
)

これは明らかにjsonではなく、Chefがロールファイルで動的に割り当てられた値を処理できないため、機能しません。

network_interfacesレシピを実行してノード固有の値をレシピに渡すにはどうすればよいですか?

4

2 に答える 2

6

Maciej、私はあなたの提案に従いました。ブートストラップ時に-jオプションを指定して、IP、ブロードキャストなどのカスタムパラメータをアップロードします。

knife bootstrap IP_OF_THE_NODE -r 'role[main_application]' -j '{ "network_interfaces" : {"device" : "eth1.0000", "type" : "static", "address" : "192.168.1.1", "netmask" : "255.255.255.0", "broadcast" : "192.168.0.255","gateway": "192.168.0.1"}}'     

さらに、動的マッチングを実現するためのカスタムレシピを作成しました。コードは次のとおりです。

#setup a custom network config per vm
network_interfaces node["network_interfaces"]["device"] do
  Chef::Log.info("Compiling network_interfaces")
  target node["network_interfaces"]["address"]
  mask node["network_interfaces"]["netmask"]
  broadcast node["network_interfaces"]["broadcast"]
  gateway node["network_interfaces"]["gateway"]
  custom node["network_interfaces"]["custom"]
  action :save
end
于 2013-02-13T16:04:54.403 に答える
2
于 2013-01-14T11:12:17.527 に答える