Migrated extension to Fuel 9.1 support
* Added new decorators to handler * Pipeline updated with method from node deployment info * Fixed clone via ssh procedure. GIT_SSH_COMMAND is supported noly by git 2.3+ but 1.8 is installed on master node Change-Id: Icfefa281ce8fa549412a6b219f28abb8d84c6dd8
This commit is contained in:
parent
8368289a69
commit
78fec444ad
|
@ -28,7 +28,7 @@ from nailgun.logger import logger
|
|||
class OpenStackConfigPipeline(BasePipeline):
|
||||
# TODO(dukov) add cluster remove callback
|
||||
@classmethod
|
||||
def process_deployment(cls, data, cluster, nodes, **kwargs):
|
||||
def process_deployment_for_node(cls, node, node_data):
|
||||
"""Updating deployment info
|
||||
|
||||
Genereate OpenStack configuration hash based on configuration files
|
||||
|
@ -46,9 +46,9 @@ class OpenStackConfigPipeline(BasePipeline):
|
|||
DEFAULT/crypt_strength:
|
||||
value: 6000
|
||||
"""
|
||||
repo = GitRepo.get_by_cluster_id(cluster.id)
|
||||
repo = GitRepo.get_by_cluster_id(node.cluster_id)
|
||||
if not repo:
|
||||
return data
|
||||
return node_data
|
||||
GitRepo.checkout(repo)
|
||||
repo_path = os.path.join(const.REPOS_DIR, repo.repo_name)
|
||||
resource_mapping = ExternalGit.ext_settings['resource_mapping']
|
||||
|
@ -86,23 +86,22 @@ class OpenStackConfigPipeline(BasePipeline):
|
|||
|
||||
logger.debug("Override configs {}".format(override_configs))
|
||||
|
||||
for node_config in data:
|
||||
common = copy.deepcopy(global_config)
|
||||
roles = node_config['roles']
|
||||
uid = node_config['uid']
|
||||
logger.debug("Node {0} roles {1}".format(uid, roles))
|
||||
for role in roles:
|
||||
utils.deep_merge(common,
|
||||
override_configs['roles'].get(role, {}))
|
||||
|
||||
logger.debug("Config Node {0} with roles {1}".format(uid, common))
|
||||
|
||||
common = copy.deepcopy(global_config)
|
||||
roles = node_data['roles']
|
||||
uid = node_data['uid']
|
||||
logger.debug("Node {0} roles {1}".format(uid, roles))
|
||||
for role in roles:
|
||||
utils.deep_merge(common,
|
||||
override_configs['nodes'].get(uid, {}))
|
||||
override_configs['roles'].get(role, {}))
|
||||
|
||||
node_config['configuration'] = common
|
||||
logger.info("Node {0} config from git {1}".format(uid, common))
|
||||
return data
|
||||
logger.debug("Config Node {0} with roles {1}".format(uid, common))
|
||||
|
||||
utils.deep_merge(common,
|
||||
override_configs['nodes'].get(uid, {}))
|
||||
|
||||
node_data['configuration'] = common
|
||||
logger.info("Node {0} config from git {1}".format(uid, common))
|
||||
return node_data
|
||||
|
||||
|
||||
# TODO(dukov) Remove decorator extension management is available
|
||||
|
|
|
@ -16,10 +16,12 @@ from fuel_external_git.objects import GitRepoCollection
|
|||
|
||||
from nailgun.api.v1.handlers.base import BaseHandler
|
||||
from nailgun.api.v1.handlers.base import CollectionHandler
|
||||
from nailgun.api.v1.handlers.base import content
|
||||
from nailgun.api.v1.handlers.base import handle_errors
|
||||
from nailgun.api.v1.handlers.base import serialize
|
||||
from nailgun.api.v1.handlers.base import SingleHandler
|
||||
from nailgun.api.v1.handlers.base import validate
|
||||
from nailgun.api.v1.validators import base
|
||||
from nailgun.errors import errors
|
||||
from nailgun import errors
|
||||
from nailgun import objects
|
||||
|
||||
REPOS_DIR = '/var/lib/fuel_repos'
|
||||
|
@ -63,6 +65,9 @@ class GitRepoHandler(SingleHandler):
|
|||
single = GitRepo
|
||||
validator = GitRepoValidator
|
||||
|
||||
@handle_errors
|
||||
@validate
|
||||
@serialize
|
||||
def GET(self, cluster_id, obj_id):
|
||||
""":returns: JSONized REST object.
|
||||
|
||||
|
@ -74,7 +79,9 @@ class GitRepoHandler(SingleHandler):
|
|||
obj = self.get_object_or_404(self.single, obj_id)
|
||||
return self.single.to_json(obj)
|
||||
|
||||
@content
|
||||
@handle_errors
|
||||
@validate
|
||||
@serialize
|
||||
def PUT(self, cluster_id, obj_id):
|
||||
""":returns: JSONized REST object.
|
||||
|
||||
|
@ -100,7 +107,8 @@ class GitRepoHandler(SingleHandler):
|
|||
"""
|
||||
return self.PUT(cluster_id, obj_id)
|
||||
|
||||
@content
|
||||
@handle_errors
|
||||
@serialize
|
||||
def DELETE(self, cluster_id, obj_id):
|
||||
""":returns: JSONized REST object.
|
||||
|
||||
|
@ -114,7 +122,9 @@ class GitRepoHandler(SingleHandler):
|
|||
|
||||
class GitRepoInit(BaseHandler):
|
||||
|
||||
@content
|
||||
@handle_errors
|
||||
@validate
|
||||
@serialize
|
||||
def PUT(self, env_id, obj_id):
|
||||
""":returns: JSONized REST object.
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ from git import exc
|
|||
from git import Repo
|
||||
|
||||
from nailgun.db import db
|
||||
from nailgun.errors import errors
|
||||
from nailgun import errors
|
||||
from nailgun.logger import logger
|
||||
from nailgun.objects import Cluster
|
||||
from nailgun.objects import NailgunCollection
|
||||
|
@ -57,7 +57,7 @@ class GitRepo(NailgunObject):
|
|||
except exc.NoSuchPathError:
|
||||
logger.debug("Repo folder does not exist. Cloning repo")
|
||||
self._create_key_file(instance.repo_name, instance.user_key)
|
||||
os.environ['GIT_SSH_COMMAND'] = \
|
||||
os.environ['GIT_SSH'] = \
|
||||
self._get_ssh_cmd(instance.repo_name)
|
||||
|
||||
repo_path = os.path.join(const.REPOS_DIR, instance.repo_name)
|
||||
|
@ -75,7 +75,7 @@ class GitRepo(NailgunObject):
|
|||
shutil.rmtree(repo_path)
|
||||
|
||||
self._create_key_file(data['repo_name'], data['user_key'])
|
||||
os.environ['GIT_SSH_COMMAND'] = self._get_ssh_cmd(data['repo_name'])
|
||||
os.environ['GIT_SSH'] = self._get_ssh_cmd(data['repo_name'])
|
||||
repo = Repo.clone_from(data['git_url'], repo_path)
|
||||
|
||||
instance = super(GitRepo, self).create(data)
|
||||
|
@ -97,7 +97,7 @@ class GitRepo(NailgunObject):
|
|||
logger.debug('Key file does not exist. Creating...')
|
||||
self._create_key_file(instance.repo_name)
|
||||
|
||||
with instance.repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd):
|
||||
with instance.repo.git.custom_environment(GIT_SSH=ssh_cmd):
|
||||
commit = instance.repo.remotes.origin.fetch(refspec=instance.ref)
|
||||
commit = commit[0].commit
|
||||
instance.repo.head.reference = commit
|
||||
|
@ -141,7 +141,7 @@ class GitRepo(NailgunObject):
|
|||
|
||||
ssh_cmd = self._get_ssh_cmd(instance.repo_name)
|
||||
with instance.repo.git.custom_environment(
|
||||
GIT_SSH_COMMAND=ssh_cmd):
|
||||
GIT_SSH=ssh_cmd):
|
||||
res = instance.repo.remotes.origin.push(
|
||||
refspec='HEAD:' + instance.ref)
|
||||
logger.debug("Push result {}".format(res[0].flags))
|
||||
|
@ -166,7 +166,17 @@ class GitRepo(NailgunObject):
|
|||
@classmethod
|
||||
def _get_ssh_cmd(self, repo_name):
|
||||
key_path = self._get_key_path(repo_name)
|
||||
return 'ssh -o StrictHostKeyChecking=no -i ' + key_path
|
||||
git_ssh_file = os.path.join(const.REPOS_DIR, repo_name + '.sh')
|
||||
with open(git_ssh_file, 'w') as ssh_wrap:
|
||||
ssh_wrap.write("#!/bin/bash\n")
|
||||
ssh_wrap.write((
|
||||
"exec /usr/bin/ssh "
|
||||
"-o UserKnownHostsFile=/dev/null "
|
||||
"-o StrictHostKeyChecking=no "
|
||||
"-i {0} \"$@\"".format(key_path)
|
||||
))
|
||||
os.chmod(git_ssh_file, 0o755)
|
||||
return git_ssh_file
|
||||
|
||||
|
||||
class GitRepoCollection(NailgunCollection):
|
||||
|
|
Loading…
Reference in New Issue