4

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

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

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

所以我决定为此使用ansible。我可以复制文件,但我不确定如何在复制后执行命令然后休眠。

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

我将登录到machineA哪个将有我的function.py文件和hosts.txt文件,并从那台机器上运行下面的ansible命令。

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在每个服务器上复制该文件后执行命令。所以基本上

  • 将文件复制到机器 B.
  • 然后执行命令(sudo restart tree)
  • 在那之后睡眠几秒钟,然后对其他机器做同样的事情

我可以使用 ansible 来做到这一点吗?我正在运行 ansible 1.5.4。

4

1 回答 1

2

我建议使用 ansible-playbook。这是我的示例,将 docker 映像复制到 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
于 2017-01-18T04:24:46.753 回答