在我的剧本中,每个剧本有多个shell任务,例如十个或更多。我想使用create shell arg来避免一遍又一遍地执行它们。
目前我有这个:
- name: Download sonar-runner
get_url:
url: http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar- runner-dist/2.4/sonar-runner-dist-2.4.zip
dest: /tmp
mode: 0755
- name: Unarchive
unarchive:
src: /tmp/sonar-runner-dist-2.4.zip
dest: /opt/tools/sonar-runner-2.4
- name: Sym link
shell: ln -s sonar-runner-2.4 sonar-runner
args:
creates: ~/.ansible/sonar-runner.task/step.3
- name: Configure profile
shell: |
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
args:
creates: ~/.ansible/sonar-runner.task/step.4
有什么方法可以使用变量来实现。我在想这样的事情:
- name: Sym link
shell: ln -s sonar-runner-2.4 sonar-runner
args:
creates: ~/.ansible/{{playbook_name}}/{{task_index}}
- name: Configure profile
shell: |
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
args:
creates: ~/.ansible/{{playbook_name}}/{{task_index}}
有没有办法做到这一点?我想念什么吗?还是不是Ansible的工作方式?
答案 0 :(得分:0)
有没有办法做到这一点?我想念什么吗?还是不是Ansible的工作方式?
是的,是的,没有:-)
有什么办法吗?
shell:
和command:
支持内联creates=
声明,因此您可以将所有这些声明放在一个块中(因此,它很可能是变量或yaml)锚):
- shell: |
creates=/etc/profile.d/maven.sh
echo 'hello' > /etc/profile.d/maven.sh
- command: |
creates=/etc/profile.d/maven.sh
cp /something /etc/profile.d/maven.sh
但是,我只是告诉您,为您提供信息,以及在以下情况下由于以下原因而导致这些后续步骤无法正常工作的情况:
我想念什么吗?
您希望尽可能使用内置的幂等性,以使您摆脱手动进行“必须执行此任务”簿记的工作。因此:
- file:
src: sonar-runner-2.4
dest: sonar-runner
state: link
- copy:
dest: /etc/profile.d/maven.sh
content: |
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export M2_HOME=/opt/maven/apache-maven-3.5.3
export PATH=${M2_HOME}/bin:${PATH}
当您尝试手动使用ln
时,ansible没发牢骚让我感到非常惊讶,因为它了解常见的Shell命令,并会带您切换到内置模块file:
< / p>
答案 1 :(得分:0)
好吧,最后我设法通过混合使用变量,事实和角色来解决这个问题。
testfacts.yml剧本
FOREIGN KEY (
角色/测试事实/任务/main.yml
)
REFERENCES
角色/测试事实/任务/task1.yml
.
roles / common / tasks / set_facts.yml
(
库存/产品/group_vars/group_vars.yml
---
- hosts: all
vars:
current_role: 'testfacts'
roles:
- testfacts