sgtkのコンフィグをベイクする
Pipeline Toolkitのディスクリプターには app_store
型・ git
型などいくつかの型があります。
このドキュメントによるとパイプラインコンフィグには下記の3種があり、
- installed pipeline configuration
- baked pipeline configuration
-
cached pipeline configuration
そのうちinstalledとcachedに関してはtk-coreのdescriptor
内で実装されているのが確認できます。
一方baked型はbootstrap内で実装されていました(ここにはcachedもあります)。
baked型は特殊なディスクリプターとのことで、定数を書き換えてカスタマイズしてしまうこともできるようになっています。
# name of the special baked descriptor that is used to
# avoid locally cache immutable bootstrap setups
# 不変のブートストラップセットアップをローカルにキャッシュすることを避けるために使用される
# 特別なbaked記述子の名前
Pipeline Toolkit使用時には、ローカルマシンにappやengineなどのキャッシュが適宜ダウンロードされ、柔軟な運用が可能な一方でいつのまにか各マシンのストレージをGB単位で圧迫していたりします。
/bootstrap/constants.py によると「ローカルにキャッシュすることを避けるため」とのことなので、baked型を利用することでストレージ圧迫を抑えられそうです。
コンフィグをベイクする方法として、 bake_config_scaffoldメソッド と bake_config.py の二つがあります。
bake_config_scaffoldメソッド
bootstrapの BakedConfiguration クラスにある bake_config_scaffoldメソッド を使ってコンフィグをベイクすることができます。
Shotgun Desktopで利用できるPython Console上では、下記のように利用することができます。
from sgtk.bootstrap.baked_configuration import BakedConfiguration
import sgtk
src_path = '/path/to/source_config'
config_descriptor = sgtk.descriptor.create_descriptor(
shotgun,
sgtk.descriptor.Descriptor.CONFIG,
{"type": "path", "path": src_path}
)
dst_path = '/path/to/baked_config'
BakedConfiguration.bake_config_scaffold(
dst_path,
shotgun,
None,
config_descriptor
)
src_pathにはtk-configのいずれかの構造を指定します。ここではShotgun Desktop内のtk-config-basicを指定しました。
ベイクされたコンフィグは下記のような構造になります。
src_pathとして図中の「v1.7.3」までを渡し、dst_pathは図中の「environment」を指定していたんですが、図の通り、「v1.7.3」以下がそのままコピーされるわけではなく「cache」「config」「install」各フォルダやtankコマンドが設置され、「config」以下に「v1.7.3」以下の構造が設置されました。
また、config/core以下にはpythonインタープリタを指定するための .cfg
ファイルも追加されています
なお、ベイクを終えた時点ではcacheフォルダは空です。
bake_config.py
コンフィグをベイクするためのヘルパースクリプトとして、bake_config.py(the Toolkit config baker)も提供されています。
/tk-core/developer/bake_config.py
python bake_config.py src_config dst_config
...
[INFO sgtk.ext.bake_config] Bake complete
...
[INFO sgtk.ext.bake_config] - All dependencies have been baked out into the bundle_cache folder
こちらはconfigフォルダの構造内に「bundle_cache」フォルダが追加され、env/*.ymlを分析して必要なapp、engineがキャッシュされます。「すべての依存関係はbundle_cacheフォルダに焼き出されて(baked out)います」とのことで、これ単体で完結するパッケージとして出力される感じです。
容量はそれなりに大きくなるので、env以下を精査して使わなさそうなディスクリプターが含まれないようにしておくのが良さそうです。
オプションでzip化したり、不要なバンドルを外したり、デバッグログ有効にしたりできます。
core以下にインタープリタ.cfgが追加されたりは無いようです。「cache」「install」やtankコマンドも無し。
また、各appやengine以下にあったtestsは除去されます。
違い
ドキュメントによると、installed pipeline configuration では、{PIPELINE_ROOT}/config
を参照するそうなので、bake_config_scaffoldによる「config」フォルダを持つ構造が利用できそうです。
cached / baked pipeline configurationでは、「バンドルが見つかった場所」が使われるようです。
ベイクしたコンフィグの呼び出しについては別途書きます。
Discussion