可以通过lftp上传ftp文件的播放

问题描述 投票:0回答:1

我使用ansible设置了ftp服务器,并通过从我的本地主机手动执行lftp验证了它的工作能力

当我执行ls时,我使用put上传了文件,并能够在ftp服务器中找到该文件。

我写了一部剧本,将文件上传到ftp服务器,并且总是返回成功。但是,我找不到我在游戏中上传的文件。然后我编辑了我的游戏以显示结果寄存器并发现了警告。见下文

---
- name: test ftp upload
  hosts: localhost
  tasks:
    - name: install lftp
      yum:
        name: lftp
    - name: upload file
      shell: >
        lftp ansible1.example.com<<EOF
        cd pub
        put /etc/hosts
        bye
        EOF
      register: result

    - name: display result
      debug:
        var: result

下面是我运行播放后得到的输出

PLAY [test ftp upload] ****************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************
ok: [localhost]

TASK [install lftp] *******************************************************************************************************************************************************************
ok: [localhost]

TASK [upload file] ********************************************************************************************************************************************************************
changed: [localhost]

TASK [display result] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "result": {
        "changed": true,
        "cmd": "lftp ansible1.example.com<<EOF cd pub put /etc/hosts bye EOF\n",
        "delta": "0:00:00.010150",
        "end": "2020-04-04 09:15:26.305530",
        "failed": false,
        "rc": 0,
        "start": "2020-04-04 09:15:26.295380",
        "stderr": "/bin/sh: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')",
        "stderr_lines": [
            "/bin/sh: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')"
        ],
        "stdout": "",
        "stdout_lines": []
    }
}

PLAY RECAP ****************************************************************************************************************************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

我无法理解警告,没有EOF部分,如果这是文件上传失败的原因。因为,我使用下面的shell脚本(与播放过程基本相同)来上传文件,并且效果很好。

lftp ansible1.example.com<<EOF
cd pub
put /etc/hosts
bye
EOF
ansible ftp eof lftp
1个回答
0
投票

您的Shell命令使用了错误的标量块样式指示符(请参见documentation)。

您需要将新行保留在您的Shell代码中。在这种情况下,您必须使用文字标量块指示符:|

您已经使用了折叠的标量块指示器(>),它将基本上将新行转换为空格(尽管它有些复杂,如this other source中所述)

以下内容应解决您当前的问题:

    - name: upload file
      shell: |
        lftp ansible1.example.com<<EOF
        cd pub
        put /etc/hosts
        bye
        EOF
      register: result
© www.soinside.com 2019 - 2024. All rights reserved.