Ошибка при использовании kubectl copy с ansible

#kubernetes #ansible #kubectl

#kubernetes #ansible #kubectl

Вопрос:

Я пытаюсь скопировать несколько файлов с удаленного хоста на запущенные модули.

Эта команда работает при непосредственном запуске на удаленном хосте.

 kubectl cp /etc/passwd bus-service/ssh-jumphost-6954f877bf-p5fmq:/etc/passwd_test
  

Но при использовании оболочки Ansible или командного модуля я столкнулся с этой ошибкой.

Но при использовании Ansible

     - name: Copy commands
      shell: "kubectl cp {{ item }} baas-service/{{ jumphost.stdout_lines }}:{{ item }}"
      with_items:
        - { '/etc/master.passwd' }
        - { '/etc/passwd' }
        - { '/etc/group' }
  

Я получаю сообщение об ошибке.

 failed: [gngqnc014c] (item={u'/etc/master.passwd': None}) => {
    "changed": true, 
    "cmd": "kubectl cp {u'/etc/master.passwd': None}bus-service/[u'ssh-jumphost-6954f877bf-p5fmq', u'ssh-jumphost-6954f877bf-twg7j', u'ssh-jumphost-6954f877bf-xrmhs']:{u'/etc/master.passwd': None}", 
    "delta": "0:00:00.070410", 
    "end": "2019-04-08 16:04:49.551694", 
    "invocation": {
        "module_args": {
            "_raw_params": "kubectl cp {u'/etc/master.passwd': None}bus-service/[u'ssh-jumphost-6954f877bf-p5fmq', u'ssh-jumphost-6954f877bf-twg7j', u'ssh-jumphost-6954f877bf-xrmhs']:{u'/etc/master.passwd': None}", 
            "_uses_shell": true, 
            "argv": null, 
            "chdir": null, 
            "creates": null, 
            "executable": null, 
            "removes": null, 
            "stdin": null, 
            "warn": true
        }
    }, 
    "item": {
        "/etc/master.passwd": null
    }, 
    "msg": "non-zero return code", 
    "rc": 1, 
    "start": "2019-04-08 16:04:49.481284", 
    "stderr": "error: Filespec must match the canonical format: [[namespace/]pod:]file/path", 
    "stderr_lines": [
        "error: Filespec must match the canonical format: [[namespace/]pod:]file/path"
    ], 
    "stdout": "", 
    "stdout_lines": []
}
  

Комментарии:

1. ваш jumphost.stdout_lines становится массивом [u’ssh-jumphost-6954f877bf-p5fmq’, u’ssh-jumphost-6954f877bf-twg7j’, u’ssh-jumphost-6954f877bf-xrmhs’]

2. О боже ..! Понял… Спасибо вам за то, что указали на это…

3. Кроме того, ваше использование - {} означает, что это список объектов, а не список строк, что объясняет, почему вы видите kubectl cp {u'/etc/master.passwd': None} в выходных данных; вы хотите просто - /etc/master.passwd вместо