Ansible 如何复制以目标服务器名称命名的本地文件?

Ansible 如何复制以目标服务器名称命名的本地文件?,ansible,Ansible,您将如何解决ansible剧本中的这个小脚本 要复制的文件名为[ServerName].[扩展名] 目标服务器是ServeName for file in $(ls /var/tmp) do ServerName=$(echo $file | awk -F. 'NF{NF--};1' scp /var/tmp/$file $ServerName:/var/tmp/ scp /var/tmp/pkg.rpm $ServerName:/var/tmp/ ssh $Se

您将如何解决ansible剧本中的这个小脚本

要复制的文件名为
[ServerName].[扩展名]
目标服务器是
ServeName

for file in $(ls /var/tmp)
do
    ServerName=$(echo $file | awk -F. 'NF{NF--};1'
    scp /var/tmp/$file $ServerName:/var/tmp/
    scp /var/tmp/pkg.rpm $ServerName:/var/tmp/
    ssh $ServerName "cd /var/tmp; yum -y localinstall  pkg.rpm "
done
谢谢你的帮助

我们的想法是有这样的东西(当然是工作的)


如果要在yaml中编写此代码,则应使用
ansible\u主机名
,因为ansible已经通过提供了有关主机的多个信息

有关复制的详细信息,请参见。
安装过程中收集的所有事实都可用。

您是在尝试使用Ansible执行此脚本,还是在复制脚本并使用Ansible在目标服务器中执行?我想创建一个剧本,它可以执行脚本所执行的操作,而无需启动任何shell脚本。这样做的想法是(但这当然可以)name:main循环集_-fact:Servername:“{{item.split('/')[-1][:-5]}”copy:src:“{item}”dest:”/var/tmp/myfile.json”将_委托给:“{Servername}”和{fileglob“/var/temp/*json”ansible_hostname是目标主机的名称。在流中,我还不知道它的名称。“要复制的文件名为[ServerName].[extension]。目标服务器为ServeName。”“,这不是你的目标吗?你能说得更清楚吗?你想实现什么?ansible_hostname是目标主机的名称。在流中,我还不知道它的名称。在我们的配置服务器上,有一个文件系统,[ServerName].ext文件到达。当它存在时,必须将其复制到文件名中提到的服务器。我如何将ServerName(从文件名收集)分配给主机:?想法是这样做(但这当然会起作用)-名称:主循环集\u事实:服务器名:“{{item.split('/')[-1][:-5]}”copy:src:{item}}dest:“/var/tmp/myfile.json”委托给:{{Servername}”,并带有“{fileglob:-”/var/temp/*json”请在问题中添加格式化代码以提高可读性。
- name: main loop
  copy:
     src: "{{ item }}"
     dest: "/var/tmp/myfile.json"
- name: Install package
   yum:        
     name: "packageToInstall"        
     state: present

  delegate_to: "{{ item.split('/')[-1][:-5] }}"

  with_fileglob:
      - "/var/temp/*json"
- name: copying files
  copy:
    src: /mine/file.ext
    dest: /etc/{{ ansible_hostname }}.ext