Ansible playbook 不复制文件,不出错

Par*_*ime 6 copy ansible ansible-playbook

我的 ansible playbook 只复制我指定的文件之一。该剧本运行完成,没有任何错误。如果我在剧本之外运行相同的命令,它将复制

我非常简单的剧本

---
- hosts: "dudes"
  vars:
    remote_user: root
tasks:
    - name: Installs logstash-forwarder rpm
      yum: name=logstash-forwarder state=present disable_gpg_check=yes

    - name: Add the certs init and etc files into place
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder.crt dest=/etc/pki/tls/certs/ owner=root group=root mode=644
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc dest=/etc/logstash-forwarder owner=root group=root mode=644 force=yes
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc-sysconfig dest=/etc/sysconfig/logstash-forwarder owner=root group=root mode=644 force=yes
      action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-init-d dest=/etc/init.d/logstash-forwarder mode=0755

    - name: add logstash forwarder to chkconfig
      command: chkconfig --add logstash-forwarder
      notify:
            - start logstash-forwarder
handlers:
    - name: start logstash-forwarder
      service: name=logstash-forwarder enabled=yes state=started
Run Code Online (Sandbox Code Playgroud)

我运行剧本

ansible-playbook -l doozy logstash-forwarder-dudes.yml 
Run Code Online (Sandbox Code Playgroud)

它完成没有任何错误,说所有任务都正常

唯一真正被复制的文件是最后一个文件,它是进入 init.d 的 logstash-forwarder。chkconfig add 似乎也有效

如果我在之前未复制的文件之一上使用 ansible -m(而不是剧本)运行命令,它将无误地复制它们

ansible -m copy -a "src=/etc/ansible/files/logstash-forwarder/logstash-forwarder.crt dest=/etc/pki/tls/certs/ owner=root group=root mode=644" doozy
Run Code Online (Sandbox Code Playgroud)

我不确定为什么文件最终没有被复制到我的剧本中的目标主机,但可以通过调用 ansible 复制模块来工作?

Pas*_*i H 2

Ansible 任务中不能有多个操作。

复制四个任务中的文件,它应该可以工作:

- name: Copy logstash-forwarder.crt
  copy: src=/etc/ansible/files/logstash-forwarder/logstash-forwarder.crt dest=/etc/pki/tls/certs/ owner=root group=root mode=644

- name: Copy /etc/logstash-forwarder
  copy: src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc dest=/etc/logstash-forwarder owner=root group=root mode=644 force=yes

- name: Copy /etc/sysconfig/logstash-forwarder
  copy: src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc-sysconfig dest=/etc/sysconfig/logstash-forwarder owner=root group=root mode=644 force=yes

- name: Copy /etc/init.d/logstash-forwarder
  copy: src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-init-d dest=/etc/init.d/logstash-forwarder mode=0755
Run Code Online (Sandbox Code Playgroud)

在代码中,我还使用了Action Shorthand并将action: module ...符号替换为module: .... 它不会改变代码的工作方式,而是调用模块的首选方式。