复制文件并使用ansible运行特定的命令?

我需要复制一个文件到很多的服务器,然后复制后执行一个特定的命令。 以下是我需要为每台机器执行的步骤。

  • 将文件复制到服务器。
  • 复制后执行命令( sudo restart tree )。
  • 睡几秒钟

对所有机器重复上述步骤。

所以我决定使用这个。 我能够复制文件,但我不知道如何执行命令后复制,然后睡觉。

我有一个hosts.txt文件,它将hosts.txt包含所有的机器。

我将login到machineA ,它将有我的function.py文件和hosts.txt文件,并从该机器我将运行下面的命令。

 david@machineA:~$ ansible -i hosts.txt -m copy -a "src=function.py dest=/treepot/function.py owner=goldy" -u david --ask-pass --sudo -U root --ask-sudo-pass all 

使用上面的命令,它会复制function.py文件,但我想要执行sudo restart tree命令以及在每个服务器上复制该文件后。 所以基本上

  • 将文件复制到machineB。
  • 然后执行命令(sudo重启树)
  • 之后睡几秒钟,然后做其他机器相同的事情

我可以用这样做吗? 我正在运行1.5.4。

我建议使用ansible-playbook。 这里是我的例子,复制一个码头图像到4个主机,然后加载它然后删除tar文件,也许它帮助

 cat /etc/ansible/hosts #------------centos----------- ip is ok(instead of hostname) [centos] centos-1 centos-2 centos-3 centos-4 [centos:vars] ansible_user="root" 

写一个剧本

 cat load-tar.yaml - hosts: centos tasks: - name: copy-image copy: src=./elasticsearch.tar dest=/root/elasticsearch.tar - name: start docker shell: systemctl start docker - name: load-image shell: docker load < /root/elasticsearch.tar - name: delete-file file: path="/root/elasticsearch.tar" state=absent 

并运行它

 ansible-playbook load-tar.yaml