~0x44/nova/extdoc

« back to all changes in this revision

Viewing changes to nova/utils.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
2
# Copyright [2010] [Anso Labs, LLC]
 
3
 
4
#    Licensed under the Apache License, Version 2.0 (the "License");
 
5
#    you may not use this file except in compliance with the License.
 
6
#    You may obtain a copy of the License at
 
7
 
8
#        http://www.apache.org/licenses/LICENSE-2.0
 
9
 
10
#    Unless required by applicable law or agreed to in writing, software
 
11
#    distributed under the License is distributed on an "AS IS" BASIS,
 
12
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
#    See the License for the specific language governing permissions and
 
14
#    limitations under the License.
 
15
 
 
16
"""
 
17
System-level utilities and helper functions.
 
18
"""
 
19
 
 
20
import logging
 
21
import socket
 
22
import sys
 
23
import os.path
 
24
import inspect
 
25
import subprocess
 
26
import random
 
27
 
 
28
def fetchfile(url, target):
 
29
    logging.debug("Fetching %s" % url)
 
30
#    c = pycurl.Curl()
 
31
#    fp = open(target, "wb")
 
32
#    c.setopt(c.URL, url)
 
33
#    c.setopt(c.WRITEDATA, fp)
 
34
#    c.perform()
 
35
#    c.close()
 
36
#    fp.close()
 
37
    execute("curl %s -o %s" % (url, target))
 
38
 
 
39
def execute(cmd, input=None):
 
40
    #logging.debug("Running %s" % (cmd))
 
41
    obj = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
 
42
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
43
    result = None
 
44
    if input != None:
 
45
        result = obj.communicate(input)
 
46
    else:
 
47
        result = obj.communicate()
 
48
    obj.stdin.close()
 
49
    if obj.returncode:
 
50
        logging.debug("Result was %s" % (obj.returncode))
 
51
    return result
 
52
 
 
53
def abspath(s):
 
54
    return os.path.join(os.path.dirname(__file__), s)
 
55
 
 
56
def default_flagfile(filename='nova.conf'):
 
57
    for arg in sys.argv:
 
58
        if arg.find('flagfile') != -1:
 
59
            break
 
60
    else:
 
61
        if not os.path.isabs(filename):
 
62
            # turn relative filename into an absolute path
 
63
            script_dir = os.path.dirname(inspect.stack()[-1][1])
 
64
            filename = os.path.abspath(os.path.join(script_dir, filename))
 
65
        if os.path.exists(filename):
 
66
            sys.argv = sys.argv[:1] + ['--flagfile=%s' % filename] + sys.argv[1:]
 
67
 
 
68
def debug(arg):
 
69
    logging.debug('debug in callback: %s', arg)
 
70
    return arg
 
71
 
 
72
def runthis(prompt, cmd):
 
73
    logging.debug("Running %s" % (cmd))
 
74
    logging.debug(prompt % (subprocess.call(cmd.split(" "))))
 
75
 
 
76
 
 
77
def generate_uid(topic, size=8):
 
78
    return '%s-%s' % (topic, ''.join([random.choice('01234567890abcdefghijklmnopqrstuvwxyz') for x in xrange(size)]))
 
79
 
 
80
def generate_mac():
 
81
    mac = [0x00, 0x16, 0x3e, random.randint(0x00, 0x7f),
 
82
           random.randint(0x00, 0xff), random.randint(0x00, 0xff)
 
83
           ]
 
84
    return ':'.join(map(lambda x: "%02x" % x, mac))
 
85
 
 
86
def last_octet(address):
 
87
    return int(address.split(".")[-1])
 
88
 
 
89
def get_my_ip():
 
90
    ''' returns the actual ip of the local machine.
 
91
    '''
 
92
    csock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
93
    csock.connect(('www.google.com', 80))
 
94
    (addr, port) = csock.getsockname()
 
95
    csock.close()
 
96
    return addr