Extension registration moved to utils
* Class decorator is used for registring extension in nailgun Change-Id: I00f151321f8ab77c2b0c544d3bde25f0962dffba
This commit is contained in:
parent
4e5ceb52d3
commit
1bc180e562
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
86
setup.py
86
setup.py
|
@ -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,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue