Ansible if else 使用 shell 脚本
Ansible if else using shell script
我正在使用以下 ansible 任务来根据用户的选择触发某些任务。
这是有效的:
tasks:
- name: Run python script for generating Repos Report
command: python GetRepos.py -o {{ org }} -p {{ pat }}
register: result
- debug: msg="{{result.stdout}}"
when: choice == "Repos"
- name: Run python script for generating projects Report
command: python Getprojects.py -o {{ org }} -p {{ pat }}
register: result
- debug: msg="{{result.stdout}}"
when: choice == "projects"
但我想在一个任务中使用带有 if else 语句的 shell 脚本 运行 如下:
tasks:
- name: run python script
shell: |
if [choice == "repos"]
then
cmd: python GetRepos.py -o {{ org }} -p {{ pat }}
elif [choice == "projects"]
then
cmd: python Getprojects.py -o {{ org }} -p {{ pat }}
fi
register: cmd_output
- debug: msg="{{cmd_output.stdout}}"
但这并没有执行任务;它只是没有错误地结束。
这是 shell 的正确语法吗?
如何使用 shell
模块在一个任务中完成这两个独立的工作任务?
shell 脚本中的 cmd:
会尝试将 运行 cmd:
作为命令,这是您不想要的。
此外,if 语句条件两边都需要空格 - 否则,它会尝试将 运行 [choice
作为命令,这也是您不想要的。
也更喜欢使用单等号而不是双等号,以使其更便携(远程主机可以有各种不同的 shell!)。
另一个问题是 shell 脚本中使用的 choice
只是一个文字字符串。您需要添加大括号 {{ }}
来插入值,就像剧本中其他地方所做的那样。
考虑到上述情况,以下内容应该适合您:
tasks:
- name: run python script
shell: |
if [ "{{ choice }}" = "repos" ]
then
python GetRepos.py -o "{{ org }}" -p "{{ pat }}"
elif [ "{{ choice }}" = "projects" ]
then
python Getprojects.py -o "{{ org }}" -p "{{ pat }}"
fi
register: cmd_output
- debug:
msg: "{{ cmd_output.stdout }}"
我正在使用以下 ansible 任务来根据用户的选择触发某些任务。
这是有效的:
tasks:
- name: Run python script for generating Repos Report
command: python GetRepos.py -o {{ org }} -p {{ pat }}
register: result
- debug: msg="{{result.stdout}}"
when: choice == "Repos"
- name: Run python script for generating projects Report
command: python Getprojects.py -o {{ org }} -p {{ pat }}
register: result
- debug: msg="{{result.stdout}}"
when: choice == "projects"
但我想在一个任务中使用带有 if else 语句的 shell 脚本 运行 如下:
tasks:
- name: run python script
shell: |
if [choice == "repos"]
then
cmd: python GetRepos.py -o {{ org }} -p {{ pat }}
elif [choice == "projects"]
then
cmd: python Getprojects.py -o {{ org }} -p {{ pat }}
fi
register: cmd_output
- debug: msg="{{cmd_output.stdout}}"
但这并没有执行任务;它只是没有错误地结束。
这是 shell 的正确语法吗?
如何使用 shell
模块在一个任务中完成这两个独立的工作任务?
shell 脚本中的 cmd:
会尝试将 运行 cmd:
作为命令,这是您不想要的。
此外,if 语句条件两边都需要空格 - 否则,它会尝试将 运行 [choice
作为命令,这也是您不想要的。
也更喜欢使用单等号而不是双等号,以使其更便携(远程主机可以有各种不同的 shell!)。
另一个问题是 shell 脚本中使用的 choice
只是一个文字字符串。您需要添加大括号 {{ }}
来插入值,就像剧本中其他地方所做的那样。
考虑到上述情况,以下内容应该适合您:
tasks:
- name: run python script
shell: |
if [ "{{ choice }}" = "repos" ]
then
python GetRepos.py -o "{{ org }}" -p "{{ pat }}"
elif [ "{{ choice }}" = "projects" ]
then
python Getprojects.py -o "{{ org }}" -p "{{ pat }}"
fi
register: cmd_output
- debug:
msg: "{{ cmd_output.stdout }}"