LoginSignup
4
3

More than 5 years have passed since last update.

Digdagで変数を業務ワークフロー別に分けたい時のメモ

Last updated at Posted at 2018-08-10

目的

業務のワークフロー単位でdigファイルで利用する変数を集約して使いたかった時に対応したメモです。

以下のように、業務ごとにymlファイルを定義して起動時に渡していたのですが、

# 開発環境で実行する場合の業務1のワークフロー
digdag run domain01_workflow.dig -P settings/domain01/development.yml
# 開発環境で実行する場合の業務2のワークフロー
digdag run domain02_workflow.dig -P settings/domain02/development.yml

# 本番環境で実行する場合の業務1のワークフロー
digdag run domain01_workflow.dig -P settings/domain01/production.yml
# 本番環境で実行する場合の業務2のワークフロー
digdag run domain02_workflow.dig -P settings/domain02/production.yml

スクリプトの中でymlをロードしてdigファイルに変数を渡すようにしたメモになります。
こんな感じで起動したくて、試してみました。

# 開発環境で実行する場合の業務1のワークフロー
digdag run domain01_workflow.dig
# 開発環境で実行する場合の業務2のワークフロー
digdag run domain02_workflow.dig

# 本番環境で実行する場合の業務1のワークフロー
digdag run domain01_workflow.dig
# 本番環境で実行する場合の業務2のワークフロー
digdag run domain02_workflow.dig

ディレクトリ構成

とりあえずこんな感じです。

.
|-- domain01_workflow.dig
|-- script
|   `-- variables_aggregation.rb
`-- settings
    `-- domain01
        `-- development.yml

dig内で呼び出すymlをロードするスクリプト

script/variables_aggregation.rb
require 'yaml'

# 変数集約用のクラス
class VariablesAggregation
  ENVIRONMENT = ENV['MODE']

  # 業務1のワークフローで使う変数をセット
  def domain01
    path = "./settings/#{__method__}/#{ENVIRONMENT}.yml"
    set_variables(path)
  end

  # 業務2のワークフローで使う変数をセット
  def domain02
    path = "./settings/#{__method__}/#{ENVIRONMENT}.yml"
    set_variables(path)
  end

  private

  def set_variables(path)
    variables = YAML.load_file(path).map{ |k, v| [k.to_sym, v] }.to_h
    Digdag.env.store(variables)
  end
end

ymlファイルの定義

適当に以下のように作成しました。
環境ごとに作成するようにしています。

settings/domain01/development.yml
# 業務1で使う変数定義ファイル
MARIADB_HOST: 192.168.100.100
MARIADB_USER: 48hands

digファイルの定義と起動確認

こんな感じでymlをロードするスクリプトを呼び出すようにして、変数がdigファイルに引き渡されているか確認します。

domain01_workflow.dig
_export:
  rb:
    require: 'script/variables_aggregation'

+set_env:
  rb>: VariablesAggregation.domain01

+task1:
  echo>: My Setting variables: ${MARIADB_HOST} ${MARIADB_USER}

起動して以下のように実行できるか確認します。
今回は、開発用として実行したいので、環境変数MODEdevelopmentでセットしておきます。

export MODE=development

実行します。こんな感じで出力されるはず。

digdag run domain01_workflow.dig
2018-08-10 16:01:38 +0900: Digdag v0.9.27
...
My Setting variables 192.168.100.100 48hands
Success. Task state is saved at /tmp/hoge/.digdag/status/20180810T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3