Redfish Whitepaper

Finally there is a modern replacement for IPMI. There is a new systems management standard called Redfish which is now available on Dell servers in the form of the 2.30.30.30 firmware update for iDRAC and LC. Redfish makes use of a REST API interface and employs JSON as its data format. Now it’s possible for anyone to programmatically control servers via Python or Java and to do so without having to care which brand the server is – yes, it’s vendor neutral. Other vendors will release (or already have released) their own versions, but since it’s a standard the implementations all work the same way.

I was the co-author on a whitepaper for the Redfish API and anyone interested can download the document here.

OpenStack Neutron – Expand and / or update floating IP range

Sometimes you run out of public IP addresses and need to expand the floating IP range. If a non-interrupted range is available to expand into from the current range simply use:

neutron subnet-update –allocation-pool start=<original-start-ip>,end=<new-end-ip>

This will overwrite the existing range and expand it to the new end-IP.

To add an extra, separate IP range while still keeping the original range, use:

neutron subnet-update <subnet-id> –allocation-pool start=<original-start-ip>,end=<original-end-ip> –allocation-pool start=<additional-start-ip>,end=<additional-end-ip>

Example of extending a continuous IP range:

[root@c6320-n1 ~(keystone_admin)]# neutron subnet-list
+--------------------------------------+--------------+----------------+----------------------------------------------------+
| id                                   | name         | cidr           | allocation_pools                                   |
+--------------------------------------+--------------+----------------+----------------------------------------------------+
| 1b66dad8-2f2c-4667-9460-7729e2a68d1c | sub-pub      | 172.17.4.0/24  | {"start": "172.17.4.130", "end": "172.17.4.199"}   |
| 74c90d00-af79-4f7c-92ef-4e38231e850c | sub_priv2    | 192.168.0.0/24 | {"start": "192.168.0.40", "end": "192.168.0.50"}   |
| e6cb6f7e-5efd-42df-93e6-67ad4b056035 | sub_internal | 192.168.0.0/24 | {"start": "192.168.0.100", "end": "192.168.0.200"} |
| e47c7f4b-85ec-41e4-ad1a-cf9290a97d87 | sub_priv     | 172.16.0.0/24  | {"start": "172.16.0.100", "end": "172.16.0.200"}   |
+--------------------------------------+--------------+----------------+----------------------------------------------------+


[root@c6320-n1 ~(keystone_admin)]# neutron subnet-show 1b66dad8-2f2c-4667-9460-7729e2a68d1c
+-------------------+--------------------------------------------------+
| Field | Value |
+-------------------+--------------------------------------------------+
| allocation_pools | {"start": "172.17.4.130", "end": "172.17.4.199"} |
| cidr | 172.17.4.0/24 |
| dns_nameservers | |
| enable_dhcp | False |
| gateway_ip | 172.17.4.1 |
| host_routes | |
| id | 1b66dad8-2f2c-4667-9460-7729e2a68d1c |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | sub-pub |
| network_id | fa9fb87f-70d9-4e18-83cb-c04695cbed5a |
| subnetpool_id | |
| tenant_id | 8d93e4b0f8454ad7b539d14633d72136 |
+-------------------+--------------------------------------------------+


[root@c6320-n1 ~(keystone_admin)]# neutron subnet-update 1b66dad8-2f2c-4667-9460-7729e2a68d1c --allocation-pool start=172.17.4.130,end=172.17.4.240
Updated subnet: 1b66dad8-2f2c-4667-9460-7729e2a68d1c
[root@c6320-n1 ~(keystone_admin)]# neutron subnet-show 1b66dad8-2f2c-4667-9460-7729e2a68d1c
+-------------------+--------------------------------------------------+
| Field | Value |
+-------------------+--------------------------------------------------+
| allocation_pools | {"start": "172.17.4.130", "end": "172.17.4.240"} |
| cidr | 172.17.4.0/24 |
| dns_nameservers | |
| enable_dhcp | False |
| gateway_ip | 172.17.4.1 |
| host_routes | |
| id | 1b66dad8-2f2c-4667-9460-7729e2a68d1c |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | sub-pub |
| network_id | fa9fb87f-70d9-4e18-83cb-c04695cbed5a |
| subnetpool_id | |
| tenant_id | 8d93e4b0f8454ad7b539d14633d72136 |
+-------------------+--------------------------------------------------+
[root@c6320-n1 ~(keystone_admin)]#
[root@c6320-n1 ~(keystone_admin)]#

Example of adding an additional range to an already existing range:

[root@c6320-n1 ~(keystone_admin)]# neutron subnet-update 1b66dad8-2f2c-4667-9460-7729e2a68d1c --allocation-pool start=172.17.4.130,end=172.17.4.199 --allocation-pool start=172.17.4.209,end=172.17.4.240
Updated subnet: 1b66dad8-2f2c-4667-9460-7729e2a68d1c
[root@c6320-n1 ~(keystone_admin)]#
[root@c6320-n1 ~(keystone_admin)]# neutron subnet-show 1b66dad8-2f2c-4667-9460-7729e2a68d1c
+-------------------+--------------------------------------------------+
| Field             | Value                                            |
+-------------------+--------------------------------------------------+
| allocation_pools  | {"start": "172.17.4.130", "end": "172.17.4.199"} |
|                   | {"start": "172.17.4.209", "end": "172.17.4.240"} |
| cidr              | 172.17.4.0/24                                    |
| dns_nameservers   |                                                  |
| enable_dhcp       | False                                            |
| gateway_ip        | 172.17.4.1                                       |
| host_routes       |                                                  |
| id                | 1b66dad8-2f2c-4667-9460-7729e2a68d1c             |
| ip_version        | 4                                                |
| ipv6_address_mode |                                                  |
| ipv6_ra_mode      |                                                  |
| name              | sub-pub                                          |
| network_id        | fa9fb87f-70d9-4e18-83cb-c04695cbed5a             |
| subnetpool_id     |                                                  |
| tenant_id         | 8d93e4b0f8454ad7b539d14633d72136                 |
+-------------------+--------------------------------------------------+
[root@c6320-n1 ~(keystone_admin)]#
[root@c6320-n1 ~(keystone_admin)]# 

Raspberry Pi as Amazon S3 file uploader

Putting the Raspberry Pi to work uploading files to the Amazon S3 backup vault. Much more energy efficient compared to keeping the PC running for the same job.

Amazing how many uses this little SoC has . I’m ending up with a pile of microSD cards for all its identities 🙂

image

Corsair Carbide Air 540 mod

The gaming PC at home had started getting a bit old and it was time to start overclocking. That way it’d be possible to squeeze a few more months out of the machine before the inevitable upgrade. Of course with a stock Intel CPU cooler it quickly overheated. It reached 98 degrees before I had a chance to power it down 🙂

So, a trip to Akihabara got me a fairly cheap Lepa AquaChanger240 but in my hurry to get a cooler I had underestimated the size of this monster. The thickness of the cooler with fans mounted is about 5.5cm – no way it would fit in the PC case, even though it’s a full tower.

As a result I found myself looking for a new case. Overclocking clearly has its consequences. Yet another trip to Akihabara resulted in the beautiful and spacious Corsair Carbide Air 540. Awesome to look at from both the outside and inside thanks to the ease of which cables can be kept hidden in the second chamber.

Since I wanted to go with green LEDs to light it up it made sense to give it a paint job at the same time. The normally black grilles on top and front are now a bright green. The case is extremely easy to disassemble which helped a lot in removing the parts for painting.

Corsair Air 540 mod - The Hulk - 01

Corsair Air 540 mod - The Hulk - 02    Corsair Air 540 mod - The Hulk - 03

The Lepa CPU cooler works fantastically well. The processor – an Intel i7 2600k, has been clocked from the base 3.4 up to it’s current 4.6 Ghz. Even under severe stress testing the temperature stays in the 50’s.

Cloud storage for photo backups

At home we have a 4-disk QNAP box as a file server which hosts photos dating back to the 1990s. Up to recently it was backed up over eSATA to external drives, but it was never a good solution. The QNAP box does offer cloud backup, but I don’t want to be dependent on somebody else’s proprietary way of copying data to the cloud. So, yesterday I finally got hacking on a Python script to back the whole thing up to a cloud provider.

After looking at Amazon S3, Google Cloud Platform and BLOB storage in Microsoft Azure (which I use frequently at work) I finally went with S3 as it has the option to automatically shift data to the ultra-low-cost Glacier service after a set time. There are good tutorials to get started for those who are interested here: http://boto.cloudhackers.com/en/latest/s3_tut.html

Amazon recommends splitting files larger than 100Mb prior to upload and Boto can be used with file splitting as well.

Prior to this it was necessary to encrypt all data to ensure it wasn’t easily accessible by any third party. Not that I expect anyone to have an interest in some family photos, but anyway. To make sure it would be possible even for my wife to decrypt the data I went with 7za since it simply creates zip files encrypted with AES. Encrypting is as easy as:

7za a EncryptedFile.zip FileToEncrypt -tzip -mem=AES256 -mx9 -pSomePassword

I may post the actual backup script here as well once it’s been through a few revisions, but it’s too rough for publication right now.