使用 ansible 读取文件并作为命令执行每一行

使用 ansible 读取文件并作为命令执行每一行

我想为以下场景编写一个剧本:读取一个写入了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 模块 - 它们数量充足、易于学习且功能强大。

相关内容