この関数(パレットの一部)に渡すパラメーターを作成する方法を見つけようとしています。
(defn node-spec [& {:keys [image hardware location network qos] :as options}]
{:pre [(or (nil? image) (map? image))]}
options)
うまくいくのはこの種の使用法です:
(node-spec :location {:location-id "eu-west-1a"}, :image {:image-id "eu-west-1/ami-937474e7"} :network {})
ただし、これの:locationビットと:imageビットは、プロビジョニングするすべてのマシンに共通ですが、:network{}ビットはノードごとに異なります。だから私は一般的なビットを除外して次のようなことをしたいと思います:
(def my-common-location-and-image {:location {:location-id "eu-west-1a"}, :image {:image-id "eu-west-1/ami-937474e7"}} )
(node-spec (merge {:network {:security-groups [ "group1" ] }} my-common-location-and-image ))
(node-spec (merge {:network {:security-groups [ "group1" ] }} my-common-location-and-image ))
しかし、これは機能しません。マージされたマップは、その値が欠落している単一のキーとして解析されます。だから私は試しました
(node-spec :keys (merge {:network {:security-groups [ "group1" ] }} my-common-location-and-image ))
と
(node-spec :options (merge {:network {:security-groups [ "group1" ] }} my-common-location-and-image ))
しかし、それも機能しません。node-specパラメーターの破壊を逆転または乗り越えようとしているような気がします。私は何が間違っているのですか?または、キーと値のペアの一部を除外するという私の目標は不可能ですか?