Source code for pebbles.drivers.provisioning.dummy_driver
import json
from random import randint
import os
import time
from pebbles.drivers.provisioning import base_driver
from pebbles.client import PBClient
[docs]class DummyDriver(base_driver.ProvisioningDriverBase):
""" Dummy driver mostly pretends to be a real driver for system testing
and development purposes.
It runs a time-consuming process (ping) using run_logged_process, writes the public SSH
key to the user for the user to a file and logs from the ping to the right places.
It reports a random IP address.
"""
def get_configuration(self):
from pebbles.drivers.provisioning.dummy_driver_config import CONFIG
return CONFIG
def get_running_instance_logs(self, token, instance_id):
running_log_uploader = self.create_prov_log_uploader(token, instance_id, log_type='running')
running_log_uploader.info('dummy running logs')
def do_update_connectivity(self, token, instance_id):
pass
def do_provision(self, token, instance_id):
pbclient = PBClient(token, self.config['INTERNAL_API_BASE_URL'], ssl_verify=False)
log_uploader = self.create_prov_log_uploader(token, instance_id, log_type='provisioning')
self.logger.info('faking provisioning')
log_uploader.info('dummy provisioning for 5 seconds\n')
time.sleep(5)
log_uploader.info('dummy provisioning completed\n')
public_ip = '%s.%s.%s.%s' % (randint(1, 254), randint(1, 254), randint(1, 254), randint(1, 254))
instance_data = {
'endpoints': [
{'name': 'SSH', 'access': 'ssh cloud-user@%s' % public_ip},
{'name': 'Some Web Interface', 'access': 'http://%s/service-x' % public_ip},
]
}
pbclient.do_instance_patch(
instance_id,
{
'public_ip': public_ip, 'instance_data': json.dumps(instance_data)
}
)
def do_deprovision(self, token, instance_id):
pbclient = PBClient(token, self.config['INTERNAL_API_BASE_URL'], ssl_verify=False)
instance = pbclient.get_instance_description(instance_id)
cluster_name = instance['name']
instance_dir = '%s/%s' % (self.config['INSTANCE_DATA_DIR'], cluster_name)
log_uploader = self.create_prov_log_uploader(token, instance_id, log_type='deprovisioning')
self.logger.info('faking deprovisioning\n')
log_uploader.info('dummy deprovisioning for 5 seconds\n')
time.sleep(5)
log_uploader.info('dummy deprovisioning completed\n')
# use instance id as a part of the name to make tombstones always unique
if os.path.isdir(instance_dir):
os.rename(instance_dir, '%s.deleted.%s' % (instance_dir, instance_id))
def do_housekeep(self, token):
pass