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:
Monty Taylor
2015-11-18 14:37:42 -05:00
parent 8b3bb61ae7
commit e14471dcc6
3 changed files with 70 additions and 235 deletions

View File

@@ -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