Nov 062014

This week, I helped out with a ZeroVM workshop at OpenStack summit in Paris. I been following ZeroVM for a while, and I think it is one of projects that we will hear a lot more about this coming year.

What is ZeroVM? ZeroVM creates a secure and isolated execution environment which can run a single thread or application. ZeroCloud is middleware running on Swift. The combination of these three technologies enables running self contained code directly on the objects stored in Swift. This powerful combination can speed up data processing tremendously.

For a good introduction to ZeroVM, watch the presentation by Carina C. Zona:

Getting started with ZeroVM is not hard, actually, it is very simple. Start by setting up a local environment with Swift and ZeroCloud setup using Vagrant: Once you have the environment,  run the first few examples: This should give you a really great idea how to get started with ZeroVM and start writing your own code.

Watch our hands on tutorial at ZeroVM:


 Posted by at 2:35 am
Aug 052014

I was very fortunate to win a 3D printer, Makerbot Mini, at a developer conference. I think 3D printing technology is amazing, but never had a really good excuse to purchase one. Now, I don’t need excuses!


Here are my first impressions:

If you have a 3D printer at your desk at work, people will come and check it out. Best cubicle toy ever!

Assembling out of the box is fairly easy. After reading the less than helpful printed instructions, I combined them with a YouTube video and was able to stick parts into mostly the right places. Keep in mind, there were only 4 or so parts to put in place, no tools required.

After assembling the printer, I needed to download the software. I did through the usual install for macs, nothing fancy or tricky there. There appeared to be a few hiccups in the software, as it did not immediately detect the printer, and not immediately prompted me for my first print. Eventually, the software and the hardware were on the talking terms and now I was ready to print!

Being fairly technical, I assumed the instructions were not meant for me, so I tried printing without upgrading the firmware. The result was fairly obvious, the only thing to come out of it was frustrated audience patiently awaiting the first 3D thing. Do yourself a favor, read and follow the instructions- they were pretty clear that I needed to update the firmware. The software may prompt you for upgrade a bit too late, so be sure to cancel the print job and do the upgrade first.

Upgrading the firmware took a while. After all was set in place, I loaded octopus sample file that came with the software and tried printing. After taking its sweet time warming, calibrating, targeting, and all the other things that printers do, it finally lifted the little plate to the nozzle and the nozzle started to frantically move back and forth trying to do something. While this was a lot better than before, the object it was printing was invisible. At this point, I cancelled the print, took out some parts and re-threaded the filament with a lot of force, instead of just a little (it really needs to go deep in there, not just a little). Feeling hopeful, tried again. Now, the printer could not find the bottom plate! The plate was obviously there, so i tried moving it. That did the trick, and when i pressed print again, it actually started printing! After warming, calibrating, targeting, etc, etc, etc.


Now that the printer could correctly locate all its parts, it was chirping and humming and making other sweet printing sounds. It was making them for about 50 minutes, and in the end, I had a little plastic octopus, all of my own. I called him Nugget and gave it to my husband for safe keeping.


I still don’t have a good reason for a 3D printer, but I sure want to be printing things with it, and I keep thinking of all the things I can make!

If you would like your very own 3D Makerbot Mini, you can get it here.


 Posted by at 9:13 am
Jul 202014

Hello OSCON! Here are the workshop commands:

cat ~/credentials/user
source ~/credentials/user
keystone discover
keystone catalog
keystone endpoint-get –service volume
keystone token-get –wrap 50

nova list
nova flavor-list
nova boot –image cirros-qcow2 –flavor 1 MyFirstInstance
nova show MyFirstInstance
nova console-log MyFirstInstance

neutron net-create private
neutron subnet-create –name private-subnet private
neutron net-list
neutron subnet-list
neutron net-show private
neutron subnet-show private-subnet

nova boot –flavor –image –nic net-id=
nova boot –image cirros-qcow2 –flavor 1 –nic net-id=$NIC MySecondInstance

sudo ip netns exec qdhcp-$NIC ip a
sudo ip netns exec qdhcp-$NIC ping

nova secgroup-list-rules default
nova secgroup-add-rule

nova secgroup-add-rule default icmp -1 -1
nova secgroup-add-rule default tcp 22 22

nova secgroup-create my_group “allow ping and ssh”
nova secgroup-add-rule my_group icmp -1 -1
nova secgroup-add-rule my_group tcp 22 22
nova add-secgroup MySecondInstance my_group

glance image-list
glance image-create –name “my_cirros_qcow2″ –disk-format qcow2 –container-format bare –is-public False –file ~/images/cirros-0.3.2-x86_64-disk.img
glance image-show my_cirros_qcow2

cinder list
cinder type-list
cinder create 1 –display-name MyFirstVolume –volume-type SATA
nova boot –image cirros-qcow2 –flavor m1.tiny –nic net-id=$NIC MyVolumeInstance
nova volume-attach MyVolumeInstance $VOLUME_ID auto
nova console-log MyVolumeInstance
sudo ip netns exec qdhcp-$NIC ssh cirros@

if there is time, on instance:
sudo fdisk -l
sudo mkfs.ext3 /dev/vdb
sudo mkdir /extraspace
sudo mount /dev/vdb /extraspace
sudo touch /extraspace/helloworld.txt
sudo ls /extraspace
sudo umount /extraspace

nova volume-detach MyVolumeInstance $VOLUME_ID

source credentials/admin

swift stat
swift list
swift post mycontainer
echo “Hello OSCON!” > test.txt
swift upload mycontainer test.txt
swift download mycontainer test.txt -o -
swift stat mycontainer
swift list mycontainer

 Posted by at 9:56 pm
Jul 182014

We are very excited to be doing a workshop at OSCON this year!
“Curious about OpenStack, but don’t know where to start? In this hands on tutorial we will walk you through the basics of OpenStack, the OpenSource cloud computing platform that is used to build private and public clouds.”

Since this is a hands-on lab, we have a virtual appliance with all-in-one OpenStack ready to go. This workshop is best for people that have no prior experience with OpenStack, but we won’t turn anyone away! Cody put all the materials online for download, so check them out!

Bonus of doing a workshop at the beginning of the conference is that we will get to enjoy all the other workshops and talks, instead of worrying about ours!

Check out all the racker talks this year at OSCON:


 Posted by at 1:54 pm
Jun 032013

There is only one simple answer to this question- none of your pre-filled “What is your favorite _______ ?” will be appropriate for me. The problem with these questions is that they are either hard to answer for me, or too easy for you to find out by checking out my facebook/twitter/linkedin/whatever social networks. Please, if you are in charge of creating these “security” questions, leave them blank for me to fill in!

If I am forced to pick out of 8 or 10 bad questions, I will end up either making them really easy to answer, or forget the answers to them. Just this evening I was on the phone for over 30 min waiting to reset my account on the system where I could not correctly answer one of these “secure” questions. Where did I spend my childhood summers? Well, I do know where I spent them, but I could not remember which one of the names/places I would have picked a year ago when I signed up for this super secure service!

After reseting my password over the phone, I went into my profile and tried to change the answers. I had to have 3 questions, and these were some of the choices:

Mother’s maiden name- probably the least secure type of question a system can ask. My mother may not have her maiden name on her facebook profile, but yours might.

What is your high school mascot? You could probably find out if you know anything at all about me.

What is your favorite teacher’s name? Seriously? I had a few teachers I really liked, but would be hard pressed to pick one. The answer would be, “it depends”.

What is your favorite movie? Now, I know there are a lot of people out there that have their one and only favorite movie that they have memorized. I actually believe my favorite movie might change over time. What if I see my favorite movie this coming weekend?

What is your favorite show? The same problem as with the favorite movie. Is it all-time favorite? Or is it current season favorite?

You get the idea. Favorite this, favorite that. Best friend, best vacation, best anything. Pet’s name. Either too easy, or too hard. Some people share a lot about themselves online. So please, let me fill in my own security question if that’s the route you pick for making your system secure. Please.




 Posted by at 10:45 pm
Dec 122012

Ever wanted to know what information Razor collects about your system that you could lay your hands on? Wonder no more!

When handing of your newly created node to a broker, besides installing the client and registering it with the server, Razor also injects custom facts into the new node. They consist of two parts, “razor_metadata” and “razor_attributes”. Razor metadata is available for both chef and puppet brokers, and consist of the following:

razor_metadata: {
    razor_tags: "memsize_1GiB,nics_1,cpus_1,IntelCorporation,vmware_vm",
    razor_node_uuid: "JtFXS98553aTEsrUhy6V9",
    razor_active_model_uuid: "PQG5iXxTIDGgEeIQ9qsnD",
    razor_model_uuid: "7RdhL19S5pBAAWTqNldfSl",
    razor_model_name: "ubuntu_precise",
    razor_model_description: "Ubuntu Precise Model",
    razor_model_template: "linux_deploy",
    razor_policy_count: "14"

Razor attributes are a bit more extensive, and I believe are currently injected only into the chef broker. This very detailed information about your system is collected by the Razor microkernel, and can also be found under active model/node/@attributes_hash in the database. The data looks like this:

razor_attributes: {
    mk_hw_cpu0_size: "2200MHz",
    mk_hw_lscpu_CPU_MHz: "2199.513",
    mk_hw_mem_description: "System Memory",
    mk_hw_nic0_clock: "66MHz",
    mk_hw_cpu0_physical_id: "4",
    ipaddress_lo: "",
    mk_hw_fw_physical_id: "0",
    processorcount: "1",
    macaddress: "6A:8C:81:E3:6C:75",
    mk_hw_nic0_version: "01",
    mk_hw_disk0_size: "20GiB (21GB)",
    manufacturer: "VMware, Inc.",
    mk_hw_bus_version: "None",
    architecture: "i386",
    memorytotal: "1005.62 MB",
    mk_hw_nic_count: "1",
    mk_hw_disk_count: "1",
    mk_hw_lscpu_L2_cache: "256K",
    mk_hw_lscpu_CPU_sockets: "1",
    mk_hw_cpu0_slot: "CPU socket #0",
    network_lo: "",
    hardwareisa: "unknown",
    mk_hw_lscpu_Stepping: "7",
    mk_hw_fw_capabilities: "isa pci pcmcia pnp apm upgrade shadowing escd cdboot bootselect edd int5printscreen int9keyboard int14serial int17printer int10video acpi smartbattery biosbootspecification netboot",
    "mk_hw_lscpu_CPU_op-modes": "32-bit, 64-bit",
    mk_hw_nic0_width: "64 bits",
    mk_hw_cpu0_vendor: "Intel Corp.",
    processor0: "Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz",
    mk_hw_lscpu_Byte_Order: "Little Endian",
    netmask_eth0: "",
    mk_hw_fw_vendor: "Phoenix Technologies LTD",
    mk_hw_nic0_logical_name: "eth0",
    mk_hw_disk0_logical_name: "/dev/sda",
    domain: "dns.hosts",
    macaddress_dummy0: "6A:8C:81:E3:6C:75",
    boardserialnumber: "None",
    mk_hw_bus_vendor: "Intel Corporation",
    mk_hw_cpu0_capabilities: "boot fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss nx rdtscp x86-64 constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm ida arat epb xsaveopt pln pts",
    mk_hw_mem_size: "1GiB",
    mk_hw_lscpu_L1i_cache: "32K",
    mk_hw_cpu0_serial: "0008-06A9-0187-0000-0000-0000",
    mk_hw_fw_size: "87KiB",
    network_eth0: "",
    hostname: "mk000C291F2C5C",
    mk_hw_lscpu_Model: "42",
    netmask_lo: "",
    mk_hw_nic0_capacity: "1Gbit/s",
    mk_hw_cpu0_product: "Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz",
    mk_hw_fw_description: "BIOS",
    ipaddress: "",
    physicalprocessorcount: 1,
    macaddress_eth0: "00:0B:29:1F:2D:5C",
    mk_hw_nic0_bus_info: "pci@0000:02:01.0",
    mk_hw_disk0_bus_info: "scsi@2:0.0.0",
    boardproductname: "440BX Desktop Reference Platform",
    mk_hw_bus_product: "440BX Desktop Reference Platform",
    mk_hw_cpu0_width: "64 bits",
    mk_hw_mem_slot: "System board or motherboard",
    mk_hw_lscpu_L1d_cache: "32K",
    mk_hw_nic0_configuration: "autonegotiation=on broadcast=yes driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full firmware=N/A ip= latency=0 link=yes mingnt=255 multicast=yes port=twisted pair speed=1Gbit/s",
    mk_hw_cpu0_version: "6.10.7",
    mk_hw_fw_date: "07/02/2012",
    fqdn: "mk000C291F2C5C.dns.hosts",
    mk_hw_lscpu_CPU_family: "6",
    virtual: "vmware",
    mk_hw_nic0_size: "1Gbit/s",
    mk_hw_cpu0_description: "CPU",
    serialnumber: "VMware-56 4c e7 4d ae 3c 03 d5-4f e6 9e dc a4 1f 3c 6c",
    mk_hw_bus_physical_id: "0",
    hardwaremodel: "i686",
    mk_hw_lscpu_Architecture: "i686",
    mk_hw_nic0_physical_id: "1",
    boardmanufacturer: "Intel Corporation",
    mk_hw_bus_description: "Motherboard",
    mk_hw_disk0_physical_id: "0.0.0",
    mk_hw_cpu0_capacity: "4230MHz",
    mk_hw_lscpu_BogoMIPS: "4400.31",
    mk_hw_mem_physical_id: "e2",
    type: "Other",
    mk_hw_nic0_capabilities: "pm pcix bus_master cap_list rom ethernet physical logical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation",
    mk_hw_cpu0_bus_info: "cpu@0",
    is_virtual: "true",
    mk_hw_fw_version: "6.00",
    netmask: "",
    mk_hw_lscpu_Vendor_ID: "GenuineIntel",
    mk_hw_nic0_serial: "00:0c:27:2f:1c:7c",
    mk_hw_cpu_count: "1",
    ipaddress_eth0: "",
    productname: "VMware Virtual Platform",
    mk_hw_bus_serial: "None",
    mk_hw_nic0_description: "Ethernet interface",
    interfaces: "dummy0,eth0,lo",
    mk_hw_lscpu_L3_cache: "6144K",
    memorysize: "1005.62 MB",
    mk_hw_disk0_description: "SCSI Disk"

Once this data is injected into the chef node, you can access it just like any other attribute.


 Posted by at 11:32 pm