Скопируйте локальный файл в удаленный экземпляр AWS EC2 с помощью Ansible

Я пытаюсь создать AMI AWS, используя Packer и Ansible для подготовки своего AMI. Я застреваю из-за того, что могу скопировать некоторые локальные файлы в мой недавно развернутый экземпляр EC2 с помощью Ansible. Для этого я использую модуль copy в Ansible. Вот как выглядит мой код на Ansible:

    - name: Testing copy of the local remote file
      copy:
        src: /tmp/test.test
        dest: /tmp

Вот ошибка, которую я получаю:

 amazon-ebs: TASK [Testing copy of the local remote file] ***********************************

 amazon-ebs: fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '/tmp/test.test' in expected paths."}

Я убедился, что файл /tmp/test.test существует на моем локальном компьютере, с которого запущен Ansible.

Для моего хост-файла у меня просто localhost, поскольку упаковщик сообщает Ansible все, что ему нужно знать о том, где запускать команды Ansible.

Я не уверен, что делать дальше и как правильно отладить эту ошибку, поэтому надеюсь на небольшую помощь.

Вот как выглядит мой сценарий Packer:

  {
  "variables": {
    "aws_access_key": "{{env `access_key`}}",
    "aws_secret_key": "{{env `secret_key`}}"
  },
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `aws_access_key`}}",
    "secret_key": "{{user `aws_secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-116d857a",
    "instance_type": "t2.micro",
    "ssh_username": "admin",
    "ami_name": "generic_jenkins_image",
    "ami_description": "Testing AMI building with Packer",
    "vpc_id": "xxxxxxxx",
    "subnet_id": "xxxxxxxx",
    "associate_public_ip_address": "true",
    "tags": {"Environment" : "Dev", "Product": "SharedOperations"}
  }],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "sudo rm -f /var/lib/dpkg/lock",
        "sudo apt-get update -y --fix-missing",
        "sudo apt-get -y install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev gcc build-essential python-pip",
        "sudo pip install ansible"
      ]
    },
    {
      "type": "ansible-local",
      "playbook_file": "ansible/main.yml"
    }
  ]
}

А вот и весь мой файл Ansible:

---
- hosts: all
  sudo: yes
  tasks:
    - name: Testing copy of the local remote file
      copy:
        src: /tmp/test.test
        dest: /tmp

person Nick Bitzer    schedule 21.02.2017    source источник
comment
@techraf Не уверен на 100%, почему он дает этот адрес, но я знаю, что это экземпляр EC2. Я выполнил некоторые другие команды (например, создание пользователя), чтобы убедиться, что мой сценарий Ansible действительно выполняется на удаленном хосте, а не на моем локальном хосте.   -  person Nick Bitzer    schedule 21.02.2017
comment
Единственное, что я могу придумать, это то, что Пакер просто берет мой скрипт Ansible и отправляет его во вновь созданный экземпляр EC2, а затем запускает его. В этом случае, конечно, это перемещение файла не удастся, поскольку его не существует. Я не уверен на 100% в этом, так как я не совсем уверен, как это работает под прикрытием.   -  person Nick Bitzer    schedule 21.02.2017


Ответы (1)


Вы используете ansible-local provisioner, который запускает сценарии непосредственно на целевых объектах. («местный» в продуктах HashiCorp, таких как Vagrant, Packet используется для описания точки зрения подготовленной машины).

У цели нет файла /tmp/test.test, поэтому вы получаете сообщение об ошибке.

На самом деле вы хотите запустить playbook, используя обычный Ansible Provider.

person techraf    schedule 21.02.2017
comment
После того, как вы указали очевидный 127.0.0.1 адрес, который я по какой-то причине игнорировал, меня осенило. Я предполагаю, что хочу использовать провайдер Ansible Remote ... Спасибо ! - person Nick Bitzer; 21.02.2017