2016-03-28 9 views
1

私はterraform用のPythonラッパーを持っていますが、terraformは引き渡された引数をどうにか誤って解釈します。任意のアイデアを回避する方法は?terraformがpythonのサブプロセスから実行されたときにargsが '='で分割される理由

#!/usr/bin/env python 
import subprocess 

args_echo = ["/bin/echo", "/home/vmindru/proj/tera/terraform", 
      "plan", 
      "-var foo=bar"] 
args_terr = ["/home/vmindru/proj/tera/terraform", 
      "plan", 
      "-no-color", 
      "-var foo=bar"] 
echo = subprocess.call(args_echo) 
terr = subprocess.call(args_terr) 

print echo, terr 

__Note:__お尻は、単純なエコー(またはバイナリ他)を実行しているとき、それは正しく、すべての引数を解釈するの下に観察し、何らかの理由でテラフォームが-var FOOに引数-var FOO =バーを分割することを決定し、おそらく完全な信用が質問コメントでその答えを@nightuserに行くものの、将来的に簡単に発見するために、このメモを作る

[email protected]:/tmp/test2$ ./test.py 
/home/vmindru/proj/tera/terraform plan -var foo=bar 
flag provided but not defined: -var foo 
Usage: terraform plan [options] [dir] 

    Generates an execution plan for Terraform. 

    This execution plan can be reviewed prior to running apply to get a 
    sense for what Terraform will do. Optionally, the plan can be saved to 
    a Terraform plan file, and apply can take this plan file to execute 
    this plan exactly. 

Options: 

    -backup=path  Path to backup the existing state file before 
         modifying. Defaults to the "-state-out" path with 
         ".backup" extension. Set to "-" to disable backup. 

    -destroy   If set, a plan will be generated to destroy all resources 
         managed by the given configuration and state. 

    -detailed-exitcode Return detailed exit codes when the command exits. This 
         will change the meaning of exit codes to: 
         0 - Succeeded, diff is empty (no changes) 
         1 - Errored 
         2 - Succeeded, there is a diff 

    -input=true   Ask for input for variables if not directly set. 

    -module-depth=n  Specifies the depth of modules to show in the output. 
         This does not affect the plan itself, only the output 
         shown. By default, this is -1, which will expand all. 

    -no-color   If specified, output won't contain any color. 

    -out=path   Write a plan file to the given path. This can be used as 
         input to the "apply" command. 

    -parallelism=n  Limit the number of concurrent operations. Defaults to 10. 

    -refresh=true  Update state prior to checking for differences. 

    -state=statefile Path to a Terraform state file to use to look 
         up Terraform-managed resources. By default it will 
         use the state "terraform.tfstate" if it exists. 

    -target=resource Resource to target. Operation will be limited to this 
         resource and its dependencies. This flag can be used 
         multiple times. 

    -var 'foo=bar'  Set a variable in the Terraform configuration. This 
         flag can be set multiple times. 

    -var-file=foo  Set variables in the Terraform configuration from 
         a file. If "terraform.tfvars" is present, it will be 
         automatically loaded if this flag is not specified. 
0 1 
[email protected]:/tmp/test2$ 
+0

あなたは '-foo = bar' –

+3

ことになっていないよろしいですが、あなたは"、 ' "-var" のようなものを試してみました'foo = bar' "'? – nightuser

+0

nightuserが指摘しているように、上記の出力にTFが明示的に記載されている場合、var定義を引用符で囲む必要があります。 – ydaetskcoR

答えて

2

バー。

関数Python subprocess.call()関数は、引数に空白がないことを期待しており、空白はリスト内の別々の要素である必要があります。この場合

args_echo = ["/bin/echo", "/home/vmindru/proj/tera/terraform", 
      "plan", 
      "-var foo=bar"] 

次のようになります。

args_echo = ["/bin/echo", "/home/vmindru/proj/tera/terraform", 
      "plan", 
      "-var", 
      "foo=bar"] 
関連する問題