
This new "simple" data driver takes serialized partitioning info that is provided before provisioning from external tool. It does not make any calculations for that data and expect it to have all required informations about partitioning. Other changes: * added unittest2 to use some of it features * added requests_mock to mock http requests * added objects conversion to/from dictionary to make serialization easier * added a common "interface" for data drivers * fixed test for "do_build_image" - now a correct data driver is used Change-Id: I673cde6f0ead9945919a87cd1cfce7ed09c6e593 Implements: blueprint volume-manager-refactoring
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2015 Mirantis, Inc.
|
|
#
|
|
# 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.
|
|
|
|
from fuel_agent.drivers import nailgun
|
|
from fuel_agent import objects
|
|
|
|
|
|
class NailgunSimpleDriver(nailgun.Nailgun):
|
|
"""Simple driver that do not make any computations.
|
|
|
|
This driver digest information that already has all required
|
|
information how to perform partitioning.
|
|
Service that sends data to fuel_agent is responsible for preparing
|
|
it in correct format.
|
|
"""
|
|
|
|
@property
|
|
def partition_data(self):
|
|
return self.data.get('partitioning', {})
|
|
|
|
@classmethod
|
|
def parse_lv_data(cls, raw_lvs):
|
|
return [objects.LV.from_dict(lv) for lv in raw_lvs]
|
|
|
|
@classmethod
|
|
def parse_pv_data(cls, raw_pvs):
|
|
return [objects.PV.from_dict(pv) for pv in raw_pvs]
|
|
|
|
@classmethod
|
|
def parse_fs_data(cls, raw_fss):
|
|
return [objects.FS.from_dict(fs) for fs in raw_fss]
|
|
|
|
@classmethod
|
|
def parse_vg_data(cls, raw_vgs):
|
|
return [objects.VG.from_dict(vg) for vg in raw_vgs]
|
|
|
|
@classmethod
|
|
def parse_md_data(cls, raw_mds):
|
|
return [objects.MD.from_dict(md) for md in raw_mds]
|
|
|
|
@classmethod
|
|
def parse_parted_data(cls, raw_parteds):
|
|
return [objects.Parted.from_dict(parted) for parted in raw_parteds]
|
|
|
|
def parse_partition_scheme(self):
|
|
partition_scheme = objects.PartitionScheme()
|
|
|
|
for obj in ('lv', 'pv', 'fs', 'vg', 'md', 'parted'):
|
|
attr = '{0}s'.format(obj)
|
|
parse_method = getattr(self, 'parse_{0}_data'.format(obj))
|
|
raw = self.partition_data.get(attr, {})
|
|
setattr(partition_scheme, attr, parse_method(raw))
|
|
|
|
return partition_scheme
|