Add a openstack specific datasource

Openstack has a unique derivative datasource
that is gaining usage. Previously the config
drive datasource provided part of this functionality
as well as the ec2 datasource, but since new
functionality is being added to openstack is
seems benefical to combine the used parts into
one datasource just made for handling openstack
deployments.

This patch factors out the common logic shared
between the config drive and the openstack
metadata datasource and places that in a shared
helper file and then creates a new openstack
datasource that readers from the openstack metadata
service and refactors the config drive datasource
to use this common logic.
This commit is contained in:
Joshua Harlow
2014-02-01 22:48:55 -08:00
parent bfefb75f9c
commit 97fe498e45
6 changed files with 214 additions and 417 deletions

View File

@@ -31,6 +31,7 @@ import glob
import grp
import gzip
import hashlib
import json
import os
import os.path
import platform
@@ -385,6 +386,15 @@ def multi_log(text, console=True, stderr=True,
log.log(log_level, text)
def load_json(text, root_types=(dict,)):
decoded = json.loads(text)
if not isinstance(decoded, tuple(root_types)):
expected_types = ", ".join([str(t) for t in root_types])
raise TypeError("(%s) root types expected, got %s instead"
% (expected_types, type(decoded)))
return decoded
def is_ipv4(instr):
"""determine if input string is a ipv4 address. return boolean."""
toks = instr.split('.')