Skip to content

Instantly share code, notes, and snippets.

View christophchamp's full-sized avatar

Christoph Champ christophchamp

View GitHub Profile
@christophchamp
christophchamp / curl_cf_extract_archive.sh
Created November 25, 2013 06:02
Upload a tarball to a Rackspace Cloud Files container and extract its contents.
#!/bin/bash
# SEE: http://docs.rackspace.com/files/api/v1/cf-devguide/content/Extract_Archive-d1e2338.html
# NOTE: That "Content-Type: " _must_ be blank if you want the API to guess the types!
token=`./curl_authenticate.sh |grep ^X-Auth-Token |cut -d: -f2`
tarball=/home/champ/tmp/test_cf_extract.tar.gz
container=tmp
region=dfw
curl -i -XPUT \
-H "X-Auth-Token: $token" \
-H "Content-Type: " \
@christophchamp
christophchamp / rackspace_token
Created November 8, 2013 18:22
Rackspace authenticated token
$ MYRAXTOKEN=`curl -s -XPOST https://identity.api.rackspacecloud.com/v2.0/tokens -d'{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"$MYRAXUSERNAME","apiKey":"'$MYRAXAPIKEY'"}}}' -H"Content-type:application/json" | python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'`
@christophchamp
christophchamp / cf_update_content_type_by_ext.py
Created October 2, 2013 05:26
This simple script will change/update the Content-Type for all objects in our Rackspace Cloud Files container.
#!/usr/bin/python
import os
import pyrax
YOUR_USERNAME=""
YOUR_API_KEY=""
YOUR_REGION="" # E.g., "ORD", "DFW", etc.
YOUR_CONTAINER_NAME=""
#pyrax.set_setting('identity_type', 'rackspace')
# http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_TempURL-d1a444.html
# https://community.rackspace.com/developers/f/7/t/798
import hmac
from hashlib import sha1
from sys import argv
from time import time
if len(argv) != 5:
print 'Syntax: <method> <url> <seconds> <key>'
print 'Example: GET https://storage101.dfw1.clouddrive.com/v1/' \
@christophchamp
christophchamp / vet_email.py
Created April 22, 2012 03:49
Vet a given E-mail address
def vet_email(email_address):
"""Vet email addresses. The local part (the part before the '@') must not
exceed 64 characters and the domain part (after the '@') must not
exceed 255 characters. The entire email address length must not exceed
320 characters.
"""
local_part = re.sub(r'^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$', '\\1', email_address)
domain_part = re.sub(r'^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$', '\\2', email_address)
if len(local_part) > 64:
return False
# Rename:
# FROM: "Introduction___Networking_tutorial_(1_of_13)-qHzZUmP1vvON.mp4"
# TO: "nettut-01_of_13_-_Introduction-qHzZUmP1vvON.mp4"
for f in *.mp4; do \
[[ $f =~ ^(.*)___Networking_tutorial_\(([0-9]+)_of_13\)-(.*)$ ]]
mv "$f" "nettut-$(printf "%02d" ${BASH_REMATCH[2]})_of_13_-_${BASH_REMATCH[1]}-${BASH_REMATCH[3]}"
done
@christophchamp
christophchamp / trove.bash_completion
Created June 18, 2015 19:56
Bash completion for `trove` (OpenStack DBaaS API)
_trove()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "--configuration --marker database-list metadata-show secgroup-delete-rule cluster-delete user-revoke-access root-show --users database-delete --limit datastore-show configuration-detach backup-list user-grant-access help configuration-list delete --region --replica_of metadata-update create show -h cluster-show user-create --include-clustered configuration-create restart configuration-default metadata-list --backup --detach-replica-source user-update-attributes --new_password metadata-edit configuration-parameter-show backup-show --new_host flavor-show datastore-list configuration-instances --databases list --description root-enable secgroup-list-rules configuration-patch metadata-create resize-flavor --help cluster-list --remove_configuration --collate user-list datastore-version-list --instance cluster-instances cluster-create database-create secgroup-add-rule --datastore configuration-update configuration-parameter-list secgro
#
# Wide-open CORS config for nginx
#
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
#

Keybase proof

I hereby claim:

  • I am christophchamp on github.
  • I am xtof (https://keybase.io/xtof) on keybase.
  • I have a public key whose fingerprint is 8D0A 5408 3B16 7656 6B65 EBAC 26D5 622E 8B70 5E64

To claim this, I am signing this object:

@christophchamp
christophchamp / remove_network_from_server.sh
Created March 26, 2014 11:36
Remove a Rackspace Cloud Network from a Cloud Server
# SEE: http://docs.rackspace.com/networks/api/v2/cn-devguide/content/delete_virt_interface_api.html
USERNAME=<REDACTED> # This is your Rackspace account's username
API_KEY=<REDACTED> # This is your Rackspace account's API Key
ACCOUNT=<REDACTED> # This is your Rackspace account number
REGION=dfw # Or, "iad", "ord", "lon", "syd", "hkg"
# Authenticate to obtain your 24-hour valid token:
TOKEN=`curl -s -XPOST https://identity.api.rackspacecloud.com/v2.0/tokens -d'{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"'$USERNAME'","apiKey":"'$API_KEY'"}}}' -H"Content-type:application/json" | python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'`