Extension registration moved to utils

* Class decorator is used for registring extension in nailgun

Change-Id: I00f151321f8ab77c2b0c544d3bde25f0962dffba
This commit is contained in:
Ukov Dmitry 2016-09-06 13:47:37 +03:00
parent 4e5ceb52d3
commit 1bc180e562
3 changed files with 54 additions and 59 deletions

View File

@ -91,7 +91,8 @@ class OpenStackConfigPipeline(BasePipeline):
logger.info("Node {0} config from git {1}".format(uid, common))
return data
# TODO (dukov) Remove decorator extension management is available
@utils.register_extension(u'fuel_external_git')
class ExternalGit(BaseExtension):
name = 'fuel_external_git'
version = '1.0.0'

View File

@ -1,5 +1,8 @@
import os
from nailgun.db import db
from nailgun.db.sqlalchemy.models import Cluster
from nailgun.db.sqlalchemy.models import Release
from nailgun.logger import logger
from fuel_external_git.openstack_config import OpenStackConfig
@ -33,3 +36,24 @@ def deep_merge(dct, merge_dct):
deep_merge(dct[k], merge_dct[k])
else:
dct[k] = merge_dct[k]
# TODO (dukov) Remove this ugly staff once extension management is available
def register_extension(ext_name):
def decorator(cls):
exts = {cl: cl['extensions'] for cl in
list(db().query(Cluster).all()) +
list(db().query(Release).all())}
save = False
for obj, extensions in exts.items():
if u'fuel_external_git' not in extensions:
extensions.append(u'fuel_external_git')
extensions = list(set(extensions))
obj.extensions = extensions
save = True
db().flush()
if save:
db().commit()
return cls
return decorator

View File

@ -1,16 +1,6 @@
import os
from setuptools import setup
from setuptools.command.install import install
try:
from nailgun.db import db
from nailgun.db.sqlalchemy.models import Cluster
from nailgun.db.sqlalchemy.models import Release
no_nailgun = False
except:
no_nailgun = True
def package_files(directory):
@ -24,53 +14,33 @@ extra_files = package_files('fuel_external_git/migrations')
extra_files += package_files('fuel_external_git/templates')
extra_files.append('settings.yaml')
class ExtInstall(install):
@classmethod
def _set_extensions(self, nailgun_objects):
for obj, extensions in nailgun_objects.items():
extensions.append(u'fuel_external_git')
extensions = list(set(extensions))
obj.extensions = extensions
db().flush()
def run(self):
install.run(self)
clusters = {cl: cl['extensions'] for cl in db().query(Cluster).all()}
releases = {rl: rl['extensions'] for rl in db().query(Release).all()}
ExtInstall._set_extensions(clusters)
ExtInstall._set_extensions(releases)
db().commit()
setup(
name='fuel_external_git',
version='1.0',
description='Nailgun extension which uses git repo for config files',
author='Dmitry Ukov',
author_email='dukov@mirantis.com',
url='http://example.com',
classifiers=['Development Status :: 3 - Alpha',
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Environment :: Console',
],
packages=['fuel_external_git'],
package_data={'fuel_external_git': extra_files},
cmdclass={'install': ExtInstall} if not no_nailgun else {},
entry_points={
'nailgun.extensions': [
'fuel_external_git = fuel_external_git.extension:ExternalGit',
],
'fuelclient': [
'gitrepo_list = fuel_external_git.fuelclient:GitRepoList',
'gitrepo_create = fuel_external_git.fuelclient:AddRepo',
'gitrepo_delete = fuel_external_git.fuelclient:DeleteRepo',
'gitrepo_update = fuel_external_git.fuelclient:UpdateRepo',
'gitrepo_init = fuel_external_git.fuelclient:InitRepo',
'gitrepo_get_configs = fuel_external_git.fuelclient:DownloadConfgs',
]
},
zip_safe=False,
name='fuel_external_git',
version='1.0',
description='Nailgun extension which uses git repo for config files',
author='Dmitry Ukov',
author_email='dukov@mirantis.com',
url='http://example.com',
classifiers=['Development Status :: 3 - Alpha',
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Environment :: Console',
],
packages=['fuel_external_git'],
package_data={'fuel_external_git': extra_files},
entry_points={
'nailgun.extensions': [
'fuel_external_git = fuel_external_git.extension:ExternalGit',
],
'fuelclient': [
'gitrepo_list = fuel_external_git.fuelclient:GitRepoList',
'gitrepo_create = fuel_external_git.fuelclient:AddRepo',
'gitrepo_delete = fuel_external_git.fuelclient:DeleteRepo',
'gitrepo_update = fuel_external_git.fuelclient:UpdateRepo',
'gitrepo_init = fuel_external_git.fuelclient:InitRepo',
'gitrepo_get_configs = fuel_external_git.fuelclient:DownloadConfgs',
]
},
zip_safe=False,
)