Update for ansible and puppet apply
Shade supports all of the TODO items in here now, so use it. Also, we have ansible playbooks that do the work of running puppet - and since we're on puppet apply now, we can use them. Change-Id: I6f57e9a31bf835ef2e22db1f5531d92e99806cf4
This commit is contained in:
133
launch/utils.py
133
launch/utils.py
@@ -19,16 +19,9 @@
|
||||
# limitations under the License.
|
||||
|
||||
import time
|
||||
import os
|
||||
import traceback
|
||||
import socket
|
||||
|
||||
import novaclient
|
||||
from novaclient.v1_1 import client as Client11
|
||||
try:
|
||||
from v1_0 import client as Client10
|
||||
except:
|
||||
pass
|
||||
import paramiko
|
||||
|
||||
from sshclient import SSHClient
|
||||
@@ -44,108 +37,6 @@ def iterate_timeout(max_seconds, purpose):
|
||||
raise Exception("Timeout waiting for %s" % purpose)
|
||||
|
||||
|
||||
def get_client(provider):
|
||||
args = [provider.nova_username, provider.nova_api_key,
|
||||
provider.nova_project_id, provider.nova_auth_url]
|
||||
kwargs = {}
|
||||
if provider.nova_service_type:
|
||||
kwargs['service_type'] = provider.nova_service_type
|
||||
if provider.nova_service_name:
|
||||
kwargs['service_name'] = provider.nova_service_name
|
||||
if provider.nova_service_region:
|
||||
kwargs['region_name'] = provider.nova_service_region
|
||||
if provider.nova_api_version == '1.0':
|
||||
Client = Client10.Client
|
||||
elif provider.nova_api_version == '1.1':
|
||||
Client = Client11.Client
|
||||
else:
|
||||
raise Exception("API version not supported")
|
||||
if provider.nova_rax_auth:
|
||||
os.environ['NOVA_RAX_AUTH'] = '1'
|
||||
client = Client(*args, **kwargs)
|
||||
return client
|
||||
|
||||
extension_cache = {}
|
||||
|
||||
|
||||
def get_extensions(client):
|
||||
global extension_cache
|
||||
cache = extension_cache.get(client)
|
||||
if cache:
|
||||
return cache
|
||||
try:
|
||||
resp, body = client.client.get('/extensions')
|
||||
extensions = [x['alias'] for x in body['extensions']]
|
||||
except novaclient.exceptions.NotFound:
|
||||
extensions = []
|
||||
extension_cache[client] = extensions
|
||||
return extensions
|
||||
|
||||
|
||||
def get_flavor(client, min_ram):
|
||||
flavors = [f for f in client.flavors.list() if f.ram >= min_ram]
|
||||
flavors.sort(lambda a, b: cmp(a.ram, b.ram))
|
||||
return flavors[0]
|
||||
|
||||
|
||||
def get_public_ip(server, version=4, floating_ip_pool=None):
|
||||
for addr in server.addresses.get('Ext-Net', []):
|
||||
if addr.get('version') == version: # OVH
|
||||
return addr['addr']
|
||||
if 'os-floating-ips' in get_extensions(server.manager.api):
|
||||
for addr in server.manager.api.floating_ips.list():
|
||||
if addr.instance_id == server.id:
|
||||
return addr.ip
|
||||
# We don't have one - so add one please
|
||||
new_ip = server.manager.api.floating_ips.create(pool=floating_ip_pool)
|
||||
server.add_floating_ip(new_ip)
|
||||
for addr in server.manager.api.floating_ips.list():
|
||||
if addr.instance_id == server.id:
|
||||
return addr.ip
|
||||
for addr in server.addresses.get('public', []):
|
||||
if type(addr) == type(u''): # Rackspace/openstack 1.0
|
||||
return addr
|
||||
if addr['version'] == version: # Rackspace/openstack 1.1
|
||||
return addr['addr']
|
||||
for addr in server.addresses.get('private', []):
|
||||
# HP Cloud
|
||||
if addr['version'] == version and not addr['addr'].startswith('10.'):
|
||||
return addr['addr']
|
||||
return None
|
||||
|
||||
|
||||
def get_href(server):
|
||||
if not hasattr(server, 'links'):
|
||||
return None
|
||||
for link in server.links:
|
||||
if link['rel'] == 'self':
|
||||
return link['href']
|
||||
|
||||
|
||||
def add_public_ip(server):
|
||||
ip = server.manager.api.floating_ips.create()
|
||||
server.add_floating_ip(ip)
|
||||
for count in iterate_timeout(600, "ip to be added"):
|
||||
try:
|
||||
newip = ip.manager.get(ip.id)
|
||||
except:
|
||||
print "Unable to get ip details, will retry"
|
||||
traceback.print_exc()
|
||||
time.sleep(5)
|
||||
continue
|
||||
|
||||
if newip.instance_id == server.id:
|
||||
print 'ip has been added'
|
||||
return
|
||||
|
||||
|
||||
def add_keypair(client, name):
|
||||
key = paramiko.RSAKey.generate(2048)
|
||||
public_key = key.get_name() + ' ' + key.get_base64()
|
||||
kp = client.keypairs.create(name, public_key)
|
||||
return key, kp
|
||||
|
||||
|
||||
def wait_for_resource(wait_resource):
|
||||
last_progress = None
|
||||
last_status = None
|
||||
@@ -190,30 +81,6 @@ def ssh_connect(ip, username, connect_kwargs={}, timeout=60):
|
||||
return None
|
||||
|
||||
|
||||
def delete_server(server):
|
||||
try:
|
||||
if 'os-floating-ips' in get_extensions(server.manager.api):
|
||||
for addr in server.manager.api.floating_ips.list():
|
||||
if addr.instance_id == server.id:
|
||||
server.remove_floating_ip(addr)
|
||||
addr.delete()
|
||||
except:
|
||||
print "Unable to remove floating IP"
|
||||
traceback.print_exc()
|
||||
|
||||
try:
|
||||
if 'os-keypairs' in get_extensions(server.manager.api):
|
||||
for kp in server.manager.api.keypairs.list():
|
||||
if kp.name == server.key_name:
|
||||
kp.delete()
|
||||
except:
|
||||
print "Unable to delete keypair"
|
||||
traceback.print_exc()
|
||||
|
||||
print "Deleting server", server.id
|
||||
server.delete()
|
||||
|
||||
|
||||
def interpret_puppet_exitcodes(rc, output):
|
||||
if rc == 0:
|
||||
# success
|
||||
|
Reference in New Issue
Block a user