I first heard of Fig when I read about Docker acquiring Orchard, a container hosting service, back in July. Last week I finally got to read a little more about it and it just so happens it is the missing piece of the puzzle in a couple of projects that I am working on right now!
Tom Hollingsworth wrote a great post on whether or not we need to redefine "Open". My response was too long for a comment, so here it is!
I first heard of Fig when I read about Docker acquiring Orchard, a container hosting service, back in July. Last week I finally got to read a little more about it and it just so happens it is the missing piece of the puzzle in a couple of projects that I am working on right now!
The best way I would describe Fig is like Vagrant for Docker containers. If you don't know what Vagrant is, or aren't using it then you are missing out!
Fig lets you bring up and tear down docker containers (single or multiple) with a simple command.
To do this, you express the desired configuration in a YAML file, fig.yml
.
On OSX, you'll need to have an accessible Docker environment. The easiest way to do this is with Homebrew and boot2docker
brew install docker
brew install boot2docker
boot2docker init
boot2docker start
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375
# Install Fig
pip install fig
If you don't have Python and/or pip
installed you may want to install the fig binary
Let's say you are doing some integration Continue reading
I first heard of Fig when I read about Docker acquiring Orchard, a container hosting service, back in July. Last week I finally got to read a little more about it and it just so happens it is the missing piece of the puzzle in a couple of projects that I am working on right now!
As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? Well OpenStack requires some limited L3 capabilities and we think that we can handle those in a distributed router.
My test topology looks like this:
We have a host in an external network 172.16.1.0/24
, one host in an internal network 10.10.10.0/24
and two hosts in another internal network 10.10.20.0/24
.
As such, The hosts in the 10.x.x.x
range should be able to speak to each other, but should not be able to speak to external hosts.
The host 10.10.10.2
has a floating IP of 172.16.1.10
and should be reachable on this address from the external 172.16.1.0/24
network. To do this, we'll use DNAT for traffic from 172.16.1.2 -> 172.16.1.10
and SNAT for traffic back from 10.10.10.2 -> 172.16.1.2
If you'd like to recreate this topology you can checkout the OpenDaylight OVSDB project source on GitHub and:
vagrant up mininet
vagrant ssh mininet
cd /vagrant/resources/mininet
sudo mn --custom Continue reading
As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? Well OpenStack requires some limited L3 capabilities and we think that we can handle those in a distributed router.
As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? Well OpenStack requires some limited L3 capabilities and we think that we can handle those in a distributed router.
The current version of Maven in Homebrew at the time of writing is 3.2.2
This is great... unless one of the plugins in your project doesn't support it and then you have to downgrade :(
Fortunately it's not too painful
brew uninstall maven
brew tap homebrew/versions
brew install maven30
@dave-tucker
The current version of Maven in Homebrew at the time of writing is 3.2.2
This is great... unless one of the plugins in your project doesn't support it and then you have to downgrade :(
Fortunately it's not too painful
brew uninstall maven
brew tap homebrew/versions
brew install …
The current version of Maven in Homebrew at the time of writing is 3.2.2
This is great... unless one of the plugins in your project doesn't support it and then you have to downgrade :(
Fortunately it's not too painful
:::bash brew uninstall maven brew tap homebrew/versions brew install maven30
@dave-tucker
I <3 the Opscode Bento project. I use the Amazon S3 hosted images for pretty much all of my Vagrant boxes. When I started to use RHEL, I didn't want to make an exception... Fortunately Bento allows you to build your own RHEL, OSX or Windows boxes using Packer. This is how I built my RHEL 6.4 x64 box, but this process should work for any other box you want to build manually...
If you are on OSX, you can install Packer using Homebrew:
brew tap homebrew/binary
brew install packer
If not, you can follow the instructions on the Packer's website
Clone bento and add your RHEL Server ISO
https://github.com/opscode/bento.git
cd bento/packer
mkdir iso
#cp your rhel-server iso here... it should be named rhel-server-6.5-x86_64-dvd.iso
packer build -only=virtualbox-iso -var 'mirror=file:///`pwd`/iso' rhel-6.5-x86_64.json
This takes a little while so go and get some coffee...
cd ..
vagrant box add rhel65x64 builds/virtualbox/opscode_rhel-6.5_chef-provisionerless.box
Then to test it, create a new Vagrant image that uses the new rhel65x64
image
cd <a tmp dir>
vagrant init
sed -i '' 's/config.vm.box = "base"/config.vm.box = "rhel65x64"/g' Vagrantfile
vagrant up
vagrant ssh
vagrant destroy
@dave_tucker
I <3 the Opscode Bento project. I use the Amazon S3 hosted images for pretty much all of my Vagrant boxes. When I started to use RHEL, I didn't want to make an exception... Fortunately Bento allows you to build your own RHEL, OSX or Windows boxes using Packer. This is how I built my RHEL 6.4 x64 box, but this process should work for any other box you want to build manually...
I <3 the Opscode Bento project. I use the Amazon S3 hosted images for pretty much all of my Vagrant boxes. When I started to use RHEL, I didn't want to make an exception... Fortunately Bento allows you to build your own RHEL, OSX or Windows boxes using Packer. This is how I built my RHEL 6.4 x64 box, but this process should work for any other box you want to build manually...
Things of note that were discovered on the web this week.
Things of note that were discovered on the web this week.
Can't do editing in Markdown eh? Obviously you haven't seen CriticMarkup. Looks very cool indeed!
markdown
This is how to exclude integration tests being run in IntelliJ I've been using this for unit testing the OpenDaylight OVSDB library with the regex
^(?!(^.*(IT).*?$)).*$
and it works well!
intellij, java, testing, junit
A presentation with troubleshooting Maven issues which is a necessary skill if you plan to do any development in Java.
java, maven
Things of note that were discovered on the web this week.
It's been a few weeks since Cisco announced OpFlex and I've just finished gathering my thoughts...
It's a protocol for delivering policy to endpoints. Policy is declarative, based on promise theory and can therefore scale well vs. imperative models (like OpenFlow)
Kyle Mestery assures us that OpFlex is not an OpenFlow killer and while I agree, I'm starting to have my doubts. Vendors have been dragging their heels when it comes to implementing OpenFlow due to its pipeline and table structures not being a good fit to current hardware. OpFlex offers them a way out as they no longer need to care "how" something is implemented, just that the "promise" is kept (read: policy is enforced).
I can see Cisco deploying OpFlex across their entire portfolio and declaring victory - we've got SDN. Who cares about OpenFlow? This begs the question of whether OpFlex is just a move from Cisco to protect it's core business?
The future of networking is "Open"
The key benefit to using OpenFlow is disaggregation. It's beneficial to everybody for the proprietary stack to be broken down to allow Continue reading
It's been a few weeks since Cisco announced OpFlex and I've just finished gathering my thoughts...
It's been a few weeks since Cisco announced OpFlex and I've just finished gathering my thoughts...
My mission is simple: Establish an SSH connection to a device and run some commands in as few lines as possible. The contenders? Paramiko, Spur and Fabric.
I have a network device, 192.168.1.254
.
I want to log in via SSH with a username of dave
and password of p@ssword123
.
Once logged in, I want to execute the command display version
and print the result.
Now to the code...
Paramiko is the go to SSH library in Python. Let's see how it shapes up in the simple scenario:
import paramiko
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect("192.168.1.254", username="dave", password="p@ssword123")
stdin, stdout, stderr = client.exec_command('display version')
for line in stdout:
print line.strip('n')
client.close()
8 lines of code. The API here is very powerful, but requires me to put up some scaffolding code (Key Management) before I actually get around to connecting an executing my command. That said, it gets the job done.
Spur is a wrapper around Continue reading