Code Monkey home page Code Monkey logo

firefly-packer's Introduction

firefly-packer

Build Status

Packer scripts for building cloud-automatation-friendly vSRX (aka Firefly Perimeter) images

Usage

Please see the Packer documentation if you plan on building these images yourself!

  1. Grab the latest packer 0.7.5 or newer.
  2. Clone this repo, e.g. git clone https://github.com/JNPRAutomate/firefly-packer
  3. Procure Firefly images, and place in images/firefly/download in the firefly-packer git directory
  4. Run the image-prep.sh script to prepare the images.
  5. Modify the templates for your environment, if desired
  6. packer validate <templatename> will validate the JSON templates provided. If any of the source VMs, files, scripts, or automation inputs are missing, validate will tell you which ones (in addition to JSON syntax)
  7. packer build <templatename> will build the VMs for VMware and VirtualBox. You need both installed, or you need to specify -only virtualbox-ovf or -only vmware-vmx
  8. The finished VM boxes will be placed in builds/<provider>

PROTIP:

Or... you can make use of the VMs at Atlas

VMs

These vSRX boxes are experimental, but should work fine for all of your lab and testing needs. They also serve as a preview of how OpenStack or VMware vSphere deployment tools could work (same Vagrant commands).

VM Settings

Since these boxes are designed to use NAT networks with port forwarding for access, their administrative plane will not be exposed, unless you choose to expose it. It is recommended that you change these defaults in exposed lab environments, or build your own VMs using the firefly-packer project and packer.

  • root password is set to Juniper
  • vagrant account uses the Vagrant project's insecure public key, but will automatically change this to a unique key for your install. You can also specify your own key, but since the key is auto-generated, we recommend using that
  • a single interface is enabled, which maps to the default VMware or VirtualBox NAT network
  • this interface is a member of the functional-zone management, with host-inbound-traffic system services all and host-inbound-traffic protocols all for ge-0/0/0.0

Notes

  • vagrant plugin add vagrant-junos will install a guest plugin for Junos
  • vagrant plugin add vagrant-host-shell is a requirement for the
  • The most common issues are centered around host and hypervisor issues:
    • disable or limit host firewall function to accommodate virtual networks and port forwarding
    • disconnect from VPNs, and have a good understanding of split tunneling and host routing, and how it affects VMs in your environment
    • VBoxManage list vms will show running VMs and orphans. If you're using VirtualBox, it's recommended that you understand as much as possible about VBoxManage, since it will allow for further image + network configuration
    • If you're using VMware, vmrun list will list all running VMs, and it's recommended that you understand what vmrun commands are at your disposal

##Additional Documentation

##Issues

Please open any issues on the firefly-packer github issue tracker. Please make sure you've checked out the common issues before opening a ticket.

##TODO Look into performance tuning options

Setting kern.hz in /boot/loader.conf. Currently set to 200, reducing latency it should be set to 1000. https://www.freebsd.org/doc/handbook/virtualization-guest.html

On VTY to Flowd: set i386 ft_sleep disable

firefly-packer's People

Contributors

robwc avatar routelastresort avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

firefly-packer's Issues

Templating issues

VAGRANTFILE_API_VERSION = "2" set twice (template + default Vagrantfile)

KVM support

Pending Packer additions for qemu-cqow2 builder (currently only supports ISO)

Cross-platform VMX logic

Right now, the only solutions are making the user change the .VMX file location, unless:

a) ovftool will behave properly
b) Packer supports vmware-ovf builder
c) the vmware-vmx portion allows for a little templating

For now, you may have to manually change the source path for VMware VMX in the templates

Set vidconsole in /boot/loader.conf

modify /boot/loader.conf:
# console="comconsole" to console="vidconsole"

Script edit AND VBoxManage modifyvm to remove needs for Packer boot, e.g.:

["modifyvm", "{{.Name}}", "--uart1", "0x3F8", "4"],
["modifyvm", "{{.Name}}", "--uartmode1", "disconnected"]

allow the machine to boot with vidconsole for initial debugging, and then can be removed from any .VDI or .box artifacts, once finished (and the machine properly boots with vidconsole).

This is required for sufficient serial console and NETCONF over Serial testing.

Set default password for vagrant user?

When working with network automation scripts, sometimes key-based authentication is not available (napalm-junos, etc). Setting a default password for the vagrant user (who drops directly into cli instead of a shell) would make it easier to setup lab/testing environments for these tools.

web front-end

Request from Juniper APAC Tech Summit attendee - Rails or Sinatra

Vagrant Junos guest plugin needed

Requires modification to Vagrant core - implement ASAP.

Junos-centric commands or non-bash shell???

  • OS detection, e.g. machine.communicate.test("uname -s | grep 'JUNOS'", shell: 'sh')
  • change_host_name - test, set, commit
  • configure_networks - logical ge-0/0/x.0 only, commit... hmmm
  • halt - request system power-off
  • insert_public_key - modify user on Junos side

FAQ

e.g. if you're using virtualbox & vmware, may God have mercy on your soul

Junos provisioner

  • load Junos configs
  • with templating?
  • orchestration w/VM/cloud interfaces would involve config outside Junos template

VirtualBox build errors

VirtualBox boxes can be successfully built by a manual process, but this is failing - most likely an error with the packer fork at this point. Should be fixed shortly.

connection refused

After assiging to nat network manual after ff is up via vagrant up the attempt to ssh is refused. Never connects.

Travis build failing due to Packer 0.6.1

Upload linux binaries for Packer with fixes for vmware-vmx and virtualbox-ovf to s3, and updated .travis.yml script

Also, cache .bin in travis

Build failing until then...

Unable to SSH to Vagrant Box X47-D10.4

This is on Ubuntu 14.04 with VirtualBox 4.3.10 and Vagrant 1.6.5.

After downloading, initializing, and starting Vagrant box for image X47-D10.4, I am unable to SSH to the box. Waited approximately 8 minutes before giving up. See below.

Vagrant Output

tyler:boxes/ > vagrant up                                                                                                                     [11:21:13]
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'juniper/ffp-12.1X47-D10.4' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'juniper/ffp-12.1X47-D10.4'
    default: URL: https://vagrantcloud.com/juniper/ffp-12.1X47-D10.4
==> default: Adding box 'juniper/ffp-12.1X47-D10.4' (v0.1.4) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/juniper/boxes/ffp-12.1X47-D10.4/versions/2/providers/virtualbox.box
==> default: Successfully added box 'juniper/ffp-12.1X47-D10.4' (v0.1.4) for 'virtualbox'!
==> default: Importing base box 'juniper/ffp-12.1X47-D10.4'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'juniper/ffp-12.1X47-D10.4' is up to date...
==> default: Setting the name of the VM: boxes_default_1412792564494_18731
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: root
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.
tyler:boxes/ >

Non-Verbose

tyler:boxes/ > telnet 127.0.0.1 2222                                                                                                          [11:28:05]
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^]c

telnet> c
Connection closed.
tyler:boxes/ > ssh -p2222 [email protected]                                                                                                      [11:28:17]
ssh_exchange_identification: read: Connection reset by peer
tyler:boxes/ > ssh -p2222 [email protected]                                                                                                   [11:29:53]
ssh_exchange_identification: read: Connection reset by peer
tyler:boxes/ >                                                                                                                                [11:31:34]

Verbose

tyler:boxes/ > ssh -vvv -p2222 [email protected]                                                                                              [11:31:34]
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 2222.
debug1: Connection established.
debug1: identity file /home/tyler/.ssh/id_rsa type -1
debug1: identity file /home/tyler/.ssh/id_rsa-cert type -1
debug1: identity file /home/tyler/.ssh/id_dsa type -1
debug1: identity file /home/tyler/.ssh/id_dsa-cert type -1
debug1: identity file /home/tyler/.ssh/id_ecdsa type -1
debug1: identity file /home/tyler/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tyler/.ssh/id_ed25519 type -1
debug1: identity file /home/tyler/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
ssh_exchange_identification: read: Connection reset by peer
tyler:boxes/ >                                                                                                                                [11:33:36]

/etc/ssh/ssh_config

tyler:boxes/ > cat /etc/ssh/ssh_config | egrep -v "^#|^$"                                                                                     [11:33:28]
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no
tyler:boxes/ >                                                                                                                                [11:33:52]

Host OS

tyler:boxes/ > cat /etc/lsb-release                                                                                                           [11:34:31]
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
tyler:boxes/ > uname -a                                                                                                                       [11:34:33]
Linux 02144 3.13.0-36-generic #63-Ubuntu SMP Wed Sep 3 21:30:07 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
tyler:boxes/ >                                                                                                                                [11:34:34]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.