summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorMichael Polenchuk <mpolenchuk@mirantis.com>2017-03-28 07:21:54 +0000
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>2017-03-28 19:34:52 +0000
commit68898be998129ab6793228000f3f4528783359bf (patch)
treeaa95ffca7cb6a9f3145ec55dc6510874f16808f6 /build
parent0bc3d7a2e72d7b6c48ccb3e3c4512c592658a9b3 (diff)
Revert "Revert: Blueprint "bp/distributed-serialization""danube.1.RC1danube.1.0
This reverts commit 8b28c44a4be6beef8a71e672f543001bcc0a080f. The issue has been fixed in upstream. Change-Id: Id4ad8fb7b1ec887f8d8d1d5b18a9b33a73bda10c Signed-off-by: Michael Polenchuk <mpolenchuk@mirantis.com> (cherry picked from commit 4a360c5076f839c8b700638f9b85c3e630894826)
Diffstat (limited to 'build')
-rw-r--r--build/f_repos/patch/fuel-web/0001-Revert-Packages-for-distributed-serialization-added-.patch72
-rw-r--r--build/f_repos/patch/fuel-web/0002-Revert-Distributed-serialization-implementation.patch1006
-rw-r--r--build/f_repos/patch/fuel-web/0003-Revert-Introduce-proper-packaging-for-fuel-nailgun-d.patch292
3 files changed, 0 insertions, 1370 deletions
diff --git a/build/f_repos/patch/fuel-web/0001-Revert-Packages-for-distributed-serialization-added-.patch b/build/f_repos/patch/fuel-web/0001-Revert-Packages-for-distributed-serialization-added-.patch
deleted file mode 100644
index dbd820d15..000000000
--- a/build/f_repos/patch/fuel-web/0001-Revert-Packages-for-distributed-serialization-added-.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Sun, 26 Mar 2017 19:17:40 +0200
-Subject: [PATCH] Revert "Packages for distributed serialization added to
- provision"
-
-This reverts commit 333f2b62ea668d80c6b3f33bf2df67bfa24030b8.
----
- nailgun/nailgun/fixtures/openstack.yaml | 43 +--------------------------------
- 1 file changed, 1 insertion(+), 42 deletions(-)
-
-diff --git a/nailgun/nailgun/fixtures/openstack.yaml b/nailgun/nailgun/fixtures/openstack.yaml
-index 8b4d763..c9cad75 100644
---- a/nailgun/nailgun/fixtures/openstack.yaml
-+++ b/nailgun/nailgun/fixtures/openstack.yaml
-@@ -2126,7 +2126,7 @@
- weight: 10
- type: "textarea"
- value: |
-- acl [32/168]
-+ acl
- anacron
- bash-completion
- bridge-utils
-@@ -2155,48 +2155,7 @@
- openssh-client
- openssh-server
- puppet
-- python-alembic
- python-amqp
-- python-amqplib
-- python-anyjson
-- python-babel
-- python-cinderclient
-- python-crypto
-- python-decorator
-- python-distributed
-- python-fysom
-- python-iso8601
-- python-jinja2
-- python-jsonschema
-- python-keystoneclient
-- python-keystonemiddleware
-- python-kombu
-- python-mako
-- python-markupsafe
-- python-migrate
-- python-netaddr
-- python-netifaces
-- python-networkx
-- python-novaclient
-- python-oslo-config
-- python-oslo-db
-- python-oslo-serialization
-- python-paste
-- python-ply
-- python-psycopg2
-- python-pydot-ng
-- python-requests
-- python-simplejson
-- python-six
-- python-sqlalchemy
-- python-stevedore
-- python-tz
-- python-urllib3
-- python-uwsgidecorators
-- python-webpy
-- python-wsgilog
-- python-yaml
-- python-yaql
- ruby-augeas
- ruby-ipaddress
- ruby-json
diff --git a/build/f_repos/patch/fuel-web/0002-Revert-Distributed-serialization-implementation.patch b/build/f_repos/patch/fuel-web/0002-Revert-Distributed-serialization-implementation.patch
deleted file mode 100644
index 152197e74..000000000
--- a/build/f_repos/patch/fuel-web/0002-Revert-Distributed-serialization-implementation.patch
+++ /dev/null
@@ -1,1006 +0,0 @@
-From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Sun, 26 Mar 2017 19:16:47 +0200
-Subject: [PATCH] Revert "Distributed serialization implementation"
-
-This reverts commit f3c440f76961ef161ab6650b3a41a3c775073ba0.
----
- nailgun/nailgun/consts.py | 4 -
- nailgun/nailgun/fixtures/openstack.yaml | 49 ---
- nailgun/nailgun/lcm/task_serializer.py | 15 +-
- nailgun/nailgun/lcm/transaction_serializer.py | 317 +------------------
- .../nailgun/orchestrator/deployment_serializers.py | 1 -
- nailgun/nailgun/settings.py | 22 +-
- nailgun/nailgun/settings.yaml | 9 -
- .../fuel_statistics/installation_info.py | 10 -
- .../integration/test_cluster_changes_handler.py | 3 -
- .../test/unit/test_lcm_transaction_serializer.py | 351 +--------------------
- nailgun/requirements.txt | 2 -
- 11 files changed, 14 insertions(+), 769 deletions(-)
-
-diff --git a/nailgun/nailgun/consts.py b/nailgun/nailgun/consts.py
-index 1a2f09f..5490d6c 100644
---- a/nailgun/nailgun/consts.py
-+++ b/nailgun/nailgun/consts.py
-@@ -528,7 +528,3 @@ HYPERVISORS = Enum(
- )
-
- DPDK_DRIVER_IN_SRIOV_CASE = 'vfio-pci'
--
--SERIALIZATION_POLICY = Enum(
-- 'distributed'
--)
-diff --git a/nailgun/nailgun/fixtures/openstack.yaml b/nailgun/nailgun/fixtures/openstack.yaml
-index 5557710..8b4d763 100644
---- a/nailgun/nailgun/fixtures/openstack.yaml
-+++ b/nailgun/nailgun/fixtures/openstack.yaml
-@@ -1114,55 +1114,6 @@
- group: "security"
- weight: 20
- type: "radio"
-- serialization_policy:
-- value: "default"
-- values:
-- - data: "default"
-- label: "Default serialization"
-- description: "Run serialization on the master node only"
-- - data: "distributed"
-- label: "Distributed serialization"
-- description: "Run serialization on the master and environment nodes. Nodes for serialization are selected only form that environment for wich serialization is performing."
-- label: "Serialization policy"
-- group: "general"
-- weight: 30
-- type: "radio"
-- ds_use_discover:
-- group: "general"
-- label: "Use discovered nodes as workers for serialization"
-- type: "checkbox"
-- value: true
-- weight: 31
-- restrictions:
-- - condition: "settings:common.serialization_policy.value != 'distributed'"
-- action: "hide"
-- ds_use_provisioned:
-- group: "general"
-- label: "Use provisioned nodes as workers for serialization"
-- type: "checkbox"
-- value: true
-- weight: 32
-- restrictions:
-- - condition: "settings:common.serialization_policy.value != 'distributed'"
-- action: "hide"
-- ds_use_error:
-- group: "general"
-- label: "Use nodes in error state as workers for serialization"
-- type: "checkbox"
-- value: true
-- weight: 33
-- restrictions:
-- - condition: "settings:common.serialization_policy.value != 'distributed'"
-- action: "hide"
-- ds_use_ready:
-- group: "general"
-- label: "Use ready nodes as workers for serialization"
-- type: "checkbox"
-- value: false
-- weight: 34
-- restrictions:
-- - condition: "settings:common.serialization_policy.value != 'distributed'"
-- action: "hide"
- public_network_assignment:
- metadata:
- weight: 10
-diff --git a/nailgun/nailgun/lcm/task_serializer.py b/nailgun/nailgun/lcm/task_serializer.py
-index 0d70f36..c004115 100644
---- a/nailgun/nailgun/lcm/task_serializer.py
-+++ b/nailgun/nailgun/lcm/task_serializer.py
-@@ -110,8 +110,6 @@ class Context(object):
- return evaluate
-
- def get_formatter_context(self, node_id):
-- # TODO(akislitsky) remove formatter context from the
-- # tasks serialization workflow
- data = self._transaction.get_new_data(node_id)
- return {
- 'CLUSTER_ID': data.get('cluster', {}).get('id'),
-@@ -149,14 +147,9 @@ class DeploymentTaskSerializer(object):
- :return: the result
- """
-
-- def serialize(self, node_id, formatter_context=None):
-- """Serialize task in expected by orchestrator format
-+ def serialize(self, node_id):
-+ """Serialize task in expected by orchestrator format.
-
-- If serialization is performed on the remote worker
-- we should pass formatter_context parameter with values
-- from the master node settings
--
-- :param formatter_context: formatter context
- :param node_id: the target node_id
- """
-
-@@ -164,12 +157,10 @@ class DeploymentTaskSerializer(object):
- "serialize task %s for node %s",
- self.task_template['id'], node_id
- )
-- formatter_context = formatter_context \
-- or self.context.get_formatter_context(node_id)
- task = utils.traverse(
- self.task_template,
- utils.text_format_safe,
-- formatter_context,
-+ self.context.get_formatter_context(node_id),
- {
- 'yaql_exp': self.context.get_yaql_interpreter(
- node_id, self.task_template['id'])
-diff --git a/nailgun/nailgun/lcm/transaction_serializer.py b/nailgun/nailgun/lcm/transaction_serializer.py
-index 32953c1..c02146b 100644
---- a/nailgun/nailgun/lcm/transaction_serializer.py
-+++ b/nailgun/nailgun/lcm/transaction_serializer.py
-@@ -14,21 +14,13 @@
- # License for the specific language governing permissions and limitations
- # under the License.
-
--import datetime
-+from distutils.version import StrictVersion
- import multiprocessing
--import os
--from Queue import Queue
--import shutil
--import tempfile
-
--import distributed
--from distutils.version import StrictVersion
- import six
--import toolz
-
- from nailgun import consts
- from nailgun import errors
--from nailgun.lcm.task_serializer import Context
- from nailgun.lcm.task_serializer import TasksSerializersFactory
- from nailgun.logger import logger
- from nailgun.settings import settings
-@@ -136,308 +128,7 @@ class MultiProcessingConcurrencyPolicy(object):
- pool.join()
-
-
--def _distributed_serialize_tasks_for_node(formatter_contexts_idx,
-- node_and_tasks, scattered_data):
-- """Remote serialization call for DistributedProcessingPolicy
--
-- Code of the function is copied to the workers and executed there, thus
-- we are including all required imports inside the function.
--
-- :param formatter_contexts_idx: dict of formatter contexts with node_id
-- value as key
-- :param node_and_tasks: list of node_id, task_data tuples
-- :param scattered_data: feature object, that points to data copied to
-- workers
-- :return: [(node_id, serialized), error]
-- """
--
-- try:
-- factory = TasksSerializersFactory(scattered_data['context'])
--
-- # Restoring settings
-- settings.config = scattered_data['settings_config']
-- for k in formatter_contexts_idx:
-- formatter_contexts_idx[k]['SETTINGS'] = settings
--
-- except Exception as e:
-- logger.exception("Distributed serialization failed")
-- return [((None, None), e)]
--
-- result = []
--
-- for node_and_task in node_and_tasks:
--
-- node_id = None
-- try:
-- node_id, task = node_and_task
--
-- logger.debug("Starting distributed node %s task %s serialization",
-- node_id, task['id'])
--
-- formatter_context = formatter_contexts_idx[node_id]
--
-- serializer = factory.create_serializer(task)
-- serialized = serializer.serialize(
-- node_id, formatter_context=formatter_context)
--
-- logger.debug("Distributed node %s task %s serialization "
-- "result: %s", node_id, task['id'], serialized)
--
-- result.append(((node_id, serialized), None))
-- except Exception as e:
-- logger.exception("Distributed serialization failed")
-- result.append(((node_id, None), e))
-- break
--
-- logger.debug("Processed tasks count: %s", len(result))
-- return result
--
--
--class DistributedProcessingPolicy(object):
--
-- def __init__(self):
-- self.sent_jobs = Queue()
-- self.sent_jobs_count = 0
--
-- def _consume_jobs(self, chunk_size=None):
-- """Consumes jobs
--
-- If chunk_size is set function consumes specified number of
-- Finished tasks or less if sent_jobs_ids queue became empty.
-- If chunk_size is None function consumes jobs until
-- sent_jobs_ids queue became empty.
-- Jobs with statuses Cancelled, Abandoned, Terminated will be
-- resent and their ids added to sent_jobs_ids queue
--
-- :param chunk_size: size of consuming chunk
-- :return: generator on job results
-- """
-- logger.debug("Consuming jobs started")
--
-- jobs_to_consume = []
-- while not self.sent_jobs.empty():
-- job = self.sent_jobs.get()
-- jobs_to_consume.append(job)
--
-- if chunk_size is not None:
-- chunk_size -= 1
-- if chunk_size <= 0:
-- break
--
-- for ready_job in distributed.as_completed(jobs_to_consume):
-- results = ready_job.result()
-- self.sent_jobs_count -= 1
--
-- for result in results:
-- (node_id, serialized), exc = result
-- logger.debug("Got ready task for node %s, serialized: %s, "
-- "error: %s", node_id, serialized, exc)
-- if exc is not None:
-- raise exc
-- yield node_id, serialized
--
-- logger.debug("Consuming jobs finished")
--
-- def _get_formatter_context(self, task_context, formatter_contexts_idx,
-- node_id):
-- try:
-- return formatter_contexts_idx[node_id]
-- except KeyError:
-- pass
--
-- logger.debug("Calculating formatter context for node %s", node_id)
-- formatter_context = task_context.get_formatter_context(
-- node_id)
-- # Settings file is already sent to the workers
-- formatter_context.pop('SETTINGS', None)
-- formatter_contexts_idx[node_id] = formatter_context
--
-- return formatter_context
--
-- def _upload_nailgun_code(self, job_cluster):
-- """Creates zip of current nailgun code and uploads it to workers
--
-- TODO(akislitsky): add workers scope when it will be implemented
-- in the distributed library
--
-- :param job_cluster: distributed.Client
-- """
-- logger.debug("Compressing nailgun code")
-- file_dir = os.path.dirname(__file__)
-- nailgun_root_dir = os.path.realpath(os.path.join(file_dir, '..', '..'))
-- archive = os.path.join(tempfile.gettempdir(), 'nailgun')
-- result = shutil.make_archive(archive, 'zip', nailgun_root_dir,
-- 'nailgun')
-- logger.debug("Nailgun code saved to: %s", result)
--
-- logger.debug("Uploading nailgun archive %s to workers", result)
-- job_cluster.upload_file(result)
--
-- def _scatter_data(self, job_cluster, context, workers):
-- logger.debug("Scattering data to workers started")
-- shared_data = {'context': context, 'settings_config': settings.config}
-- scattered = job_cluster.scatter(shared_data, broadcast=True,
-- workers=workers)
-- # Waiting data is scattered to workers
-- distributed.wait(scattered.values())
-- logger.debug("Scattering data to workers finished")
--
-- return scattered
--
-- def _get_allowed_nodes_statuses(self, context):
-- """Extracts node statuses that allows distributed serialization"""
-- common = context.new.get('common', {})
-- cluster = common.get('cluster', {})
-- logger.debug("Getting allowed nodes statuses to use as serialization "
-- "workers for cluster %s", cluster.get('id'))
-- check_fields = {
-- 'ds_use_ready': consts.NODE_STATUSES.ready,
-- 'ds_use_provisioned': consts.NODE_STATUSES.provisioned,
-- 'ds_use_discover': consts.NODE_STATUSES.discover,
-- 'ds_use_error': consts.NODE_STATUSES.error
-- }
-- statuses = set()
-- for field, node_status in check_fields.items():
-- if common.get(field):
-- statuses.add(node_status)
--
-- logger.debug("Allowed nodes statuses to use as serialization workers "
-- "for cluster %s are: %s", cluster.get('id'), statuses)
-- return statuses
--
-- def _get_allowed_nodes_ips(self, context):
-- """Filters online nodes from cluster by their status
--
-- In the cluster settings we select nodes statuses allowed for
-- using in the distributed serialization. Accordingly to selected
-- statuses nodes are going to be filtered.
--
-- :param context: TransactionContext
-- :return: set of allowed nodes ips
-- """
-- ips = set()
-- allowed_statuses = self._get_allowed_nodes_statuses(context)
-- for node in six.itervalues(context.new.get('nodes', {})):
-- if node.get('status') in allowed_statuses:
-- ips.add(node.get('ip'))
-- ips.add(settings.MASTER_IP)
-- return ips
--
-- def _get_allowed_workers(self, job_cluster, allowed_ips):
-- """Calculates workers addresses for distributed serialization
--
-- Only workers that placed on the allowed nodes must be selected
-- for the serialization.
--
-- :param job_cluster: distributed.Client
-- :param allowed_ips: allowed for serialization nodes ips
-- :return: list of workers addresses in format 'ip:port'
-- """
-- logger.debug("Getting allowed workers")
-- workers = {}
--
-- # Worker has address like tcp://ip:port
-- info = job_cluster.scheduler_info()
-- for worker_addr in six.iterkeys(info['workers']):
-- ip_port = worker_addr.split('//')[1]
-- ip = ip_port.split(':')[0]
-- if ip not in allowed_ips:
-- continue
-- try:
-- pool = workers[ip]
-- pool.add(ip_port)
-- except KeyError:
-- workers[ip] = set([ip_port])
--
-- return list(toolz.itertoolz.concat(six.itervalues(workers)))
--
-- def execute(self, context, _, tasks):
-- """Executes task serialization on distributed nodes
--
-- :param context: the transaction context
-- :param _: serializers factory
-- :param tasks: the tasks to serialize
-- :return sequence of serialized tasks
-- """
-- logger.debug("Performing distributed tasks processing")
-- sched_address = '{0}:{1}'.format(settings.MASTER_IP,
-- settings.LCM_DS_JOB_SHEDULER_PORT)
-- job_cluster = distributed.Client(sched_address)
--
-- allowed_ips = self._get_allowed_nodes_ips(context)
-- workers = self._get_allowed_workers(job_cluster, allowed_ips)
-- logger.debug("Allowed workers list for serialization: %s", workers)
-- workers_ips = set([ip_port.split(':')[0] for ip_port in workers])
-- logger.debug("Allowed workers ips list for serialization: %s",
-- workers_ips)
--
-- task_context = Context(context)
-- formatter_contexts_idx = {}
-- workers_num = len(workers)
-- max_jobs_in_queue = workers_num * settings.LCM_DS_NODE_LOAD_COEFF
-- logger.debug("Max jobs allowed in queue: %s", max_jobs_in_queue)
--
-- start = datetime.datetime.utcnow()
-- tasks_count = 0
--
-- try:
-- self._upload_nailgun_code(job_cluster)
-- scattered = self._scatter_data(job_cluster, context, workers)
--
-- for tasks_chunk in toolz.partition_all(
-- settings.LCM_DS_TASKS_PER_JOB, tasks):
--
-- formatter_contexts_for_tasks = {}
--
-- # Collecting required contexts for tasks
-- for task in tasks_chunk:
-- node_id, task_data = task
-- formatter_context = self._get_formatter_context(
-- task_context, formatter_contexts_idx, node_id)
-- if node_id not in formatter_contexts_for_tasks:
-- formatter_contexts_for_tasks[node_id] = \
-- formatter_context
--
-- logger.debug("Submitting job for tasks chunk: %s", tasks_chunk)
-- job = job_cluster.submit(
-- _distributed_serialize_tasks_for_node,
-- formatter_contexts_for_tasks,
-- tasks_chunk,
-- scattered,
-- workers=workers_ips
-- )
--
-- self.sent_jobs.put(job)
-- self.sent_jobs_count += 1
--
-- # We are limit the max number of tasks by the number of nodes
-- # which are used in the serialization
-- if self.sent_jobs_count >= max_jobs_in_queue:
-- for result in self._consume_jobs(chunk_size=workers_num):
-- tasks_count += 1
-- yield result
--
-- # We have no tasks any more but have unconsumed jobs
-- for result in self._consume_jobs():
-- tasks_count += 1
-- yield result
-- finally:
-- end = datetime.datetime.utcnow()
-- logger.debug("Distributed tasks processing finished. "
-- "Total time: %s. Tasks processed: %s",
-- end - start, tasks_count)
-- job_cluster.shutdown()
--
--
--def is_distributed_processing_enabled(context):
-- common = context.new.get('common', {})
-- return common.get('serialization_policy') == \
-- consts.SERIALIZATION_POLICY.distributed
--
--
--def get_processing_policy(context):
-- if is_distributed_processing_enabled(context):
-- return DistributedProcessingPolicy()
-+def get_concurrency_policy():
- cpu_num = settings.LCM_SERIALIZERS_CONCURRENCY_FACTOR
- if not cpu_num:
- try:
-@@ -471,7 +162,7 @@ class TransactionSerializer(object):
- # ids of nodes in this group and how many nodes in this group can fail
- # and deployment will not be interrupted
- self.fault_tolerance_groups = []
-- self.processing_policy = get_processing_policy(context)
-+ self.concurrency_policy = get_concurrency_policy()
-
- @classmethod
- def serialize(cls, context, tasks, resolver):
-@@ -525,7 +216,7 @@ class TransactionSerializer(object):
- :param tasks: the deployment tasks
- :return the mapping tasks per node
- """
-- serialized = self.processing_policy.execute(
-+ serialized = self.concurrency_policy.execute(
- self.context,
- self.serializer_factory_class,
- self.expand_tasks(tasks)
-diff --git a/nailgun/nailgun/orchestrator/deployment_serializers.py b/nailgun/nailgun/orchestrator/deployment_serializers.py
-index 99d52a2..9473733 100644
---- a/nailgun/nailgun/orchestrator/deployment_serializers.py
-+++ b/nailgun/nailgun/orchestrator/deployment_serializers.py
-@@ -221,7 +221,6 @@ class DeploymentMultinodeSerializer(object):
- 'role': role,
- 'vms_conf': node.vms_conf,
- 'fail_if_error': role in self.critical_roles,
-- 'ip': node.ip,
- # TODO(eli): need to remove, requried for the fake thread only
- 'online': node.online,
- }
-diff --git a/nailgun/nailgun/settings.py b/nailgun/nailgun/settings.py
-index 1f9222b..eee08c9 100644
---- a/nailgun/nailgun/settings.py
-+++ b/nailgun/nailgun/settings.py
-@@ -38,21 +38,7 @@ class NailgunSettings(object):
- if test_config:
- settings_files.append(test_config)
-
-- # If settings.yaml doesn't exist we should have default
-- # config structure. Nailgun without settings is used
-- # when we distribute source code to the workers for
-- # distributed serialization
-- self.config = {
-- 'VERSION': {},
-- 'DATABASE': {
-- 'engine': 'postgresql',
-- 'name': '',
-- 'host': '',
-- 'port': '0',
-- 'user': '',
-- 'passwd': ''
-- }
-- }
-+ self.config = {}
- for sf in settings_files:
- try:
- logger.debug("Trying to read config file %s" % sf)
-@@ -61,9 +47,9 @@ class NailgunSettings(object):
- logger.error("Error while reading config file %s: %s" %
- (sf, str(e)))
-
-- self.config['VERSION']['api'] = self.config.get('API')
-+ self.config['VERSION']['api'] = self.config['API']
- self.config['VERSION']['feature_groups'] = \
-- self.config.get('FEATURE_GROUPS')
-+ self.config['FEATURE_GROUPS']
-
- fuel_release = self.get_file_content(consts.FUEL_RELEASE_FILE)
- if fuel_release:
-@@ -75,7 +61,7 @@ class NailgunSettings(object):
- self.config['VERSION']['openstack_version'] = \
- fuel_openstack_version
-
-- if int(self.config.get("DEVELOPMENT", 0)):
-+ if int(self.config.get("DEVELOPMENT")):
- logger.info("DEVELOPMENT MODE ON:")
- here = os.path.abspath(
- os.path.join(os.path.dirname(__file__), '..')
-diff --git a/nailgun/nailgun/settings.yaml b/nailgun/nailgun/settings.yaml
-index c2faaa8..92b3518 100644
---- a/nailgun/nailgun/settings.yaml
-+++ b/nailgun/nailgun/settings.yaml
-@@ -177,15 +177,6 @@ YAQL_MEMORY_QUOTA: 104857600
-
- LCM_CHECK_TASK_VERSION: False
-
--# Coefficient for calculation max jobs queue length. If jobs number reaches the
--# len(nodes) * load_coef we stop generate and start consume of jobs.
--LCM_DS_NODE_LOAD_COEFF: 2
--# Port of dask-scheduler on the master node
--LCM_DS_JOB_SHEDULER_PORT: 8002
--# Size of tasks chunk sending to the distributed worker
--LCM_DS_TASKS_PER_JOB: 100
--
--
- DPDK_MAX_CPUS_PER_NIC: 4
-
- TRUNCATE_LOG_ENTRIES: 100
-diff --git a/nailgun/nailgun/statistics/fuel_statistics/installation_info.py b/nailgun/nailgun/statistics/fuel_statistics/installation_info.py
-index d024cdd..482d8c5 100644
---- a/nailgun/nailgun/statistics/fuel_statistics/installation_info.py
-+++ b/nailgun/nailgun/statistics/fuel_statistics/installation_info.py
-@@ -56,16 +56,6 @@ class InstallationInfo(object):
- 'propagate_task_deploy', None),
- WhiteListRule(('common', 'security_groups', 'value'),
- 'security_groups', None),
-- WhiteListRule(('common', 'serialization_policy', 'value'),
-- 'serialization_policy', None),
-- WhiteListRule(('common', 'ds_use_discover', 'value'),
-- 'ds_use_discover', None),
-- WhiteListRule(('common', 'ds_use_provisioned', 'value'),
-- 'ds_use_provisioned', None),
-- WhiteListRule(('common', 'ds_use_ready', 'value'),
-- 'ds_use_ready', None),
-- WhiteListRule(('common', 'ds_use_error', 'value'),
-- 'ds_use_error', None),
- WhiteListRule(('corosync', 'verified', 'value'),
- 'corosync_verified', None),
-
-diff --git a/nailgun/nailgun/test/integration/test_cluster_changes_handler.py b/nailgun/nailgun/test/integration/test_cluster_changes_handler.py
-index b8f4e98..a8661ab 100644
---- a/nailgun/nailgun/test/integration/test_cluster_changes_handler.py
-+++ b/nailgun/nailgun/test/integration/test_cluster_changes_handler.py
-@@ -187,7 +187,6 @@ class TestHandlers(BaseIntegrationTest):
- 'fail_if_error': is_critical,
- 'vms_conf': [],
- 'fqdn': 'node-%d.%s' % (node.id, settings.DNS_DOMAIN),
-- 'ip': node.ip,
-
- 'network_data': {
- 'eth1': {
-@@ -604,7 +603,6 @@ class TestHandlers(BaseIntegrationTest):
- 'online': node.online,
- 'fail_if_error': is_critical,
- 'fqdn': 'node-%d.%s' % (node.id, settings.DNS_DOMAIN),
-- 'ip': node.ip,
- 'priority': 100,
- 'vms_conf': [],
- 'network_scheme': {
-@@ -1098,7 +1096,6 @@ class TestHandlers(BaseIntegrationTest):
- 'fail_if_error': is_critical,
- 'fqdn': 'node-%d.%s' % (node.id, settings.DNS_DOMAIN),
- 'priority': 100,
-- 'ip': node.ip,
- 'vms_conf': [],
-
- 'network_scheme': {
-diff --git a/nailgun/nailgun/test/unit/test_lcm_transaction_serializer.py b/nailgun/nailgun/test/unit/test_lcm_transaction_serializer.py
-index 9751d55..6450e19 100644
---- a/nailgun/nailgun/test/unit/test_lcm_transaction_serializer.py
-+++ b/nailgun/nailgun/test/unit/test_lcm_transaction_serializer.py
-@@ -14,24 +14,20 @@
- # License for the specific language governing permissions and limitations
- # under the License.
-
--import copy
--import exceptions
- import mock
- import multiprocessing.dummy
-
- from nailgun import consts
- from nailgun import errors
- from nailgun import lcm
--from nailgun.lcm import TransactionContext
--from nailgun.settings import settings
--from nailgun.test.base import BaseTestCase
- from nailgun.utils.resolvers import TagResolver
-
-+from nailgun.test.base import BaseUnitTest
-
--class TestTransactionSerializer(BaseTestCase):
-+
-+class TestTransactionSerializer(BaseUnitTest):
- @classmethod
- def setUpClass(cls):
-- super(TestTransactionSerializer, cls).setUpClass()
- cls.tasks = [
- {
- 'id': 'task1', 'roles': ['controller'],
-@@ -466,344 +462,3 @@ class TestTransactionSerializer(BaseTestCase):
- 9,
- lcm.TransactionSerializer.calculate_fault_tolerance('-1 ', 10)
- )
--
-- def _get_context_for_distributed_serialization(self):
-- new = copy.deepcopy(self.context.new)
-- new['common']['serialization_policy'] = \
-- consts.SERIALIZATION_POLICY.distributed
-- return TransactionContext(new)
--
-- @mock.patch('nailgun.lcm.transaction_serializer.distributed.wait')
-- @mock.patch('nailgun.lcm.transaction_serializer.distributed.as_completed')
-- def test_distributed_serialization(self, _, as_completed):
-- context = self._get_context_for_distributed_serialization()
--
-- with mock.patch(
-- 'nailgun.lcm.transaction_serializer.distributed.Client'
-- ) as job_cluster:
-- job = mock.Mock()
-- job.result.return_value = [
-- (('1', {"id": "task1", "type": "skipped"}), None)
-- ]
--
-- submit = mock.Mock()
-- submit.return_value = job
--
-- as_completed.return_value = [job]
--
-- job_cluster.return_value.submit = submit
-- job_cluster.return_value.scheduler_info.return_value = \
-- {'workers': {'tcp://worker': {}}}
--
-- lcm.TransactionSerializer.serialize(
-- context, self.tasks, self.resolver)
-- self.assertTrue(submit.called)
-- # 4 controller task + 1 compute + 1 cinder
-- self.assertTrue(6, submit.call_count)
--
-- @mock.patch('nailgun.lcm.transaction_serializer.distributed.wait')
-- @mock.patch('nailgun.lcm.transaction_serializer.distributed.as_completed')
-- @mock.patch('nailgun.lcm.transaction_serializer.'
-- 'DistributedProcessingPolicy._get_formatter_context')
-- def test_distributed_serialization_workers_scope(self, formatter_context,
-- as_completed, _):
-- context = self._get_context_for_distributed_serialization()
--
-- node_id = '1'
-- task = {
-- 'id': 'task1', 'roles': ['controller'],
-- 'type': 'puppet', 'version': '2.0.0'
-- }
--
-- with mock.patch(
-- 'nailgun.lcm.transaction_serializer.distributed.Client'
-- ) as job_cluster:
--
-- # Mocking job processing
-- job = mock.Mock()
-- job.result.return_value = [((node_id, task), None)]
--
-- submit = mock.Mock()
-- submit.return_value = job
--
-- as_completed.return_value = [job]
--
-- scatter = mock.Mock()
-- job_cluster.return_value.scatter = scatter
--
-- job_cluster.return_value.scatter.return_value = {}
-- job_cluster.return_value.submit = submit
--
-- formatter_context.return_value = {node_id: {}}
--
-- # Configuring available workers
-- job_cluster.return_value.scheduler_info.return_value = \
-- {
-- 'workers': {
-- 'tcp://{0}'.format(settings.MASTER_IP): {},
-- 'tcp://192.168.0.1:33334': {},
-- 'tcp://127.0.0.2:33335': {},
-- }
-- }
--
-- # Performing serialization
-- lcm.TransactionSerializer.serialize(
-- context, [task], self.resolver
-- )
--
-- # Checking data is scattered only to expected workers
-- scatter.assert_called_once()
-- scatter.assert_called_with(
-- {'context': context, 'settings_config': settings.config},
-- broadcast=True,
-- workers=[settings.MASTER_IP]
-- )
--
-- # Checking submit job only to expected workers
-- submit.assert_called_once()
-- serializer = lcm.transaction_serializer
-- submit.assert_called_with(
-- serializer._distributed_serialize_tasks_for_node,
-- {node_id: formatter_context()},
-- ((node_id, task),),
-- job_cluster().scatter(),
-- workers=set([settings.MASTER_IP])
-- )
--
-- def test_distributed_serialization_get_allowed_nodes_ips(self):
-- policy = lcm.transaction_serializer.DistributedProcessingPolicy()
--
-- context_data = {
-- 'common': {
-- 'serialization_policy':
-- consts.SERIALIZATION_POLICY.distributed,
-- 'ds_use_error': True,
-- 'ds_use_provisioned': True,
-- 'ds_use_discover': True,
-- 'ds_use_ready': False
-- },
-- 'nodes': {
-- '1': {'status': consts.NODE_STATUSES.error,
-- 'ip': '10.20.0.3'},
-- '2': {'status': consts.NODE_STATUSES.provisioned,
-- 'ip': '10.20.0.4'},
-- '3': {'status': consts.NODE_STATUSES.discover,
-- 'ip': '10.20.0.5'},
-- '4': {'status': consts.NODE_STATUSES.ready,
-- 'ip': '10.20.0.6'},
-- }
-- }
--
-- actual = policy._get_allowed_nodes_ips(
-- TransactionContext(context_data))
-- self.assertItemsEqual(
-- [settings.MASTER_IP, '10.20.0.3', '10.20.0.4', '10.20.0.5'],
-- actual
-- )
--
-- def test_distributed_serialization_get_allowed_nodes_statuses(self):
-- policy = lcm.transaction_serializer.DistributedProcessingPolicy()
-- context_data = {}
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- self.assertItemsEqual([], actual)
--
-- context_data['common'] = {
-- 'ds_use_discover': False,
-- 'ds_use_provisioned': False,
-- 'ds_use_error': False,
-- 'ds_use_ready': False
-- }
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- self.assertItemsEqual([], actual)
--
-- context_data['common']['ds_use_discover'] = True
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- expected = [consts.NODE_STATUSES.discover]
-- self.assertItemsEqual(expected, actual)
--
-- context_data['common']['ds_use_provisioned'] = True
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- expected = [consts.NODE_STATUSES.discover,
-- consts.NODE_STATUSES.provisioned]
-- self.assertItemsEqual(expected, actual)
--
-- context_data['common']['ds_use_error'] = True
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- expected = [consts.NODE_STATUSES.discover,
-- consts.NODE_STATUSES.provisioned,
-- consts.NODE_STATUSES.error]
-- self.assertItemsEqual(expected, actual)
--
-- context_data['common']['ds_use_ready'] = True
-- actual = policy._get_allowed_nodes_statuses(
-- TransactionContext(context_data))
-- expected = [consts.NODE_STATUSES.discover,
-- consts.NODE_STATUSES.provisioned,
-- consts.NODE_STATUSES.error,
-- consts.NODE_STATUSES.ready]
-- self.assertItemsEqual(expected, actual)
--
-- def test_distributed_serialization_get_allowed_workers(self):
-- policy = lcm.transaction_serializer.DistributedProcessingPolicy()
--
-- with mock.patch(
-- 'nailgun.lcm.transaction_serializer.distributed.Client'
-- ) as job_cluster:
-- job_cluster.scheduler_info.return_value = \
-- {'workers': {
-- 'tcp://10.20.0.2:1': {},
-- 'tcp://10.20.0.2:2': {},
-- 'tcp://10.20.0.3:1': {},
-- 'tcp://10.20.0.3:2': {},
-- 'tcp://10.20.0.3:3': {},
-- 'tcp://10.20.0.4:1': {},
-- 'tcp://10.20.0.5:1': {}
-- }}
-- allowed_ips = set(['10.20.0.2', '10.20.0.3', '10.20.0.5'])
--
-- expected = ['10.20.0.2:1', '10.20.0.2:2', '10.20.0.3:1',
-- '10.20.0.3:2', '10.20.0.3:3', '10.20.0.5:1']
-- actual = policy._get_allowed_workers(job_cluster, allowed_ips)
-- self.assertItemsEqual(expected, actual)
--
-- def test_distributed_serialization_serialize_task(self):
-- task = {
-- 'id': 'task1', 'roles': ['controller'],
-- 'type': 'puppet', 'version': '2.0.0',
-- 'parameters': {
-- 'master_ip': '{MN_IP}',
-- 'host': {'yaql_exp': '$.public_ssl.hostname'},
-- 'attr': {'yaql_exp': '$node.attributes.a_str'}
-- }
-- }
--
-- formatter_contexts_idx = {
-- '1': {'MN_IP': '10.0.0.1'},
-- '2': {}
-- }
-- scattered_data = {
-- 'settings_config': settings.config,
-- 'context': self.context
-- }
--
-- serializer = lcm.transaction_serializer
-- actual = serializer._distributed_serialize_tasks_for_node(
-- formatter_contexts_idx, [('1', task), ('2', task)], scattered_data)
--
-- expected = [
-- (
-- (
-- '1',
-- {
-- 'id': 'task1',
-- 'type': 'puppet',
-- 'parameters': {
-- 'cwd': '/',
-- 'master_ip': '10.0.0.1',
-- 'host': 'localhost',
-- 'attr': 'text1'
-- },
-- 'fail_on_error': True
-- }
-- ),
-- None
-- ),
-- (
-- (
-- '2',
-- {
-- 'id': 'task1',
-- 'type': 'puppet',
-- 'parameters': {
-- 'cwd': '/',
-- 'master_ip': '{MN_IP}',
-- 'host': 'localhost',
-- 'attr': 'text2'
-- },
-- 'fail_on_error': True
-- }
-- ),
-- None
-- )
-- ]
--
-- self.assertItemsEqual(expected, actual)
--
-- def test_distributed_serialization_serialize_task_failure(self):
-- task = {
-- 'id': 'task1', 'roles': ['controller'],
-- 'type': 'puppet', 'version': '2.0.0',
-- 'parameters': {
-- 'fake': {'yaql_exp': '$.some.fake_param'}
-- }
-- }
--
-- formatter_contexts_idx = {'2': {}}
-- scattered_data = {
-- 'settings_config': settings.config,
-- 'context': self.context
-- }
--
-- serializer = lcm.transaction_serializer
-- result = serializer._distributed_serialize_tasks_for_node(
-- formatter_contexts_idx, [('2', task)], scattered_data)
-- (_, __), err = result[0]
-- self.assertIsInstance(err, exceptions.KeyError)
--
--
--class TestConcurrencyPolicy(BaseTestCase):
--
-- @mock.patch(
-- 'nailgun.lcm.transaction_serializer.multiprocessing.cpu_count',
-- return_value=1
-- )
-- def test_one_cpu(self, cpu_count):
-- policy = lcm.transaction_serializer.get_processing_policy(
-- lcm.TransactionContext({}))
-- self.assertIsInstance(
-- policy,
-- lcm.transaction_serializer.SingleWorkerConcurrencyPolicy
-- )
-- self.assertTrue(cpu_count.is_called)
--
-- @mock.patch(
-- 'nailgun.lcm.transaction_serializer.multiprocessing.cpu_count',
-- return_value=0
-- )
-- def test_zero_cpu(self, cpu_count):
-- policy = lcm.transaction_serializer.get_processing_policy(
-- lcm.TransactionContext({}))
-- self.assertIsInstance(
-- policy,
-- lcm.transaction_serializer.SingleWorkerConcurrencyPolicy
-- )
-- self.assertTrue(cpu_count.is_called)
--
-- @mock.patch(
-- 'nailgun.lcm.transaction_serializer.multiprocessing.cpu_count',
-- side_effect=NotImplementedError
-- )
-- def test_cpu_count_not_implemented(self, cpu_count):
-- policy = lcm.transaction_serializer.get_processing_policy(
-- lcm.TransactionContext({}))
-- self.assertIsInstance(
-- policy,
-- lcm.transaction_serializer.SingleWorkerConcurrencyPolicy
-- )
-- self.assertTrue(cpu_count.is_called)
--
-- def test_distributed_serialization_enabled_in_cluster(self):
-- context_data = {'common': {
-- 'serialization_policy': consts.SERIALIZATION_POLICY.distributed
-- }}
-- policy = lcm.transaction_serializer.get_processing_policy(
-- lcm.TransactionContext(context_data))
-- self.assertIsInstance(
-- policy,
-- lcm.transaction_serializer.DistributedProcessingPolicy
-- )
-diff --git a/nailgun/requirements.txt b/nailgun/requirements.txt
-index c702e8a..96bed25 100644
---- a/nailgun/requirements.txt
-+++ b/nailgun/requirements.txt
-@@ -47,5 +47,3 @@ stevedore>=1.5.0
- # See: https://bugs.launchpad.net/fuel/+bug/1519727
- setuptools<=18.5
- yaql>=1.0.0
--# Distributed nodes serialization
--distributed==1.16.0
diff --git a/build/f_repos/patch/fuel-web/0003-Revert-Introduce-proper-packaging-for-fuel-nailgun-d.patch b/build/f_repos/patch/fuel-web/0003-Revert-Introduce-proper-packaging-for-fuel-nailgun-d.patch
deleted file mode 100644
index 2473e6c17..000000000
--- a/build/f_repos/patch/fuel-web/0003-Revert-Introduce-proper-packaging-for-fuel-nailgun-d.patch
+++ /dev/null
@@ -1,292 +0,0 @@
-From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
-Date: Sun, 26 Mar 2017 19:28:09 +0200
-Subject: [PATCH] Revert "Introduce proper packaging for fuel-nailgun deb
- package"
-
-This reverts commit 746fae6e0a6b6625da6f548f0d168c742497b558.
----
- debian/control | 84 ++++------------------------------
- debian/copyright | 28 ------------
- debian/docs | 1 -
- debian/fencing-agent.dirs | 2 -
- debian/fencing-agent.install | 3 +-
- debian/fuel-nailgun.dirs | 4 --
- debian/fuel-nailgun.install | 2 -
- debian/fuel-openstack-metadata.dirs | 2 -
- debian/fuel-openstack-metadata.install | 2 -
- debian/openstack-version | 12 -----
- debian/rules | 45 +++---------------
- 11 files changed, 16 insertions(+), 169 deletions(-)
- delete mode 100644 debian/copyright
- delete mode 100644 debian/docs
- delete mode 100644 debian/fencing-agent.dirs
- delete mode 100644 debian/fuel-nailgun.dirs
- delete mode 100644 debian/fuel-nailgun.install
- delete mode 100644 debian/fuel-openstack-metadata.dirs
- delete mode 100644 debian/fuel-openstack-metadata.install
- delete mode 100755 debian/openstack-version
-
-diff --git a/debian/control b/debian/control
-index b44b87a..e2a08a9 100644
---- a/debian/control
-+++ b/debian/control
-@@ -1,80 +1,11 @@
- Source: fuel-nailgun
--Section: python
--Priority: optional
--Maintainer: Mirantis <product@mirantis.com>
--Build-Depends: debhelper (>= 9),
-- dh-python,
-- dh-systemd,
-- openstack-pkg-tools,
-- python-all,
-- python-setuptools (>= 16.0),
-- python-pbr (>= 1.8),
-- python-yaml (>= 3.1.0),
-- git,
--Standards-Version: 3.9.4
--Homepage: https://launchpad.net/fuel
--
--Package: fuel-nailgun
--Architecture: all
--Depends: fuel-openstack-metadata,
-- python-alembic (>= 0.8.4),
-- python-amqplib (>= 1.0.2),
-- python-anyjson (>= 0.3.3),
-- python-babel (>= 2.3.4),
-- python-crypto (>= 2.6.1),
-- python-decorator (>= 3.4.0),
-- python-fysom (>= 1.0.11),
-- python-iso8601 (>= 0.1.11),
-- python-jinja2 (>= 2.8),
-- python-jsonschema (>= 2.3.0),
-- python-keystoneclient (>= 1.7.0),
-- python-keystonemiddleware (>= 4.0.0),
-- python-kombu (>= 3.0.25),
-- python-mako (>= 0.9.1),
-- python-markupsafe (>= 0.18),
-- python-migrate (>= 0.9.6),
-- python-netaddr (>= 0.7.12),
-- python-netifaces (>= 0.10.4),
-- python-oslo-config (>= 1:1.2.1),
-- python-oslo-serialization (>= 1.0.0),
-- python-oslo-db (>= 1.0.0),
-- python-paste (>= 1.7.5.1),
-- python-ply (>= 3.4),
-- python-psycopg2 (>= 2.5.1),
-- python-requests (>= 2.10.0),
-- python-simplejson (>= 3.3.0),
-- python-six (>= 1.9.0),
-- python-sqlalchemy (>= 1.0.10),
-- python-stevedore (>= 1.10.0),
-- python-urllib3 (>= 1.15.1),
-- python-webpy (>= 0.37),
-- python-wsgilog (>= 0.3),
-- python-yaml (>= 3.10),
-- python-novaclient (>= 2.29.0),
-- python-networkx (>= 1.8),
-- python-cinderclient (>= 1.6.0),
-- python-pydot-ng (>= 1.0.0),
-- python-uwsgidecorators (>= 2.0.12),
-- python-yaql (>= 1.1.0),
-- python-tz (>= 2013.6),
-- ${python:Depends},
-- ${misc:Depends}
--Description: fuel-web (nailgun) implements REST API and deployment data management.
-- It manages disk volumes configuration data, networks configuration data
-- and any other environment specific data which are necessary for successful deployment.
-- It has required orchestration logic to build instructions for provisioning
-- and deployment in a right order. Nailgun uses SQL database to store its data
-- and AMQP service to interact with workers.
--
--Package: fuel-openstack-metadata
--Architecture: all
--Depends: ${misc:Depends}
--Description: fuel-web (nailgun) implements REST API and deployment data management.
-- It manages disk volumes configuration data, networks configuration data
-- and any other environment specific data which are necessary for successful deployment.
-- It has required orchestration logic to build instructions for provisioning
-- and deployment in a right order. Nailgun uses SQL database to store its data
-- and AMQP service to interact with workers.
-+Section: unknown
-+Priority: net
-+Maintainer: Mirantis Producta <product@mirantis.com>
-+Build-Depends: debhelper (>= 8.0.0), python-setuptools
-+X-Python-Version: 2.6, 2.7
-+Standards-Version: 3.9.2
-+Homepage: mirantis.com
-
- Package: fencing-agent
- Architecture: all
-@@ -85,3 +16,4 @@ Depends: ohai,
- ruby-json,
- ${misc:Depends}
- Description: Fencing agent
-+ .
-diff --git a/debian/copyright b/debian/copyright
-deleted file mode 100644
-index 8f21453..0000000
---- a/debian/copyright
-+++ /dev/null
-@@ -1,28 +0,0 @@
--Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
--Upstream-Name: fuel-web
--Source: https://github.com/openstack/fuel-web.git
--
--Files: *
--Copyright: (c) 2016, Mirantis, Inc.
--License: Apache-2
--
--Files: debian/*
--Copyright: (c) 2016, Mirantis, Inc.
--License: Apache-2
--
--License: Apache-2
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
-- .
-- http://www.apache.org/licenses/LICENSE-2.0
-- .
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-- .
-- On Debian-based systems the full text of the Apache version 2.0 license
-- can be found in `/usr/share/common-licenses/Apache-2.0'.
--
-diff --git a/debian/docs b/debian/docs
-deleted file mode 100644
-index b43bf86..0000000
---- a/debian/docs
-+++ /dev/null
-@@ -1 +0,0 @@
--README.md
-diff --git a/debian/fencing-agent.dirs b/debian/fencing-agent.dirs
-deleted file mode 100644
-index b23cc24..0000000
---- a/debian/fencing-agent.dirs
-+++ /dev/null
-@@ -1,2 +0,0 @@
--opt/nailgun/bin
--etc/cron.d
-diff --git a/debian/fencing-agent.install b/debian/fencing-agent.install
-index 713bd04..19e8c47 100644
---- a/debian/fencing-agent.install
-+++ b/debian/fencing-agent.install
-@@ -1,2 +1 @@
--bin/fencing-agent.rb opt/nailgun/bin
--bin/fencing-agent.cron etc/cron.d
-+bin/fencing-agent.rb /opt/nailgun/bin
-diff --git a/debian/fuel-nailgun.dirs b/debian/fuel-nailgun.dirs
-deleted file mode 100644
-index 67d11e4..0000000
---- a/debian/fuel-nailgun.dirs
-+++ /dev/null
-@@ -1,4 +0,0 @@
--etc/nailgun
--var/log/nailgun
--usr/bin
--usr/share
-diff --git a/debian/fuel-nailgun.install b/debian/fuel-nailgun.install
-deleted file mode 100644
-index ef0bddc..0000000
---- a/debian/fuel-nailgun.install
-+++ /dev/null
-@@ -1,2 +0,0 @@
--nailgun/nailgun/settings.yaml /etc/nailgun/
--systemd/* /lib/systemd/system/
-diff --git a/debian/fuel-openstack-metadata.dirs b/debian/fuel-openstack-metadata.dirs
-deleted file mode 100644
-index 7a41f21..0000000
---- a/debian/fuel-openstack-metadata.dirs
-+++ /dev/null
-@@ -1,2 +0,0 @@
--usr/share/fuel-openstack-metadata
--etc
-diff --git a/debian/fuel-openstack-metadata.install b/debian/fuel-openstack-metadata.install
-deleted file mode 100644
-index 5c955f5..0000000
---- a/debian/fuel-openstack-metadata.install
-+++ /dev/null
-@@ -1,2 +0,0 @@
--nailgun/nailgun/fixtures/openstack.yaml usr/share/fuel-openstack-metadata
--fuel_openstack_version etc
-diff --git a/debian/openstack-version b/debian/openstack-version
-deleted file mode 100755
-index 07f857f..0000000
---- a/debian/openstack-version
-+++ /dev/null
-@@ -1,12 +0,0 @@
--#! /usr/bin/env python2
--
--import sys
--import yaml
--
--if len(sys.argv) == 2:
-- openstack_yaml = open(sys.argv[1])
-- yaml = yaml.safe_load(openstack_yaml)
-- elems = filter(lambda r: r['fields'].get('name'), yaml)
-- print elems[0]['fields']['version']
--else:
-- print """Usage: {} OPENSTACK_YAML""".format(sys.argv[0])
-diff --git a/debian/rules b/debian/rules
-index c4d7e8e..9731207 100755
---- a/debian/rules
-+++ b/debian/rules
-@@ -1,46 +1,15 @@
- #!/usr/bin/make -f
--# -*- makefile -*-
--
- DH_VERBOSE=1
-
--PYTHONS:=$(shell pyversions -vr)
--
--include /usr/share/openstack-pkg-tools/pkgos.make
--
--#export OSLO_PACKAGE_VERSION=$(shell dpkg-parsechangelog | grep Version: | cut -d' ' -f2 | sed -e 's/^[[:digit:]]*://' -e 's/[-].*//' -e 's/~/.0/' | head -n 1)
-+topdir=$(shell pwd)
-
- %:
-- dh $@ --with python2,systemd
-+ dh $@ --with python2
-
-+override_dh_auto_install:
-+ dh_auto_install
- override_dh_auto_build:
-+ dh_clean
- dh_auto_build
-- python $(CURDIR)/debian/openstack-version nailgun/nailgun/fixtures/openstack.yaml > $(CURDIR)/fuel_openstack_version
--
--override_dh_auto_install:
-- cd nailgun \
-- set -e ; for pyvers in $(PYTHONS); do \
-- python$$pyvers setup.py install --install-layout=deb \
-- --root $(CURDIR)/debian/fuel-nailgun; \
-- done
--
--override_dh_clean:
-- rm -rf build
-- dh_clean -O--buildsystem=python_distutils
-- rm -f debian/nailgun-common.postinst
-- rm -f debian/*.service debian/*.init debian/*.upstart
--
--override_dh_systemd_enable: gen-init-configurations
-- dh_systemd_enable --no-enable
--
--override_dh_systemd_start: gen-init-configurations
-- dh_systemd_start --no-start
--
--# Commands not to run
--override_dh_installcatalogs:
--override_dh_installemacsen override_dh_installifupdown:
--override_dh_installinfo override_dh_installmenu override_dh_installmime:
--override_dh_installmodules override_dh_installlogcheck:
--override_dh_installpam override_dh_installppp override_dh_installudev override_dh_installwm:
--override_dh_installxfonts override_dh_gconf override_dh_icons override_dh_perl override_dh_usrlocal:
--override_dh_installcron override_dh_installdebconf:
--override_dh_installlogrotate override_dh_installgsettings:
-+override_dh_auto_clean:
-+ dh_auto_clean