Skip to content

Instantly share code, notes, and snippets.

@hnakamur
Created July 2, 2016 00:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hnakamur/4cd83b0b5ec1d1cee7aa15c9a2fe0850 to your computer and use it in GitHub Desktop.
Save hnakamur/4cd83b0b5ec1d1cee7aa15c9a2fe0850 to your computer and use it in GitHub Desktop.
cofuで独自リソースを定義する例
define "my_resource" {
version = "default_version",
foo = "default_foo",
bar = "deafult_bar",
function(attrs)
print("hello my_resource")
for k, v in pairs(attrs) do
print("k=" .. tostring(k) .. ", v=" .. tostring(v))
end
end,
}
my_resource "resource_name" {
version = "2.0",
foo = "value1"
}
@hnakamur
Copy link
Author

hnakamur commented Jul 2, 2016

Goでプロビジョニングツールを作った - オープンソースこねこねを読んで、defineのドキュメントkohkimakimoto/cofu: Minimum configuration management tool written in Go.のソースを見て試行錯誤した結果、上のように書けば独自リソースを定義できるらしいとわかりました。

実行結果

$ cofu define_example.lua 
hello my_reource
k=version, v=2.0
k=name, v=resource_name
k=bar, v=deafult_bar
k=foo, v=value1
  • my_resource の後の文字列は name というキーに設定されます。
  • define で定義していない変数を渡しても無視されます。
  • define で定義する変数の値は nil 以外にする必要があります。

@kohkimakimoto
Copy link

作者です。

  • my_resource の後の文字列は name というキーに設定されます。
  • define で定義していない変数を渡しても無視されます。

は意図した動作ですが。

  • define で定義する変数の値は nil 以外にする必要があります。

はおかしな仕様に感じますね。ちょっとどう直すか検討します。
現状リソースのアトリビュートの値について、一部型や定義を厳密に扱っていない(考慮していない)実装になっています。
空文字とnilが同じ扱いになったりとか、定義がない場合とnilで定義されている場合とかの違いとか。。。
今後、このあたりを見なおして改修を検討しようと思います。

検証ありがとうございました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment