使用 ansible 复制文件和 运行 特定命令?
copy file and run a particular command using ansible?
我需要将一个文件复制到很多服务器中,然后在复制后执行特定命令。以下是我需要为每台机器执行的步骤。
- 将文件复制到服务器。
- 复制后执行命令(
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 来做到这一点吗?我是 运行ning ansible 1.5.4.
我建议使用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
我需要将一个文件复制到很多服务器中,然后在复制后执行特定命令。以下是我需要为每台机器执行的步骤。
- 将文件复制到服务器。
- 复制后执行命令(
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 来做到这一点吗?我是 运行ning ansible 1.5.4.
我建议使用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