我想为以下场景编写一个剧本:读取一个写入了linux命令的文本文件,逐个执行它们,如果任何命令无法执行则中止,如果我更正命令并再次运行剧本,它应该从它被中止的地方(而不是从头开始执行)
样本文件:sample.txt
echo "hello world"
df -h
free -m
mkdir /tmp/`hostname`_bkp
touch /tmp/`hostname`_bkp/file{1..5}
mvn -version
echo "directory and files created"
echo "Bye.!"
例如,如果mvn -version
执行失败,那么 ansible 应该中止。
如何通过ansible实现场景?
答案1
下面是一个示例 playbook,它执行许多简单的任务。
---
- hosts: localhost
tasks:
- name: say hi
shell: echo "Hello, World!"
- name: do df -h
shell: df -h
register: space
- name: show the output of df -h
debug: var=space
- name: do free -m
shell: free -m
register: memory
ignore_errors: yes
- name: show memory stats
debug: var=memory
- name: create /tmp/"hostname"_bkp
file: dest=/tmp/{{ ansible_nodename }}_bkp state=directory
- name: create files
file: dest=/tmp/{{ ansible_nodename }}_bkp/file{{ item }} state=touch
with_items:
- 1
- 2
- 3
- 4
- 5
它在所需位置创建目录和文件。您还可以设置所有权、权限,这更适合您的要求。
ansible_nodename
是一个 ansible 事实(变量),在游戏开始时收集。
您可以查看有关ansible文件模块的更多信息这里。请看看其他 ansible 模块 - 它们数量充足、易于学习且功能强大。