exastro-suite / it-automation

Exastro IT Automation
Apache License 2.0
18 stars 32 forks source link

【Ansible-Pioneer】具体値がnullの場合にwhenに指定した条件分岐を正しく判断できない #2074

Open takum-yamada opened 1 year ago

takum-yamada commented 1 year ago

詳細

Pioneerのcommandモジュールでwhenを指定してVAR変数やregister変数を評価するとき、値がnullの場合に判定結果が全て「No Match」となる。

たとえば、何かの変数の値がnullである場合に作業を実行する、というような対話ファイルを作成できない。

意図したとおりに動作しない対話ファイルの例

  # VAR_some_valueの値がnullである(Null文字にマッチした)場合に作業実行
  - command: 'echo "VAR_some_value is empty."'
    prompt: '.*# '
    when:
      - '{{ VAR_some_value }} match(\0) '
  # VAR_some_valueの値が空である(値が1文字以上でない)場合に作業実行
  - command: 'echo "VAR_some_value is empty."'
    prompt: '.*# '
    when:
      - '{{ VAR_some_value }} no match(.+)'

原因?

pioneer_module.py3009行目以降のwhen_check関数を見たところ、whenに指定した判定文の左辺が空である場合に1(=条件に合致しない、の意?)を返す仕様となっている。

pioneer_module.py((3236行目) )

        # ' match '前の文字列を抽出
        tmp5 = when_cmd[:int(tmp4)]
        tmp5 = tmp5.lstrip()
        tmp5 = tmp5.rstrip()

        if len(tmp5) == 0:

          # 空の場合、1を返却する
          return 1

期待する動作

具体的な実装の案などはないのですが、値がnullの場合に作業を実行するような対話ファイルが作成可能になるとありがたいです。