Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi
diff --git a/planetstack/observer/steps/sync_network_deployments.py b/planetstack/observer/steps/sync_network_deployments.py
index a8d6262..d27430d 100644
--- a/planetstack/observer/steps/sync_network_deployments.py
+++ b/planetstack/observer/steps/sync_network_deployments.py
@@ -29,6 +29,10 @@
network_deploy_lookup[network_deployment.network].append(network_deployment.deployment)
for network in Network.objects.filter():
+ # ignore networks that have
+ # template.visibility = private and template.translation = none
+ if network.template.visibility == 'private' and not network.template.translation == 'none':
+ continue
expected_deployments = slice_deploy_lookup[network.owner]
for expected_deployment in expected_deployments:
if network not in network_deploy_lookup or \
diff --git a/planetstack/observer/steps/sync_slice_deployments.py b/planetstack/observer/steps/sync_slice_deployments.py
index 01a10dd..c7b20ce 100644
--- a/planetstack/observer/steps/sync_slice_deployments.py
+++ b/planetstack/observer/steps/sync_slice_deployments.py
@@ -89,41 +89,6 @@
tenant=tenant.name,
deployment=slice_deployment.deployment.name)
- # create a public key for the slice creator
- if deployment_user.user.public_key:
- keyname = deployment_user.user.email.lower().replace('@', 'AT').replace('.', '') +\
- slice_deployment.slice.name
- slice_deployment.keyname = keyname
- key_fields = {'name': keyname,
- 'public_key': deployment_user.user.public_key}
- client_driver.create_keypair(**key_fields)
-
- # create network
- #network = client_driver.create_network(slice_deployment.slice.name)
- #slice_deployment.network_id = network['id']
-
- # create router
- #router = client_driver.create_router(slice_deployment.slice.name)
- #slice_deployment.router_id = router['id']
-
- # create subnet for slice's private network
- #next_subnet = self.get_next_subnet(deployment=slice_deployment.deployment.name)
- #cidr = str(next_subnet.cidr)
- #ip_version = next_subnet.version
- #start = str(next_subnet[2])
- #end = str(next_subnet[-2])
- #subnet = client_driver.create_subnet(name=slice_deployment.slice.name,
- # network_id = network['id'],
- # cidr_ip = cidr,
- # ip_version = ip_version,
- # start = start,
- # end = end)
- #slice_deployment.subnet_id = subnet['id']
- # add subnet as interface to slice's router
- #client_driver.add_router_interface(router['id'], subnet['id'])
- # add external route
- #client_driver.add_external_route(subnet)
-
if slice_deployment.id and slice_deployment.tenant_id:
driver = self.driver.admin_driver(deployment=slice_deployment.deployment.name)
diff --git a/planetstack/observer/steps/sync_slivers.py b/planetstack/observer/steps/sync_slivers.py
index 3759747..473b3ac 100644
--- a/planetstack/observer/steps/sync_slivers.py
+++ b/planetstack/observer/steps/sync_slivers.py
@@ -67,7 +67,15 @@
image_id = image['id']
# look up key name at the deployment
+ # create/fetch keypair
keyname = None
+ if sliver.creator.public_key:
+ keyname = sliver.creator.email.lower().replace('@', 'AT').replace('.', '') +\
+ sliver.slice.name
+ key_fields = {'name': keyname,
+ 'public_key': sliver.creator.public_key}
+ driver.create_keypair(**key_fields)
+
slice_deployments = SliceDeployments.objects.filter(slice = sliver.slice,
deployment = sliver.deploymentNetwork)
for slice_deployment in slice_deployments:
diff --git a/planetstack/observer/steps/sync_user_deployments.py b/planetstack/observer/steps/sync_user_deployments.py
index cbbcb17..39943f7 100644
--- a/planetstack/observer/steps/sync_user_deployments.py
+++ b/planetstack/observer/steps/sync_user_deployments.py
@@ -29,7 +29,6 @@
for user_deployment in UserDeployments.objects.all():
user_deploy_lookup[user_deployment.user].append(user_deployment.deployment)
- user_deployments = []
all_deployments = Deployment.objects.filter()
for user in User.objects.all():
if user.is_admin:
@@ -45,13 +44,14 @@
expected_deployment not in user_deploy_lookup[user]:
# add new record
ud = UserDeployments(user=user, deployment=expected_deployment)
- user_deployments.append(ud)
+ ud.save()
+ #user_deployments.append(ud)
#else:
# # update existing record
# ud = UserDeployments.objects.get(user=user, deployment=expected_deployment)
# user_deployments.append(ud)
- return user_deployments
+ return UserDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, user_deployment):
logger.info("sync'ing user %s at deployment %s" % (user_deployment.user, user_deployment.deployment.name))
@@ -96,5 +96,3 @@
# user_driver.create_keypair(**key_fields)
user_deployment.save()
- user = User.objects.get(id=user_deployment.user.id)
- user.save()
diff --git a/planetstack/observer/steps/sync_users.py b/planetstack/observer/steps/sync_users.py
index 2550104..71f9c0f 100644
--- a/planetstack/observer/steps/sync_users.py
+++ b/planetstack/observer/steps/sync_users.py
@@ -4,7 +4,7 @@
from django.db.models import F, Q
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User
+from core.models.user import User, UserDeployments
class SyncUsers(OpenStackSyncStep):
provides=[User]
@@ -14,5 +14,7 @@
return User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, user):
- #user.save()
- pass
+ for user_deployment in UserDeployments.objects.filter(user=user):
+ # bump the 'updated' field so user account are updated across
+ # deployments.
+ user_deployment.save()
diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py
index b8faf25..f5abb02 100644
--- a/planetstack/openstack/driver.py
+++ b/planetstack/openstack/driver.py
@@ -417,12 +417,9 @@
if not security_group:
security_group = self.config.nova_default_security_group
- personality = []
- if pubkeys:
- personality.append({
- 'path': '/root/.ssh/authorized_keys',
- 'contents':"\n".join(pubkeys),
- })
+ files = {}
+ #if pubkeys:
+ # files["/root/.ssh/authorized_keys"] = "\n".join(pubkeys).encode('base64')
hints = {}
availability_zone = None
if hostname:
@@ -433,7 +430,7 @@
flavor=flavor.id,
image=image_id,
security_group = security_group,
- personality = personality,
+ #files = files,
scheduler_hints=hints,
availability_zone=availability_zone,
nics=nics,
diff --git a/planetstack/planetstack-backend.py b/planetstack/planetstack-backend.py
index 7d94b67..8a2eff2 100755
--- a/planetstack/planetstack-backend.py
+++ b/planetstack/planetstack-backend.py
@@ -1,10 +1,41 @@
#!/usr/bin/env python
import os
+import argparse
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
-from observer.backend import Backend
+from observer.backend import Backend
+from planetstack.config import Config
-if __name__ == '__main__':
+config = Config()
+
+# after http://www.erlenstar.demon.co.uk/unix/faq_2.html
+def daemon():
+ """Daemonize the current process."""
+ if os.fork() != 0: os._exit(0)
+ os.setsid()
+ if os.fork() != 0: os._exit(0)
+ os.umask(0)
+ devnull = os.open(os.devnull, os.O_RDWR)
+ os.dup2(devnull, 0)
+ # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull
+ logdir=os.path.dirname(config.observer_logfile)
+ # when installed in standalone we might not have httpd installed
+ if not os.path.isdir(logdir): os.mkdir(logdir)
+ crashlog = os.open('%s'%config.observer_logfile, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644)
+ os.dup2(crashlog, 1)
+ os.dup2(crashlog, 2)
+
+def main():
+ # Generate command line parser
+ parser = argparse.ArgumentParser(usage='%(prog)s [options]')
+ parser.add_argument('-d', '--daemon', dest='daemon', action='store_true', default=False,
+ help='Run as daemon.')
+ args = parser.parse_args()
+
+ if args.daemon: daemon()
backend = Backend()
- backend.run()
-
+ backend.run()
+
+if __name__ == '__main__':
+
+ main()
diff --git a/planetstack/plstackapi_config b/planetstack/plstackapi_config
index 6abdaaf..5d95231 100644
--- a/planetstack/plstackapi_config
+++ b/planetstack/plstackapi_config
@@ -19,6 +19,7 @@
omf_enabled=0
mail_support_address=support@localhost
nova_enabled=True
+logfile=/var/log/planetstack.log
[nova]
admin_user=admin@domain.com
@@ -31,3 +32,4 @@
[observer]
dependency_graph=/opt/planetstack/model-deps
+logfile=/var/log/planetstack_backend.log