Adopt stub webserver to new bareon deployemnet protocol
To avoid preinjected SSH key on bareon image built time new deployement protocol extesion was added into bareon-ironic and bareon projects. This change adopt our "stub web server" to use this new SSH key injection schema. Change-Id: I916326f4e7e53bacde79e7c35284bf68ca053d72
This commit is contained in:
parent
a952bbf604
commit
b0c22a2505
@ -37,6 +37,7 @@ For POST requests:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import SimpleHTTPServer
|
import SimpleHTTPServer
|
||||||
import SocketServer
|
import SocketServer
|
||||||
@ -45,6 +46,7 @@ import pkg_resources
|
|||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from ramdisk_func_test import conf
|
from ramdisk_func_test import conf
|
||||||
|
|
||||||
@ -71,30 +73,57 @@ class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
LOG.info('Got GET request: %s', self.path)
|
LOG.info('Got GET request: %s', self.path)
|
||||||
fake_check = re.match(r'/fake', self.path)
|
fake_check = re.match(r'/fake', self.path)
|
||||||
tenant_images_check = re.match(r'/tenant_images/(.*)$', self.path)
|
tenant_images_match = re.match(r'/tenant_images/(.*)$', self.path)
|
||||||
|
deploy_steps_match = re.match(
|
||||||
|
r'/v1/nodes/([^/]*)/vendor_passthru/deploy_steps', self.path)
|
||||||
|
|
||||||
if fake_check is not None:
|
if fake_check is not None:
|
||||||
LOG.info("This is 'fake' request.")
|
LOG.info("This is 'fake' request.")
|
||||||
self.path = os.path.join(self.ctx.htdocs, 'stubfile')
|
self.path = os.path.join(self.ctx.htdocs, 'stubfile')
|
||||||
elif tenant_images_check is not None:
|
elif tenant_images_match is not None:
|
||||||
LOG.info("This is 'tenant-images' request: %s", self.path)
|
LOG.info("This is 'tenant-images' request: %s", self.path)
|
||||||
tenant_image = tenant_images_check.group(1)
|
tenant_image = tenant_images_match.group(1)
|
||||||
self.path = os.path.join(self.ctx.images_path, tenant_image)
|
self.path = os.path.join(self.ctx.images_path, tenant_image)
|
||||||
|
elif deploy_steps_match is not None:
|
||||||
|
with open('{}.pub'.format(self.ctx.ssh_key)) as data:
|
||||||
|
ssh_key = data.read().rstrip()
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'name': 'inject-ssh-keys',
|
||||||
|
'payload': {
|
||||||
|
'ssh-keys': {
|
||||||
|
'root': [ssh_key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tmp = tempfile.NamedTemporaryFile()
|
||||||
|
json.dump(data, tmp)
|
||||||
|
tmp.flush()
|
||||||
|
|
||||||
|
self.path = tmp.name
|
||||||
|
|
||||||
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
callback_check = re.search(
|
deploy_steps_match = re.match(
|
||||||
|
r'/v1/nodes/([^/]*)/vendor_passthru/deploy_steps', self.path)
|
||||||
|
callback_match = re.search(
|
||||||
r'/v1/nodes/([^/]*)/vendor_passthru', self.path)
|
r'/v1/nodes/([^/]*)/vendor_passthru', self.path)
|
||||||
|
|
||||||
if callback_check is not None:
|
if deploy_steps_match is not None:
|
||||||
|
tmp = tempfile.NamedTemporaryFile()
|
||||||
|
json.dump({'url': None}, tmp)
|
||||||
|
tmp.flush()
|
||||||
|
|
||||||
|
self.path = tmp.name
|
||||||
|
elif callback_match is not None:
|
||||||
callback_file_path = os.path.join(
|
callback_file_path = os.path.join(
|
||||||
CONF.ramdisk_func_test_workdir, callback_check.group(1),
|
CONF.ramdisk_func_test_workdir, callback_match.group(1),
|
||||||
'callback')
|
'callback')
|
||||||
open(callback_file_path, 'a').close()
|
open(callback_file_path, 'a').close()
|
||||||
LOG.info("Got callback: %s", self.path)
|
LOG.info("Got callback: %s", self.path)
|
||||||
|
|
||||||
self.path = os.path.join(self.ctx.htdocs, 'stubfile')
|
self.path = os.path.join(self.ctx.htdocs, 'stubfile')
|
||||||
|
|
||||||
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
||||||
|
|
||||||
def send_head(self):
|
def send_head(self):
|
||||||
@ -147,6 +176,7 @@ class Context(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.images_path = CONF.tenant_images_dir
|
self.images_path = CONF.tenant_images_dir
|
||||||
self.htdocs = pkg_resources.resource_filename(__name__, 'data')
|
self.htdocs = pkg_resources.resource_filename(__name__, 'data')
|
||||||
|
self.ssh_key = os.path.join(CONF.image_build_dir, CONF.ramdisk_key)
|
||||||
|
|
||||||
|
|
||||||
def signal_term_handler(signal, frame):
|
def signal_term_handler(signal, frame):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user