Pues hoy traigo un problema que me surgió hoy mientras estaba trabajando, que pasa si queremos hacer una ami de CoreOS en AWS y queremos instalar cosas.

Como todos sabéis CoreOS es un sistema que no permite la instalación de software adicional solo utilizar ciertas cosas como docker.(ami me encanta CoreOS)

Pues bien esto me paso por que necesitaba crear una ami con el agente de ECS pero claro no lo quería hacer a mano obviamente.

Pues di con la solución, pues bien pude instalar pypy y poder lanzar ansible con packer para instalar todo lo necesario del agente de ECS

Primero para instalar pypy utilice esto.

#!/bin/bash
sudo wget https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.6.0-linux64.tar.bz2 -P /opt
sudo tar -xjf /opt/pypy2-v5.6.0-linux64.tar.bz2 -C /opt
sudo mv /opt/pypy2-v5.6.0-linux64 /opt/pypy
sudo ln -sf /lib64/libncurses.so.5.9 /opt/pypy/bin/libtinfo.so.5

Esto instala pypy que es un mini python, muy necesario para poder gestionar ansible.

Luego debemos hacer algunos cambios en packer, ya que CoreOS no se comporta como centos o debian.

{
  "provisioners":[{
    "type":"shell",
    "script":"scripts/pyp.sh"
  },
  {
    "type":"ansible",
    "playbook_file": "ansible/playbooks/provision/{{user `playbook`}}",
    "ansible_env_vars":[
      "ANSIBLE_SCP_IF_SSH=True",
      "ANSIBLE_HOST_KEY_CHECKING=False"
    ]
  }],
  "builders":[{
    "type": "amazon-ebs",
    "region": "eu-west-1",
    "source_ami": "{{user `source_ami`}}",
    "instance_type": "t2.micro",
    "ami_name": "{{user `ami_name`}}-{{isotime \"20060102\"}}",
    "ami_description": "{{user `ami_name`}}-{{isotime \"20060102\"}}",
    "associate_public_ip_address": true,
    "force_deregister":true,
    "iam_instance_profile":"{{user `iam_role`}}",
    "vpc_id": "{{user `vpc_id`}}",
    "subnet_id": "{{user `subnet_id`}}",
    "security_group_id": "{{user `security_group`}}",
    "communicator": "ssh",
    "ssh_username": "{{user `user`}}",
    "ssh_private_ip":   false,
    "ssh_keypair_name": "xx",
    "ssh_private_key_file" : "xx.pem",
    "ssh_file_transfer_method": "scp",
    "ssh_pty" : false,
    "tags": {
      "Release": "{{timestamp}}",
      "Name":"{{user `ami_name`}}-{{isotime \"20060102\"}}"
    }
}]
}

También debemos de cambiar el interprete de python en ansible para eso añadimos lo siguiente al playbook.

vars:
    ansible_python_interpreter: "/opt/pypy/bin/pypy"

Pues bien haciendo esto ya podemos utilizar ansible para aprovisionar CoreOS y poder con packer hacer nuestra ami.

Deja un comentario