Angenommen, ich habe ein Kochbuch, das einen magischen Deamon konfiguriert und installiert:
magisch-deamon / rezepte / default.rb:
template "/etc/magical-deamon/magical.conf" do
source "magical.conf"
mode 0644
notifies :restart, resources(:service => "magical-deamon")
end
magisch-deamon / attribute / default.rb:
default['magical-deamon']['memory'] = 1024
magic-deamon / templates / default / magic.conf.erb:
memory = <%= node['magical-deamon']['memory'] %>
Wie ich Chef verstanden habe, würde ich entweder die Knotenattribute verwenden, um den Speicherwert wie folgt festzulegen:
{
"normal": {
"tags": [],
"magical-deamon": {
"memory": 256
}
},
"name": "server.example.com",
"chef_environment": "production",
"run_list": [
"role[base]"
]
}
Oder durch eine Rolle:
{
"name": "base",
"default_attributes": {
"magical-deamon": {
"memory": 756
}
},
"json_class": "Chef::Role",
"env_run_lists": {
},
"run_list": [
],
"description": "base role applied to all nodes",
"chef_type": "role",
"override_attributes": {
},
}
}
Oder eine Umgebung:
{
"name": "production",
"default_attributes": {
"magical-deamon": {
"memory": 756
}
},
"json_class": "Chef::Environment",
"description": "",
"cookbook_versions": {
},
"override_attributes": {
},
"chef_type": "environment"
}
So weit, ist es gut...
Jetzt hatte ich die dumme Idee, 'Speicher' auf einen knotenspezifischen dynamischen Wert zu setzen.
Nehmen wir an, unser magischer Deamon sollte 75% des gesamten Speichers des Knotens verbrauchen.
value = total_memory * 0.75
Ich komme aus einem Programmierer-Hintergrund und lasse dieses Wissen gerne aus dem Kochbuch heraus, weil ich mein Kochbuch mag, das für andere Leute wiederverwendbar ist.
Ich dachte, der richtige Ort wäre irgendwo, wo Attribute gesetzt werden. Eine solche Berechnung in json oder ruby dsl ist jedoch nicht möglich.
Meine Fragen sind also:
- Ist mein allgemeiner Ansatz (value = total_memory * 0.75) eine dumme Idee?
- Wie würden Sie diese Art von Attribut einstellen? Denken Sie daran: Es wird mehr als einen Wert und einen Knoten geben :) Und es kann eine Berechnung mit MB -> KB und Rundung usw. geben. Jedes Attribut fest in das Rezept einzubinden, sollte keine Option sein;)