2017-02-21 28 views
0

Я пытаюсь создать AMS AWS, используя как Packer, так и Ansible для обеспечения моего AMI. Я застрял в том, что могу скопировать некоторые локальные файлы в свой недавно созданный экземпляр EC2, используя Ansible. Я использую модуль copy в Ansible для этого. Вот что мой анзибль код выглядит следующим образом:Скопируйте локальный файл в удаленный экземпляр AWS EC2 с помощью 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 существует на моей локальной машине, с которой анзибль работает.

Для моего файла хоста у меня только 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" 
    } 
    ] 
} 

И вот весь мой анзибль файл:

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

@techraf Не на 100% уверен, почему он дает этот адрес, но я знаю, что это экземпляр EC2. Я запустил некоторые другие команды (например, создание пользователей), чтобы убедиться, что мой сценарий Ansible фактически выполняется на удаленном хосте, а не на моем локальном хосте. –

+0

Единственное, что я могу подумать, это то, что Packer просто берет мой Ansible-скрипт и выталкивает его обратно в новый чеканный экземпляр EC2, а затем запускает его. В этом случае, конечно, этот файл движется с ошибкой, так как он не существует. Я не уверен на 100%, хотя, поскольку я не совсем уверен, как это работает под обложками. –

ответ

2

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

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

Вы действительно хотите запустить playbook с помощью обычного Ansible provisioner.

+0

После того, как вы указали на очевидный «127.0.0.1» адрес, который я почему-то игнорировал, это меня осенило. Я предполагаю, что хочу использовать средство [Ansible Remote] (https://www.packer.io/docs/provisioners/ansible.html) ... Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^