Ansible:通过 yml 剧本更改脚本值(.sh 文件)
Ansible: Change script value (.sh file) via yml playbook
例如,我的剧本的相关部分如下所示:
tasks:
- name: test
script: ../test.sh
...
对于我的 test.sh 有这样一行代码将执行 python 脚本:
python run.py --inputvar hello
有没有办法将 .sh 文件中的 inputvar 值从“hello”更改为剧本中的其他内容?
编辑:
感谢@seshadri_c 对此的帮助。猜猜这个问题应该被标记在 shell 脚本下。
在 shell 脚本中解析参数的最简单方法是使用位置参数 - </code>、<code>
等
给定一个 test.sh
脚本:
#!/bin/bash
python run.py --inputvar
并且运行将其设置为:
/bin/bash test.sh arg1
会将 </code> 的值作为 <code>--inputvar arg1
传递给 run.py
。
来自 Ansible 任务的 运行 同样的事情:
tasks:
- name: test
script: ../test.sh arg1
还有更多选择。
- 第一个可能是 lineinfile,例如下面的任务是幂等的
- lineinfile:
path: test.sh
regex: '^python run.py --inputvar (.*)$'
line: 'python run.py --inputvar {{ my_var|default("hello") }}'
给予
TASK [lineinfile] *******************************************************
ok: [localhost]
如果定义变量my_var(参见Variable precedence: Where should I put a variable?)
my_var: hello world
任务将更改文件中的行。 (运行 带有选项的剧本 --check --diff)
TASK [lineinfile] ********************************************************
--- before: test.sh (content)
+++ after: test.sh (content)
@@ -1,3 +1,3 @@
#!/usr/bin/sh
-python run.py --inputvar hello
+python run.py --inputvar hello world
changed: [localhost]
下一个选项可能是 template,例如模板 test.sh.j2 和下面的任务给出相同的结果
shell> cat test.sh.j2
#!/usr/bin/sh
python run.py --inputvar {{ my_var|default("hello") }}
- template:
src: test.sh.j2
dest: test.sh
例如,我的剧本的相关部分如下所示:
tasks:
- name: test
script: ../test.sh
...
对于我的 test.sh 有这样一行代码将执行 python 脚本:
python run.py --inputvar hello
有没有办法将 .sh 文件中的 inputvar 值从“hello”更改为剧本中的其他内容?
编辑: 感谢@seshadri_c 对此的帮助。猜猜这个问题应该被标记在 shell 脚本下。
在 shell 脚本中解析参数的最简单方法是使用位置参数 - </code>、<code>
等
给定一个 test.sh
脚本:
#!/bin/bash
python run.py --inputvar
并且运行将其设置为:
/bin/bash test.sh arg1
会将 </code> 的值作为 <code>--inputvar arg1
传递给 run.py
。
来自 Ansible 任务的 运行 同样的事情:
tasks:
- name: test
script: ../test.sh arg1
还有更多选择。
- 第一个可能是 lineinfile,例如下面的任务是幂等的
- lineinfile:
path: test.sh
regex: '^python run.py --inputvar (.*)$'
line: 'python run.py --inputvar {{ my_var|default("hello") }}'
给予
TASK [lineinfile] *******************************************************
ok: [localhost]
如果定义变量my_var(参见Variable precedence: Where should I put a variable?)
my_var: hello world
任务将更改文件中的行。 (运行 带有选项的剧本 --check --diff)
TASK [lineinfile] ********************************************************
--- before: test.sh (content)
+++ after: test.sh (content)
@@ -1,3 +1,3 @@
#!/usr/bin/sh
-python run.py --inputvar hello
+python run.py --inputvar hello world
changed: [localhost]
下一个选项可能是 template,例如模板 test.sh.j2 和下面的任务给出相同的结果
shell> cat test.sh.j2
#!/usr/bin/sh
python run.py --inputvar {{ my_var|default("hello") }}
- template:
src: test.sh.j2
dest: test.sh