diff --git a/README.md b/README.md index d94c3f9f..8e2f0347 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# helm_drydock +# drydock_provisioner A python REST orchestrator to translate a YAML host topology to a provisioned set of hosts and provide a set of cloud-init post-provisioning instructions. To run: @@ -6,7 +6,7 @@ To run: $ virtualenv -p python3 /var/tmp/drydock $ . /var/tmp/drydock/bin/activate $ python setup.py install - $ uwsgi --http :9000 -w helm_drydock.drydock --callable drydock --enable-threads -L + $ uwsgi --http :9000 -w drydock_provisioner.drydock --callable drydock --enable-threads -L ## Modular service diff --git a/helm_drydock/__init__.py b/drydock_provisioner/__init__.py similarity index 100% rename from helm_drydock/__init__.py rename to drydock_provisioner/__init__.py diff --git a/helm_drydock/config.py b/drydock_provisioner/config.py similarity index 81% rename from helm_drydock/config.py rename to drydock_provisioner/config.py index b07a9b9e..a8c501e1 100644 --- a/helm_drydock/config.py +++ b/drydock_provisioner/config.py @@ -33,12 +33,12 @@ class DrydockConfig(object): } ingester_config = { - 'plugins': ['helm_drydock.ingester.plugins.yaml.YamlIngester'], + 'plugins': ['drydock_provisioner.ingester.plugins.yaml.YamlIngester'], } orchestrator_config = { 'drivers': { - 'oob': 'helm_drydock.drivers.oob.pyghmi_driver.PyghmiDriver', - 'node': 'helm_drydock.drivers.node.maasdriver.driver.MaasNodeDriver', + 'oob': 'drydock_provisioner.drivers.oob.pyghmi_driver.PyghmiDriver', + 'node': 'drydock_provisioner.drivers.node.maasdriver.driver.MaasNodeDriver', } } \ No newline at end of file diff --git a/helm_drydock/control/__init__.py b/drydock_provisioner/control/__init__.py similarity index 100% rename from helm_drydock/control/__init__.py rename to drydock_provisioner/control/__init__.py diff --git a/helm_drydock/control/api.py b/drydock_provisioner/control/api.py similarity index 90% rename from helm_drydock/control/api.py rename to drydock_provisioner/control/api.py index a7134693..a6d832f9 100644 --- a/helm_drydock/control/api.py +++ b/drydock_provisioner/control/api.py @@ -23,9 +23,9 @@ def start_api(state_manager=None, ingester=None, orchestrator=None): """ Start the Drydock API service - :param state_manager: Instance of helm_drydock.statemgmt.manager.DesignState for accessing + :param state_manager: Instance of drydock_provisioner.statemgmt.manager.DesignState for accessing state persistence - :param ingester: Instance of helm_drydock.ingester.ingester.Ingester for handling design + :param ingester: Instance of drydock_provisioner.ingester.ingester.Ingester for handling design part input """ control_api = falcon.API(request_type=DrydockRequest, diff --git a/helm_drydock/control/base.py b/drydock_provisioner/control/base.py similarity index 98% rename from helm_drydock/control/base.py rename to drydock_provisioner/control/base.py index 2337ef42..3f0f8d88 100644 --- a/helm_drydock/control/base.py +++ b/drydock_provisioner/control/base.py @@ -16,7 +16,7 @@ import uuid import json import logging -import helm_drydock.error as errors +import drydock_provisioner.error as errors class BaseResource(object): diff --git a/helm_drydock/control/designs.py b/drydock_provisioner/control/designs.py similarity index 98% rename from helm_drydock/control/designs.py rename to drydock_provisioner/control/designs.py index 402b23ad..23afc457 100644 --- a/helm_drydock/control/designs.py +++ b/drydock_provisioner/control/designs.py @@ -16,8 +16,8 @@ import json import uuid import logging -import helm_drydock.objects as hd_objects -import helm_drydock.error as errors +import drydock_provisioner.objects as hd_objects +import drydock_provisioner.error as errors from .base import StatefulResource diff --git a/helm_drydock/control/middleware.py b/drydock_provisioner/control/middleware.py similarity index 98% rename from helm_drydock/control/middleware.py rename to drydock_provisioner/control/middleware.py index 157a677e..a522af7b 100644 --- a/helm_drydock/control/middleware.py +++ b/drydock_provisioner/control/middleware.py @@ -16,7 +16,7 @@ import falcon import logging import uuid -import helm_drydock.config as config +import drydock_provisioner.config as config class AuthMiddleware(object): diff --git a/helm_drydock/control/readme.md b/drydock_provisioner/control/readme.md similarity index 100% rename from helm_drydock/control/readme.md rename to drydock_provisioner/control/readme.md diff --git a/helm_drydock/control/tasks.py b/drydock_provisioner/control/tasks.py similarity index 98% rename from helm_drydock/control/tasks.py rename to drydock_provisioner/control/tasks.py index bf35861f..a4a49da9 100644 --- a/helm_drydock/control/tasks.py +++ b/drydock_provisioner/control/tasks.py @@ -16,7 +16,7 @@ import json import threading import traceback -import helm_drydock.objects.task as obj_task +import drydock_provisioner.objects.task as obj_task from .base import StatefulResource class TasksResource(StatefulResource): diff --git a/helm_drydock/drivers/__init__.py b/drydock_provisioner/drivers/__init__.py similarity index 94% rename from helm_drydock/drivers/__init__.py rename to drydock_provisioner/drivers/__init__.py index 2ced9f00..c3868af1 100644 --- a/helm_drydock/drivers/__init__.py +++ b/drydock_provisioner/drivers/__init__.py @@ -15,10 +15,10 @@ from threading import Thread, Lock import uuid import time -import helm_drydock.objects.fields as hd_fields -import helm_drydock.statemgmt as statemgmt -import helm_drydock.objects.task as tasks -import helm_drydock.error as errors +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.statemgmt as statemgmt +import drydock_provisioner.objects.task as tasks +import drydock_provisioner.error as errors # This is the interface for the orchestrator to access a driver # TODO Need to have each driver spin up a seperate thread to manage diff --git a/helm_drydock/drivers/node/__init__.py b/drydock_provisioner/drivers/node/__init__.py similarity index 93% rename from helm_drydock/drivers/node/__init__.py rename to drydock_provisioner/drivers/node/__init__.py index 87ea3046..48802905 100644 --- a/helm_drydock/drivers/node/__init__.py +++ b/drydock_provisioner/drivers/node/__init__.py @@ -13,10 +13,10 @@ # limitations under the License. # -import helm_drydock.objects.fields as hd_fields -import helm_drydock.error as errors +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.error as errors -from helm_drydock.drivers import ProviderDriver +from drydock_provisioner.drivers import ProviderDriver class NodeDriver(ProviderDriver): diff --git a/helm_drydock/drivers/node/maasdriver/__init__.py b/drydock_provisioner/drivers/node/maasdriver/__init__.py similarity index 100% rename from helm_drydock/drivers/node/maasdriver/__init__.py rename to drydock_provisioner/drivers/node/maasdriver/__init__.py diff --git a/helm_drydock/drivers/node/maasdriver/api_client.py b/drydock_provisioner/drivers/node/maasdriver/api_client.py similarity index 100% rename from helm_drydock/drivers/node/maasdriver/api_client.py rename to drydock_provisioner/drivers/node/maasdriver/api_client.py diff --git a/helm_drydock/drivers/node/maasdriver/driver.py b/drydock_provisioner/drivers/node/maasdriver/driver.py similarity index 96% rename from helm_drydock/drivers/node/maasdriver/driver.py rename to drydock_provisioner/drivers/node/maasdriver/driver.py index 32216169..c6d0cc9d 100644 --- a/helm_drydock/drivers/node/maasdriver/driver.py +++ b/drydock_provisioner/drivers/node/maasdriver/driver.py @@ -11,17 +11,17 @@ # 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. -import helm_drydock.error as errors -import helm_drydock.config as config -import helm_drydock.drivers as drivers -import helm_drydock.objects.fields as hd_fields -import helm_drydock.objects.task as task_model +import drydock_provisioner.error as errors +import drydock_provisioner.config as config +import drydock_provisioner.drivers as drivers +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.objects.task as task_model -from helm_drydock.drivers.node import NodeDriver +from drydock_provisioner.drivers.node import NodeDriver from .api_client import MaasRequestFactory -import helm_drydock.drivers.node.maasdriver.models.fabric as maas_fabric -import helm_drydock.drivers.node.maasdriver.models.vlan as maas_vlan -import helm_drydock.drivers.node.maasdriver.models.subnet as maas_subnet +import drydock_provisioner.drivers.node.maasdriver.models.fabric as maas_fabric +import drydock_provisioner.drivers.node.maasdriver.models.vlan as maas_vlan +import drydock_provisioner.drivers.node.maasdriver.models.subnet as maas_subnet class MaasNodeDriver(NodeDriver): diff --git a/helm_drydock/drivers/node/maasdriver/models/__init__.py b/drydock_provisioner/drivers/node/maasdriver/models/__init__.py similarity index 100% rename from helm_drydock/drivers/node/maasdriver/models/__init__.py rename to drydock_provisioner/drivers/node/maasdriver/models/__init__.py diff --git a/helm_drydock/drivers/node/maasdriver/models/base.py b/drydock_provisioner/drivers/node/maasdriver/models/base.py similarity index 99% rename from helm_drydock/drivers/node/maasdriver/models/base.py rename to drydock_provisioner/drivers/node/maasdriver/models/base.py index c64257f3..fb033eec 100644 --- a/helm_drydock/drivers/node/maasdriver/models/base.py +++ b/drydock_provisioner/drivers/node/maasdriver/models/base.py @@ -14,7 +14,7 @@ import json import re -import helm_drydock.error as errors +import drydock_provisioner.error as errors """ A representation of a MaaS REST resource. Should be subclassed for different resources and augmented with operations specific diff --git a/helm_drydock/drivers/node/maasdriver/models/fabric.py b/drydock_provisioner/drivers/node/maasdriver/models/fabric.py similarity index 88% rename from helm_drydock/drivers/node/maasdriver/models/fabric.py rename to drydock_provisioner/drivers/node/maasdriver/models/fabric.py index a105f354..90e954af 100644 --- a/helm_drydock/drivers/node/maasdriver/models/fabric.py +++ b/drydock_provisioner/drivers/node/maasdriver/models/fabric.py @@ -13,8 +13,8 @@ # limitations under the License. import json -import helm_drydock.drivers.node.maasdriver.models.base as model_base -import helm_drydock.drivers.node.maasdriver.models.vlan as model_vlan +import drydock_provisioner.drivers.node.maasdriver.models.base as model_base +import drydock_provisioner.drivers.node.maasdriver.models.vlan as model_vlan class Fabric(model_base.ResourceBase): diff --git a/helm_drydock/drivers/node/maasdriver/models/subnet.py b/drydock_provisioner/drivers/node/maasdriver/models/subnet.py similarity index 96% rename from helm_drydock/drivers/node/maasdriver/models/subnet.py rename to drydock_provisioner/drivers/node/maasdriver/models/subnet.py index ccf677c2..8aec521e 100644 --- a/helm_drydock/drivers/node/maasdriver/models/subnet.py +++ b/drydock_provisioner/drivers/node/maasdriver/models/subnet.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import helm_drydock.drivers.node.maasdriver.models.base as model_base +import drydock_provisioner.drivers.node.maasdriver.models.base as model_base class Subnet(model_base.ResourceBase): diff --git a/helm_drydock/drivers/node/maasdriver/models/vlan.py b/drydock_provisioner/drivers/node/maasdriver/models/vlan.py similarity index 95% rename from helm_drydock/drivers/node/maasdriver/models/vlan.py rename to drydock_provisioner/drivers/node/maasdriver/models/vlan.py index f4f506ef..36acceac 100644 --- a/helm_drydock/drivers/node/maasdriver/models/vlan.py +++ b/drydock_provisioner/drivers/node/maasdriver/models/vlan.py @@ -13,8 +13,8 @@ # limitations under the License. import json -import helm_drydock.error as errors -import helm_drydock.drivers.node.maasdriver.models.base as model_base +import drydock_provisioner.error as errors +import drydock_provisioner.drivers.node.maasdriver.models.base as model_base class Vlan(model_base.ResourceBase): diff --git a/helm_drydock/drivers/node/maasdriver/readme.md b/drydock_provisioner/drivers/node/maasdriver/readme.md similarity index 100% rename from helm_drydock/drivers/node/maasdriver/readme.md rename to drydock_provisioner/drivers/node/maasdriver/readme.md diff --git a/helm_drydock/drivers/oob/__init__.py b/drydock_provisioner/drivers/oob/__init__.py similarity index 91% rename from helm_drydock/drivers/oob/__init__.py rename to drydock_provisioner/drivers/oob/__init__.py index 18fc0c75..8e7a9c26 100644 --- a/helm_drydock/drivers/oob/__init__.py +++ b/drydock_provisioner/drivers/oob/__init__.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -import helm_drydock.objects.fields as hd_fields -import helm_drydock.error as errors +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.error as errors -from helm_drydock.drivers import ProviderDriver +from drydock_provisioner.drivers import ProviderDriver class OobDriver(ProviderDriver): diff --git a/helm_drydock/drivers/oob/pyghmi_driver/__init__.py b/drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py similarity index 97% rename from helm_drydock/drivers/oob/pyghmi_driver/__init__.py rename to drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py index 0da3af70..a4378369 100644 --- a/helm_drydock/drivers/oob/pyghmi_driver/__init__.py +++ b/drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py @@ -15,14 +15,14 @@ import time from pyghmi.ipmi.command import Command -import helm_drydock.error as errors -import helm_drydock.config as config +import drydock_provisioner.error as errors +import drydock_provisioner.config as config -import helm_drydock.objects.fields as hd_fields -import helm_drydock.objects.task as task_model +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.objects.task as task_model -import helm_drydock.drivers.oob as oob -import helm_drydock.drivers as drivers +import drydock_provisioner.drivers.oob as oob +import drydock_provisioner.drivers as drivers class PyghmiDriver(oob.OobDriver): diff --git a/helm_drydock/drivers/readme.md b/drydock_provisioner/drivers/readme.md similarity index 100% rename from helm_drydock/drivers/readme.md rename to drydock_provisioner/drivers/readme.md diff --git a/helm_drydock/drydock.py b/drydock_provisioner/drydock.py similarity index 86% rename from helm_drydock/drydock.py rename to drydock_provisioner/drydock.py index 4be2340e..93e91982 100644 --- a/helm_drydock/drydock.py +++ b/drydock_provisioner/drydock.py @@ -13,12 +13,12 @@ # limitations under the License. import logging -import helm_drydock.config as config -import helm_drydock.objects as objects -import helm_drydock.ingester as ingester -import helm_drydock.statemgmt as statemgmt -import helm_drydock.orchestrator as orch -import helm_drydock.control.api as api +import drydock_provisioner.config as config +import drydock_provisioner.objects as objects +import drydock_provisioner.ingester as ingester +import drydock_provisioner.statemgmt as statemgmt +import drydock_provisioner.orchestrator as orch +import drydock_provisioner.control.api as api def start_drydock(): objects.register_all() diff --git a/helm_drydock/error.py b/drydock_provisioner/error.py similarity index 100% rename from helm_drydock/error.py rename to drydock_provisioner/error.py diff --git a/helm_drydock/ingester/__init__.py b/drydock_provisioner/ingester/__init__.py similarity index 90% rename from helm_drydock/ingester/__init__.py rename to drydock_provisioner/ingester/__init__.py index 07862605..0938f710 100644 --- a/helm_drydock/ingester/__init__.py +++ b/drydock_provisioner/ingester/__init__.py @@ -20,14 +20,14 @@ import yaml import uuid import importlib -import helm_drydock.objects as objects -import helm_drydock.objects.site as site -import helm_drydock.objects.network as network -import helm_drydock.objects.hwprofile as hwprofile -import helm_drydock.objects.node as node -import helm_drydock.objects.hostprofile as hostprofile +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.site as site +import drydock_provisioner.objects.network as network +import drydock_provisioner.objects.hwprofile as hwprofile +import drydock_provisioner.objects.node as node +import drydock_provisioner.objects.hostprofile as hostprofile -from helm_drydock.statemgmt import DesignState +from drydock_provisioner.statemgmt import DesignState class Ingester(object): @@ -42,7 +42,7 @@ class Ingester(object): :params plugins: - A list of strings naming class objects denoting the ingester plugins to be enabled Enable plugins that can be used for ingest_data calls. Each plugin should use - helm_drydock.ingester.plugins.IngesterPlugin as its base class. As long as one + drydock_provisioner.ingester.plugins.IngesterPlugin as its base class. As long as one enabled plugin successfully initializes, the call is considered successful. Otherwise it will throw an exception """ diff --git a/helm_drydock/ingester/plugins/__init__.py b/drydock_provisioner/ingester/plugins/__init__.py similarity index 100% rename from helm_drydock/ingester/plugins/__init__.py rename to drydock_provisioner/ingester/plugins/__init__.py diff --git a/helm_drydock/ingester/plugins/yaml.py b/drydock_provisioner/ingester/plugins/yaml.py similarity index 98% rename from helm_drydock/ingester/plugins/yaml.py rename to drydock_provisioner/ingester/plugins/yaml.py index 26160481..37e1ad06 100644 --- a/helm_drydock/ingester/plugins/yaml.py +++ b/drydock_provisioner/ingester/plugins/yaml.py @@ -19,10 +19,10 @@ import yaml import logging -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects.fields as hd_fields -from helm_drydock import objects -from helm_drydock.ingester.plugins import IngesterPlugin +from drydock_provisioner import objects +from drydock_provisioner.ingester.plugins import IngesterPlugin class YamlIngester(IngesterPlugin): @@ -38,7 +38,7 @@ class YamlIngester(IngesterPlugin): filenames - Array of absolute path to the YAML files to ingest - returns an array of objects from helm_drydock.model + returns an array of objects from drydock_provisioner.model """ def ingest_data(self, **kwargs): diff --git a/helm_drydock/ingester/readme.md b/drydock_provisioner/ingester/readme.md similarity index 84% rename from helm_drydock/ingester/readme.md rename to drydock_provisioner/ingester/readme.md index 1437c216..16352970 100644 --- a/helm_drydock/ingester/readme.md +++ b/drydock_provisioner/ingester/readme.md @@ -6,7 +6,7 @@ different sources. Each ingester plugin should be able source data based on user-provided parameters and parse that data -into the Drydock internal model (helm_drydock.model). +into the Drydock internal model (drydock_provisioner.model). Each plugin does not need to support every type of design data as a single site design may be federated from multiple diff --git a/helm_drydock/introspection/readme.md b/drydock_provisioner/introspection/readme.md similarity index 100% rename from helm_drydock/introspection/readme.md rename to drydock_provisioner/introspection/readme.md diff --git a/helm_drydock/objects/__init__.py b/drydock_provisioner/objects/__init__.py similarity index 93% rename from helm_drydock/objects/__init__.py rename to drydock_provisioner/objects/__init__.py index b88365d2..be295cf6 100644 --- a/helm_drydock/objects/__init__.py +++ b/drydock_provisioner/objects/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# Models for helm_drydock +# Models for drydock_provisioner # import logging @@ -23,11 +23,11 @@ def register_all(): # NOTE(sh8121att) - Import all versioned objects so # they are available via RPC. Any new object definitions # need to be added here. - __import__('helm_drydock.objects.network') - __import__('helm_drydock.objects.node') - __import__('helm_drydock.objects.hostprofile') - __import__('helm_drydock.objects.hwprofile') - __import__('helm_drydock.objects.site') + __import__('drydock_provisioner.objects.network') + __import__('drydock_provisioner.objects.node') + __import__('drydock_provisioner.objects.hostprofile') + __import__('drydock_provisioner.objects.hwprofile') + __import__('drydock_provisioner.objects.site') # Utility class for calculating inheritance diff --git a/helm_drydock/objects/base.py b/drydock_provisioner/objects/base.py similarity index 95% rename from helm_drydock/objects/base.py rename to drydock_provisioner/objects/base.py index 5164a8ca..3bf2c027 100644 --- a/helm_drydock/objects/base.py +++ b/drydock_provisioner/objects/base.py @@ -16,12 +16,12 @@ import datetime from oslo_versionedobjects import base from oslo_versionedobjects import fields as obj_fields -import helm_drydock.objects as objects +import drydock_provisioner.objects as objects class DrydockObjectRegistry(base.VersionedObjectRegistry): # Steal this from Cinder to bring all registered objects - # into the helm_drydock.objects namespace + # into the drydock_provisioner.objects namespace def registration_hook(self, cls, index): setattr(objects, cls.obj_name(), cls) @@ -30,7 +30,7 @@ class DrydockObject(base.VersionedObject): VERSION = '1.0' - OBJ_PROJECT_NAMESPACE = 'helm_drydock.objects' + OBJ_PROJECT_NAMESPACE = 'drydock_provisioner.objects' # Return None for undefined attributes def obj_load_attr(self, attrname): diff --git a/helm_drydock/objects/fields.py b/drydock_provisioner/objects/fields.py similarity index 100% rename from helm_drydock/objects/fields.py rename to drydock_provisioner/objects/fields.py diff --git a/helm_drydock/objects/hostprofile.py b/drydock_provisioner/objects/hostprofile.py similarity index 98% rename from helm_drydock/objects/hostprofile.py rename to drydock_provisioner/objects/hostprofile.py index 5a416dde..36aad003 100644 --- a/helm_drydock/objects/hostprofile.py +++ b/drydock_provisioner/objects/hostprofile.py @@ -16,9 +16,9 @@ from copy import deepcopy import oslo_versionedobjects.fields as obj_fields -import helm_drydock.objects as objects -import helm_drydock.objects.base as base -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.base as base +import drydock_provisioner.objects.fields as hd_fields @base.DrydockObjectRegistry.register diff --git a/helm_drydock/objects/hwprofile.py b/drydock_provisioner/objects/hwprofile.py similarity index 96% rename from helm_drydock/objects/hwprofile.py rename to drydock_provisioner/objects/hwprofile.py index 3ff5afbe..bda20183 100644 --- a/helm_drydock/objects/hwprofile.py +++ b/drydock_provisioner/objects/hwprofile.py @@ -16,9 +16,9 @@ from copy import deepcopy from oslo_versionedobjects import fields as ovo_fields -import helm_drydock.objects as objects -import helm_drydock.objects.base as base -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.base as base +import drydock_provisioner.objects.fields as hd_fields @base.DrydockObjectRegistry.register class HardwareProfile(base.DrydockPersistentObject, base.DrydockObject): diff --git a/helm_drydock/objects/network.py b/drydock_provisioner/objects/network.py similarity index 94% rename from helm_drydock/objects/network.py rename to drydock_provisioner/objects/network.py index e1ccc693..028161da 100644 --- a/helm_drydock/objects/network.py +++ b/drydock_provisioner/objects/network.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# Models for helm_drydock +# Models for drydock_provisioner # import logging @@ -20,9 +20,9 @@ from copy import deepcopy import oslo_versionedobjects.fields as ovo_fields -import helm_drydock.objects as objects -import helm_drydock.objects.base as base -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.base as base +import drydock_provisioner.objects.fields as hd_fields @base.DrydockObjectRegistry.register class NetworkLink(base.DrydockPersistentObject, base.DrydockObject): diff --git a/helm_drydock/objects/node.py b/drydock_provisioner/objects/node.py similarity index 92% rename from helm_drydock/objects/node.py rename to drydock_provisioner/objects/node.py index 1d353576..7854b346 100644 --- a/helm_drydock/objects/node.py +++ b/drydock_provisioner/objects/node.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# Models for helm_drydock +# Models for drydock_provisioner # import logging @@ -20,13 +20,13 @@ from copy import deepcopy from oslo_versionedobjects import fields as ovo_fields -import helm_drydock.objects as objects -import helm_drydock.objects.hostprofile -import helm_drydock.objects.base as base -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.hostprofile +import drydock_provisioner.objects.base as base +import drydock_provisioner.objects.fields as hd_fields @base.DrydockObjectRegistry.register -class BaremetalNode(helm_drydock.objects.hostprofile.HostProfile): +class BaremetalNode(drydock_provisioner.objects.hostprofile.HostProfile): VERSION = '1.0' diff --git a/helm_drydock/objects/readme.md b/drydock_provisioner/objects/readme.md similarity index 100% rename from helm_drydock/objects/readme.md rename to drydock_provisioner/objects/readme.md diff --git a/helm_drydock/objects/site.py b/drydock_provisioner/objects/site.py similarity index 97% rename from helm_drydock/objects/site.py rename to drydock_provisioner/objects/site.py index afa853b7..c86a9184 100644 --- a/helm_drydock/objects/site.py +++ b/drydock_provisioner/objects/site.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# Models for helm_drydock +# Models for drydock_provisioner # from copy import deepcopy import uuid @@ -20,9 +20,9 @@ import datetime import oslo_versionedobjects.fields as ovo_fields -import helm_drydock.objects as objects -import helm_drydock.objects.base as base -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.base as base +import drydock_provisioner.objects.fields as hd_fields @base.DrydockObjectRegistry.register diff --git a/helm_drydock/objects/task.py b/drydock_provisioner/objects/task.py similarity index 96% rename from helm_drydock/objects/task.py rename to drydock_provisioner/objects/task.py index 0405cd32..6da718c8 100644 --- a/helm_drydock/objects/task.py +++ b/drydock_provisioner/objects/task.py @@ -15,9 +15,9 @@ import uuid from threading import Lock -import helm_drydock.error as errors +import drydock_provisioner.error as errors -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.objects.fields as hd_fields class Task(object): diff --git a/helm_drydock/orchestrator/__init__.py b/drydock_provisioner/orchestrator/__init__.py similarity index 98% rename from helm_drydock/orchestrator/__init__.py rename to drydock_provisioner/orchestrator/__init__.py index fba338ba..3736faa2 100644 --- a/helm_drydock/orchestrator/__init__.py +++ b/drydock_provisioner/orchestrator/__init__.py @@ -19,10 +19,10 @@ import importlib from copy import deepcopy -import helm_drydock.drivers as drivers -import helm_drydock.objects.task as tasks -import helm_drydock.error as errors -import helm_drydock.objects.fields as hd_fields +import drydock_provisioner.drivers as drivers +import drydock_provisioner.objects.task as tasks +import drydock_provisioner.error as errors +import drydock_provisioner.objects.fields as hd_fields class Orchestrator(object): diff --git a/helm_drydock/orchestrator/readme.md b/drydock_provisioner/orchestrator/readme.md similarity index 100% rename from helm_drydock/orchestrator/readme.md rename to drydock_provisioner/orchestrator/readme.md diff --git a/helm_drydock/statemgmt/__init__.py b/drydock_provisioner/statemgmt/__init__.py similarity index 97% rename from helm_drydock/statemgmt/__init__.py rename to drydock_provisioner/statemgmt/__init__.py index 8936649e..a6be0d0c 100644 --- a/helm_drydock/statemgmt/__init__.py +++ b/drydock_provisioner/statemgmt/__init__.py @@ -18,10 +18,10 @@ from threading import Lock import uuid -import helm_drydock.objects as objects -import helm_drydock.objects.task as tasks +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.task as tasks -from helm_drydock.error import DesignError, StateError +from drydock_provisioner.error import DesignError, StateError class DesignState(object): diff --git a/helm_drydock/statemgmt/readme.md b/drydock_provisioner/statemgmt/readme.md similarity index 100% rename from helm_drydock/statemgmt/readme.md rename to drydock_provisioner/statemgmt/readme.md diff --git a/examples/bootstrap_hwdefinition.yaml b/examples/bootstrap_hwdefinition.yaml deleted file mode 100644 index d7daa741..00000000 --- a/examples/bootstrap_hwdefinition.yaml +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2017 AT&T Intellectual Property. All other rights reserved. -# -# 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. -############################################################################# -# -# bootstrap_hwdefinition.yaml - Definitions of server hardware layout -# -############################################################################# -# version the schema in this file so consumers can rationally parse it ---- -apiVersion: 'v1.0' -kind: HardwareProfile -metadata: - name: HPGen8v3 - region: sitename - date: 17-FEB-2017 - description: Sample hardware definition - author: Scott Hussey -spec: - # Vendor of the server chassis - vendor: HP - # Generation of the chassis model - generation: '8' - # Version of the chassis model within its generation - not version of the hardware definition - hw_version: '3' - # The certified version of the chassis BIOS - bios_version: '2.2.3' - # Mode of the default boot of hardware - bios, uefi - boot_mode: bios - # Protocol of boot of the hardware - pxe, usb, hdd - bootstrap_protocol: pxe - # Which interface to use for network booting within the OOB manager, not OS device - pxe_interface: 0 - # Map hardware addresses to aliases/roles to allow a mix of hardware configs - # in a site to result in a consistent configuration - device_aliases: - pci: - - address: pci@0000:00:03.0 - alias: prim_nic01 - # type could identify expected hardware - used for hardware manifest validation - type: '82540EM Gigabit Ethernet Controller' - - address: pci@0000:00:04.0 - alias: prim_nic02 - type: '82540EM Gigabit Ethernet Controller' - scsi: - - address: scsi@2:0.0.0 - alias: primary_boot - type: 'VBOX HARDDISK' \ No newline at end of file diff --git a/examples/bootstrap_seed.yaml b/examples/bootstrap_seed.yaml deleted file mode 100644 index 360075f9..00000000 --- a/examples/bootstrap_seed.yaml +++ /dev/null @@ -1,420 +0,0 @@ -# Copyright 2017 AT&T Intellectual Property. All other rights reserved. -# -# 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. -#################### -# -# bootstrap_seed.yaml - Site server design definition for physical layer -# -#################### -# version the schema in this file so consumers can rationally parse it ---- -apiVersion: 'v1.0' -kind: Region -metadata: - name: sitename - date: 17-FEB-2017 - description: Sample site design - author: sh8121@att.com -spec: - # Not sure if we have site wide data that doesn't fall into another 'Kind' ---- -apiVersion: 'v1.0' -kind: NetworkLink -metadata: - name: oob - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 1 attributes. Primary key is 'name'. These settings will generally be things the switch and server have to agree on -spec: - bonding: - mode: none - mtu: 1500 - linkspeed: 100full - trunking: - mode: none - default_network: oob ---- -# pxe is a bit of 'magic' indicating the link config used when PXE booting -# a node. All other links indicate network configs applied when the node -# is deployed. -apiVersion: 'v1.0' -kind: NetworkLink -metadata: - name: pxe - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 1 attributes. Primary key is 'name'. These settings will generally be things the switch and server have to agree on -spec: - bonding: - mode: none - mtu: 1500 - linkspeed: auto - # Is this link supporting multiple layer 2 networks? - # none is a port-based VLAN identified by default_network - # tagged is is using 802.1q VLAN tagging. Untagged packets will default to default_netwokr - trunking: - mode: none - # use name, will translate to VLAN ID - default_network: pxe ---- -apiVersion: 'v1.0' -kind: NetworkLink -metadata: - name: gp - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 1 attributes. These CIs will generally be things the switch and server have to agree on - # pxe is a bit of 'magic' indicating the link config used when PXE booting - # a node. All other links indicate network configs applied when the node - # is deployed. -spec: - # If this link is a bond of physical links, how is it configured - # 802.3ad - # active-backup - # balance-rr - # Can add support for others down the road - bonding: - mode: 802.3ad - # For LACP (802.3ad) xmit hashing policy: layer2, layer2+3, layer3+4, encap3+4 - hash: layer3+4 - # 802.3ad specific options - peer_rate: slow - mon_rate: default - up_delay: default - down_delay: default - mtu: 9000 - linkspeed: auto - # Is this link supporting multiple layer 2 networks? - trunking: - mode: tagged - default_network: mgmt ---- -apiVersion: 'v1.0' -kind: Network -metadata: - name: oob - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - allocation: static - cidr: 172.16.100.0/24 - ranges: - - type: static - start: 172.16.100.15 - end: 172.16.100.254 - dns: - domain: ilo.sitename.att.com - servers: 172.16.100.10 ---- -apiVersion: 'v1.0' -kind: Network -metadata: - name: pxe - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - # Layer 2 VLAN segment id, could support other segmentations. Optional - vlan_id: '99' - # How are addresses assigned? - allocation: dhcp - # MTU for this VLAN interface, if not specified it will be inherited from the link - mtu: 1500 - # Network address - cidr: 172.16.0.0/24 - # Desribe IP address ranges - ranges: - - type: dhcp - start: 172.16.0.5 - end: 172.16.0.254 - # DNS settings for this network - dns: - # Domain addresses on this network will be registered under - domain: admin.sitename.att.com - # DNS servers that a server using this network as its default gateway should use - servers: 172.16.0.10 ---- -apiVersion: 'v1.0' -kind: Network -metadata: - name: mgmt - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - vlan_id: '100' - # How are addresses assigned? - allocation: static - # Allow MTU to be inherited from link the network rides on - mtu: 1500 - # Network address - cidr: 172.16.1.0/24 - # Desribe IP address ranges - ranges: - - type: static - start: 172.16.1.15 - end: 172.16.1.254 - # Static routes to be added for this network - routes: - - subnet: 0.0.0.0/0 - # A blank gateway would leave to a static route specifying - # only the interface as a source - gateway: 172.16.1.1 - metric: 10 - # DNS settings for this network - dns: - # Domain addresses on this network will be registered under - domain: mgmt.sitename.example.com - # DNS servers that a server using this network as its default gateway should use - servers: 172.16.1.9,172.16.1.10 ---- -apiVersion: 'v1.0' -kind: Network -metadata: - name: private - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - vlan_id: '101' - allocation: static - mtu: 9000 - cidr: 172.16.2.0/24 - # Desribe IP address ranges - ranges: - # Type can be reserved (not used for baremetal), static (all explicit - # assignments should fall here), dhcp (will be used by a DHCP server on this network) - - type: static - start: 172.16.2.15 - end: 172.16.2.254 - dns: - domain: priv.sitename.example.com - servers: 172.16.2.9,172.16.2.10 ---- -apiVersion: 'v1.0' -kind: Network -metadata: - name: public - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - vlan_id: '102' - # How are addresses assigned? - allocation: static - # MTU size for the VLAN interface - mtu: 1500 - cidr: 172.16.3.0/24 - # Desribe IP address ranges - ranges: - - type: static - start: 172.16.3.15 - end: 172.16.3.254 - routes: - - subnet: 0.0.0.0/0 - gateway: 172.16.3.1 - metric: 9 - dns: - domain: sitename.example.com - servers: 8.8.8.8 ---- -apiVersion: 'v1.0' -kind: HostProfile -metadata: - name: default - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces - # No magic to this host_profile, it just provides a way to specify - # sitewide settings. If it is absent from a node's inheritance chain - # then these values will NOT be applied -spec: - # OOB (iLO, iDRAC, etc...) settings. Should prefer open standards such - # as IPMI over vender-specific when possible. - oob: - type: ipmi - # OOB networking should be preconfigured, but we can include a network - # definition for validation or enhancement (DNS registration) - network: oob - account: admin - credential: admin - # Specify storage layout of base OS. Ceph out of scope - storage: - # How storage should be carved up: lvm (logical volumes), flat - # (single partition) - layout: lvm - # Info specific to the boot and root disk/partitions - bootdisk: - # Device will specify an alias defined in hwdefinition.yaml - device: primary_boot - # For LVM, the size of the partition added to VG as a PV - # For flat, the size of the partition formatted as ext4 - root_size: 50g - # The /boot partition. If not specified, /boot will in root - boot_size: 2g - # Info for additional partitions. Need to balance between - # flexibility and complexity - partitions: - - name: logs - device: primary_boot - # Partition uuid if needed - part_uuid: 84db9664-f45e-11e6-823d-080027ef795a - size: 10g - # Optional, can carve up unformatted block devices - mountpoint: /var/log - fstype: ext4 - mount_options: defaults - # Filesystem UUID or label can be specified. UUID recommended - fs_uuid: cdb74f1c-9e50-4e51-be1d-068b0e9ff69e - fs_label: logs - # Platform (Operating System) settings - platform: - image: ubuntu_16.04_hwe - kernel_params: default - # Additional metadata to apply to a node - metadata: - # Base URL of the introspection service - may go in curtin data - introspection_url: http://172.16.1.10:9090 ---- -apiVersion: 'v1.0' -kind: HostProfile -metadata: - name: k8-node - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - # host_profile inheritance allows for deduplication of common CIs - # Inheritance is additive for CIs that are lists of multiple items - # To remove an inherited list member, prefix the primary key value - # with '!'. - host_profile: defaults - # Hardware profile will map hardware specific details to the abstract - # names uses in the host profile as well as specify hardware specific - # configs. A viable model should be to build a host profile without a - # hardware_profile and then for each node inherit the host profile and - # specify a hardware_profile to map that node's hardware to the abstract - # settings of the host_profile - hardware_profile: HPGen9v3 - # Network interfaces. - interfaces: - # Keyed on device_name - # pxe is a special marker indicating which device should be used for pxe boot - - device_name: pxe - # The network link attached to this - network_link: pxe - # Slaves will specify aliases from hwdefinition.yaml - slaves: - - prim_nic01 - # Which networks will be configured on this interface - networks: - - name: pxe - - device_name: bond0 - network_link: gp - # If multiple slaves are specified, but no bonding config - # is applied to the link, design validation will fail - slaves: - - prim_nic01 - - prim_nic02 - # If multiple networks are specified, but no trunking - # config is applied to the link, design validation will fail - networks: - - name: mgmt - - name: private - metadata: - # Explicit tag assignment - tags: - - 'test' - # MaaS supports key/value pairs. Not sure of the use yet - owner_data: - foo: bar ---- -apiVersion: 'v1.0' -kind: HostProfile -metadata: - name: k8-node-public - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - host_profile: k8-node - interfaces: - - device_name: bond0 - networks: - # This is additive, so adds a network to those defined in the host_profile - # inheritance chain - - name: public ---- -apiVersion: 'v1.0' -kind: BaremetalNode -metadata: - name: controller01 - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - host_profile: k8-node-public - # the hostname for a server, could be used in multiple DNS domains to - # represent different interfaces - interfaces: - - device_name: bond0 - networks: - # '!' prefix for the value of the primary key indicates a record should be removed - - name: '!private' - # Addresses assigned to network interfaces - addressing: - # Which network the address applies to. If a network appears in addressing - # that isn't assigned to an interface, design validation will fail - - network: pxe - # The address assigned. Either a explicit IPv4 or IPv6 address - # or dhcp or slaac - address: dhcp - - network: mgmt - address: 172.16.1.20 - - network: public - address: 172.16.3.20 - metadata: - tags: - - os_ctl - rack: rack01 ---- -apiVersion: 'v1.0' -kind: BaremetalNode -metadata: - name: compute01 - region: sitename - date: 17-FEB-2017 - author: sh8121@att.com - description: Describe layer 2/3 attributes. Primarily CIs used for configuring server interfaces -spec: - host_profile: k8-node - addressing: - - network: pxe - address: dhcp - - network: mgmt - address: 172.16.1.21 - - network: private - address: 172.16.2.21 diff --git a/examples/designparts_v1.0.yaml b/examples/designparts_v1.0.yaml new file mode 100644 index 00000000..1f669fab --- /dev/null +++ b/examples/designparts_v1.0.yaml @@ -0,0 +1,331 @@ +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# 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. +--- +# Site/Region wide definitions. Each design part will be a constituent +# of the design for exactly one Region +apiVersion: 'v1.0' +kind: Region +metadata: + name: sitename + date: 17-FEB-2017 + description: Sample site design + author: sh8121@att.com +spec: + # List of query-based definitions for applying tags to deployed nodes + tag_definitions: + - tag: 'high_memory' + # Tag to apply to nodes that qualify for the query + definition_type: 'lshw_xpath' + # Only support on type for now - 'lshw_xpath' used by MaaS + definition: //node[@id="memory"]/'size units="bytes"' > 137438953472 + # an xpath query that is run against the output of 'lshw -xml' from the node + # Image and package repositories needed by Drydock drivers. Needs to be defined + repositories: + - name: 'ubuntu-main' +--- +apiVersion: 'v1.0' +kind: NetworkLink +metadata: + name: oob + region: sitename + date: 17-FEB-2017 + author: sh8121@att.com + description: Describe layer 1 attributes. Primary key is 'name'. These settings will generally be things the switch and server have to agree on +spec: + bonding: + # Mode can be 'disabled', '802.3ad', 'balanced-rr', 'active-backup'. Defaults to disabled + mode: '802.3ad' + # The below apply to 802.3ad (LACP + # Link selection hash. Supports 'layer3+4', 'layer2', 'layer2+3'. Defaults to 'layer3+4' + hash: 'layer3+4' + # LACP peering rate. Supports 'slow', 'fast'. Defaults to 'fast' + peer_rate: 'fast' + # LACP link monitor rate in milliseconds. Defaults to 100ms + mon_rate: 100 + # LACP delay for marking link up in milliseconds. Must be greater than mon_rate. Defaults to 200ms + up_delay: 200 + # LACP dleay for marking link down in milliseconds. Must be greater than mon_rate. Defaults to 200ms + down_delay: 200 + # Physical link default MTU size. No default + mtu: 1500 + # Physical link speed. Supports 'auto', '100full'. Gigabit+ speeds require auto. No default + linkspeed: 'auto' + # Settings for using a link for multiple L2 networks + trunking: + # Trunking mode. Supports 'disabled', '802.1q'. Defaults to disabled + mode: disabled + # If disabled, what network is this port on. If '802.1q' what is the default network for the port. No default. + default_network: oob +--- +apiVersion: 'v1.0' +kind: Network +metadata: + name: oob + region: sitename + date: 17-FEB-2017 + author: sh8121@att.com + description: Describe layer 2 and 3 attributes. Primary key is 'name'. +spec: + # CIDR representation of network number and netmask + cidr: '172.16.1.0/24' + # How addresses are allocated on the network. Supports 'static', 'dhcp'. Defaults to 'static' + allocation: 'static' + # VLAN of this network. Defaults to None + vlan: 100 + # MTU of this network. Defaults to the MTU specified for the NetworkLink used for this network + dns: + # Domain name used to register addresses assigned from this network. Defaults to 'local' + domain: 'aic.att.com' + # Comma-separated list of DNS server IP addresses. These will be configured on the node if + # this network is identified as the node's primary network + servers: '8.8.8.8, 4.4.4.4' + # Defined IP address ranges. All node IP address assignments must fall into a defined range + # of the correct type + ranges: + # Type of range. Supports 'static' or 'dhcp'. No default + - type: 'dhcp' + # Start of the address range, inclusive. No default + start: '172.16.1.100' + # End of the address range, inclusive. No default + end: '172.16.1.254' + # Routes defined for this network, including the default route (i.e. default gateway) + routes: + # The network being routed to in CIDR notation. Default gateway is 0.0.0.0/0. + - subnet: '0.0.0.0/0' + # Next hop for traffic using this route + gateway: '172.16.1.3' + # Selection metric for the host selecting this route. No default + metric: 10 +--- +apiVersion: 'v1.0' +kind: HardwareProfile +metadata: + name: DellR720v2 + region: sitename + date: 17-FEB-2017 + author: sh8121@att.com + description: Describe server hardware attributes. Not a specific server, but profile adopted by a server defintion. +spec: + # Chassis vendor + vendor: 'Dell' + # Chassis model generation + generation: '1' + # Chassis model version + hw_version: '2' + # Certified BIOS version for this chassis + bios_version: '2.2.3' + # Boot mode. Supports 'bios' or 'uefi' + boot_mode: 'bios' + # How the node should be initially bootstrapped. Supports 'pxe' + bootstrap_protocol: 'pxe' + # What network interface to use for PXE booting + # for chassis that support selection + pxe_interface: '0' + # Mapping of hardware alias/role to physical address + device_aliases: + # the device alias that will be referenced in HostProfile or BaremetalNode design parts + - alias: 'pnic01' + # The hardware bus the device resides on. Supports 'pci' and 'scsi'. No default + bus_type: 'pci' + # The type of device as reported by lshw. Can be used to validate hardware manifest. No default + dev_type: 'Intel 10Gbps NIC' + # Physical address on the bus + address: '0000:00:03.0' +--- +apiVersion: 'v1.0' +kind: HostProfile +metadata: + name: lcp_node + region: sitename + date: 17-FEB-2017 + author: sh8121@att.com + description: Describe server configuration attributes. Not a specific server, but profile adopted by a server definition +spec: + # The HostProfile this profile adopts initial state from. No default. + # See drydock_provisioner/objects/readme.md for information on how HostProfile and BaremetalNode inheritance works + host_profile: 'defaults' + # The HardwareProfile describing the node hardware. No default. + hardware_profile: 'DellR720v1' + # OOB access to node + oob: + # Type of OOB access. Supports 'ipmi' + type: 'ipmi' + # Which network - as defined in a Network design part - to access the OOB interface on + network: 'oob' + # Account name for authenticating on the OOB interface + account: 'admin' + # Credential for authentication on the OOB interface. The OOB driver will interpret this. + credential: 'admin' + # How local node storage is configured + storage: + # How storage is laid out. Supports 'lvm' and 'flat'. Defaults to 'lvm' + layout: 'lvm' + # Configuration for the boot disk + bootdisk: + # Hardware disk (or hardware RAID device) used for booting. Can refer to a + # HardwareProfile device alias or a explicit device name + device: 'bootdisk' + # Size of the root volume. Can be specified by percentage or explicit size in + # megabytes or gigabytes. Defaults to 100% of boot device. + root_size: '100g' + # If a separate boot volume is needed, specify size. Defaults to 0 where /boot goes on root. + boot_size: '0' + # Non-boot volumes that should be carved out of local storage + partitions: + # Name of the volume. Doesn't translate to any operating system config + name: 'logs' + # Hardware device the volume should go on + device: 'bootdisk' + # Partition UUID. Defaults to None. A value of 'generate' means Drydock will generate a UUID + part_uuid: + # Size of the volume in megabytes or gigabytes + size: '10g' + # Filesystem mountpoint if volume should be a filesystem + mountpoint: '/var/logs' + # The below are ignored if mountpoint is None + # Format of filesystem. Defaults to ext4 + fstype: 'ext4' + # Mount options of the file system as used in /etc/fstab. Defaults to 'defaults' + mount_options: 'defaults' + # Filesystem UUID. Defaults to None. A value of 'generate' means Drydock will generate a UUID + fs_uuid: + # A filesystem label. Defaults to None + fs_label: + # Physical and logical network interfaces + interfaces: + # What the interface should be named in the operating system. May not match a hardware device name + device_name: bond0 + # The NetworkLink connected to this interface. Must be the name of a NetworkLink design part + device_link: 'gp' + # Whether this interface is considered the primary interface on the server. Supports true and false. Defaults to false + primary: true + # Hardware devices that support this interface. For configurating a physical device, this would be a list of one + # For bonds, this would be a list of all the physical devices in the bond. These can refer to HardwareProfile device aliases + # or explicit device names + slaves: + - 'pnic01' + - 'pnic02' + # Network that will be accessed on this interface. These should each be to the name of a Network design part + # Multiple networks listed here assume that this interface is attached to a NetworkLink supporting trunking + networks: + - 'mgmt' + - 'admin' + # Metadata about the node + metadata: + # Explicit tags to propagate to Kubernetes. Simple strings of any value + tags: + - 'lcp_node' + # Key/value mapping that will propagate to the node for next-step bootstrapping + owner_data: + nic_access: 'sriov' + # The rack a node sits in. Simple string + rack: r1 +--- +apiVersion: 'v1.0' +kind: BaremetalNode +metadata: + name: lcp_controller01 + region: sitename + date: 17-FEB-2017 + author: sh8121@att.com + description: Specify a physical server. +spec: + # The HostProfile this server adopts initial state from. No default. + # See drydock_provisioner/objects/readme.md for information on how HostProfile and BaremetalNode inheritance works + host_profile: 'defaults' + # The HardwareProfile describing the node hardware. No default. + hardware_profile: 'DellR720v1' + # OOB access to node + oob: + # Type of OOB access. Supports 'ipmi' + type: 'ipmi' + # Which network - as defined in a Network design part - to access the OOB interface on + network: 'oob' + # Account name for authenticating on the OOB interface + account: 'admin' + # Credential for authentication on the OOB interface. The OOB driver will interpret this. + credential: 'admin' + # How local node storage is configured + storage: + # How storage is laid out. Supports 'lvm' and 'flat'. Defaults to 'lvm' + layout: 'lvm' + # Configuration for the boot disk + bootdisk: + # Hardware disk (or hardware RAID device) used for booting. Can refer to a + # HardwareProfile device alias or a explicit device name + device: 'bootdisk' + # Size of the root volume. Can be specified by percentage or explicit size in + # megabytes or gigabytes. Defaults to 100% of boot device. + root_size: '100g' + # If a separate boot volume is needed, specify size. Defaults to 0 where /boot goes on root. + boot_size: '0' + # Non-boot volumes that should be carved out of local storage + partitions: + # Name of the volume. Doesn't translate to any operating system config + name: 'logs' + # Hardware device the volume should go on + device: 'bootdisk' + # Partition UUID. Defaults to None. A value of 'generate' means Drydock will generate a UUID + part_uuid: + # Size of the volume in megabytes or gigabytes + size: '10g' + # Filesystem mountpoint if volume should be a filesystem + mountpoint: '/var/logs' + # The below are ignored if mountpoint is None + # Format of filesystem. Defaults to ext4 + fstype: 'ext4' + # Mount options of the file system as used in /etc/fstab. Defaults to 'defaults' + mount_options: 'defaults' + # Filesystem UUID. Defaults to None. A value of 'generate' means Drydock will generate a UUID + fs_uuid: + # A filesystem label. Defaults to None + fs_label: + # Physical and logical network interfaces + interfaces: + # What the interface should be named in the operating system. May not match a hardware device name + - device_name: bond0 + # The NetworkLink connected to this interface. Must be the name of a NetworkLink design part + device_link: 'gp' + # Whether this interface is considered the primary interface on the server. Supports true and false. Defaults to false + primary: true + # Hardware devices that support this interface. For configurating a physical device, this would be a list of one + # For bonds, this would be a list of all the physical devices in the bond. These can refer to HardwareProfile device aliases + # or explicit device names + slaves: + - 'pnic01' + - 'pnic02' + # Network that will be accessed on this interface. These should each be to the name of a Network design part + # Multiple networks listed here assume that this interface is attached to a NetworkLink supporting trunking + networks: + - 'mgmt' + - 'admin' + # Metadata about the node + metadata: + # Explicit tags to propagate to Kubernetes. Simple strings of any value + tags: + - 'lcp_node' + # Key/value mapping that will propagate to the node for next-step bootstrapping + owner_data: + nic_access: 'sriov' + # The rack a node sits in. Simple string + rack: r1 + # How each attached network is accessed by this node + addressing: + # The name of a defined Network design part also listed in the 'networks' section of a interface definition + - network: 'pxe' + # Address should be an explicit IP address assignment or 'dhcp' + address: 'dhcp' + - network: 'mgmt' + address: '172.16.1.83' +--- \ No newline at end of file diff --git a/examples/readme.md b/examples/readme.md new file mode 100644 index 00000000..567e9981 --- /dev/null +++ b/examples/readme.md @@ -0,0 +1,7 @@ +# File Definition Examples + +## designparts_v1.0.yaml + +This is a reference file for the YAML schema supported by the Drydock YAML +ingester. Each design part currently supported is listed with all supported +attributes and comments on attribute use and restrictions. \ No newline at end of file diff --git a/setup.py b/setup.py index 4436a8f1..dc97cc33 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# helm_drydock - A tool to consume a host topology and orchestrate +# drydock_provisioner - A tool to consume a host topology and orchestrate # and monitor the provisioning of those hosts and execution of bootstrap # scripts # @@ -32,27 +32,27 @@ from setuptools import setup -setup(name='helm_drydock', +setup(name='drydock_provisioner', version='0.1a1', description='Bootstrapper for Kubernetes infrastructure', url='http://github.com/att-comdev/drydock', author='Scott Hussey - AT&T', author_email='sh8121@att.com', license='Apache 2.0', - packages=['helm_drydock', - 'helm_drydock.objects', - 'helm_drydock.ingester', - 'helm_drydock.ingester.plugins', - 'helm_drydock.statemgmt', - 'helm_drydock.orchestrator', - 'helm_drydock.control', - 'helm_drydock.drivers', - 'helm_drydock.drivers.oob', - 'helm_drydock.drivers.oob.pyghmi_driver', - 'helm_drydock.drivers.node', - 'helm_drydock.drivers.node.maasdriver', - 'helm_drydock.drivers.node.maasdriver.models', - 'helm_drydock.control'], + packages=['drydock_provisioner', + 'drydock_provisioner.objects', + 'drydock_provisioner.ingester', + 'drydock_provisioner.ingester.plugins', + 'drydock_provisioner.statemgmt', + 'drydock_provisioner.orchestrator', + 'drydock_provisioner.control', + 'drydock_provisioner.drivers', + 'drydock_provisioner.drivers.oob', + 'drydock_provisioner.drivers.oob.pyghmi_driver', + 'drydock_provisioner.drivers.node', + 'drydock_provisioner.drivers.node.maasdriver', + 'drydock_provisioner.drivers.node.maasdriver.models', + 'drydock_provisioner.control'], install_requires=[ 'PyYAML', 'pyghmi>=1.0.18', diff --git a/tests/integration/test_maasdriver_client.py b/tests/integration/test_maasdriver_client.py index 88b86e95..3c174018 100644 --- a/tests/integration/test_maasdriver_client.py +++ b/tests/integration/test_maasdriver_client.py @@ -13,8 +13,8 @@ # limitations under the License. import json -import helm_drydock.config as config -import helm_drydock.drivers.node.maasdriver.api_client as client +import drydock_provisioner.config as config +import drydock_provisioner.drivers.node.maasdriver.api_client as client class TestClass(object): diff --git a/tests/integration/test_maasdriver_network.py b/tests/integration/test_maasdriver_network.py index 36c8b324..ba5f5114 100644 --- a/tests/integration/test_maasdriver_network.py +++ b/tests/integration/test_maasdriver_network.py @@ -14,10 +14,10 @@ import json import uuid -import helm_drydock.config as config -import helm_drydock.drivers.node.maasdriver.api_client as client -import helm_drydock.drivers.node.maasdriver.models.fabric as maas_fabric -import helm_drydock.drivers.node.maasdriver.models.subnet as maas_subnet +import drydock_provisioner.config as config +import drydock_provisioner.drivers.node.maasdriver.api_client as client +import drydock_provisioner.drivers.node.maasdriver.models.fabric as maas_fabric +import drydock_provisioner.drivers.node.maasdriver.models.subnet as maas_subnet class TestClass(object): diff --git a/tests/integration/test_orch_node_networks.py b/tests/integration/test_orch_node_networks.py index 85619a30..15c2f811 100644 --- a/tests/integration/test_orch_node_networks.py +++ b/tests/integration/test_orch_node_networks.py @@ -17,23 +17,23 @@ import shutil import os import uuid -import helm_drydock.config as config -import helm_drydock.drivers.node.maasdriver.api_client as client -import helm_drydock.ingester.plugins.yaml -import helm_drydock.statemgmt as statemgmt -import helm_drydock.objects as objects -import helm_drydock.orchestrator as orch -import helm_drydock.objects.fields as hd_fields -import helm_drydock.objects.task as task -import helm_drydock.drivers as drivers -from helm_drydock.ingester import Ingester +import drydock_provisioner.config as config +import drydock_provisioner.drivers.node.maasdriver.api_client as client +import drydock_provisioner.ingester.plugins.yaml +import drydock_provisioner.statemgmt as statemgmt +import drydock_provisioner.objects as objects +import drydock_provisioner.orchestrator as orch +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.objects.task as task +import drydock_provisioner.drivers as drivers +from drydock_provisioner.ingester import Ingester class TestClass(object): def test_client_verify(self): design_state = statemgmt.DesignState() orchestrator = orch.Orchestrator(state_manager=design_state, - enabled_drivers={'node': 'helm_drydock.drivers.node.maasdriver.driver.MaasNodeDriver'}) + enabled_drivers={'node': 'drydock_provisioner.drivers.node.maasdriver.driver.MaasNodeDriver'}) orch_task = orchestrator.create_task(task.OrchestratorTask, site='sitename', @@ -57,14 +57,14 @@ class TestClass(object): design_state.post_design(design_data) ingester = Ingester() - ingester.enable_plugins([helm_drydock.ingester.plugins.yaml.YamlIngester]) + ingester.enable_plugins([drydock_provisioner.ingester.plugins.yaml.YamlIngester]) ingester.ingest_data(plugin_name='yaml', design_state=design_state, filenames=[str(input_file)], design_id=design_id) design_data = design_state.get_design(design_id) orchestrator = orch.Orchestrator(state_manager=design_state, - enabled_drivers={'node': 'helm_drydock.drivers.node.maasdriver.driver.MaasNodeDriver'}) + enabled_drivers={'node': 'drydock_provisioner.drivers.node.maasdriver.driver.MaasNodeDriver'}) orch_task = orchestrator.create_task(task.OrchestratorTask, site='sitename', diff --git a/tests/unit/test_design_inheritance.py b/tests/unit/test_design_inheritance.py index e5c57ce8..dad63a0f 100644 --- a/tests/unit/test_design_inheritance.py +++ b/tests/unit/test_design_inheritance.py @@ -12,16 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -from helm_drydock.ingester import Ingester -from helm_drydock.statemgmt import DesignState -from helm_drydock.orchestrator import Orchestrator +from drydock_provisioner.ingester import Ingester +from drydock_provisioner.statemgmt import DesignState +from drydock_provisioner.orchestrator import Orchestrator from copy import deepcopy import pytest import shutil import os -import helm_drydock.ingester.plugins.yaml +import drydock_provisioner.ingester.plugins.yaml import yaml class TestClass(object): @@ -32,7 +32,7 @@ class TestClass(object): def test_design_inheritance(self, loaded_design): orchestrator = Orchestrator(state_manager=loaded_design, - enabled_drivers={'oob': 'helm_drydock.drivers.oob.pyghmi_driver.PyghmiDriver'}) + enabled_drivers={'oob': 'drydock_provisioner.drivers.oob.pyghmi_driver.PyghmiDriver'}) design_data = orchestrator.load_design_data("sitename") @@ -63,7 +63,7 @@ class TestClass(object): design_state.post_design_base(design_data) ingester = Ingester() - ingester.enable_plugins([helm_drydock.ingester.plugins.yaml.YamlIngester]) + ingester.enable_plugins([drydock_provisioner.ingester.plugins.yaml.YamlIngester]) ingester.ingest_data(plugin_name='yaml', design_state=design_state, filenames=[str(input_file)]) return design_state diff --git a/tests/unit/test_ingester.py b/tests/unit/test_ingester.py index a719ad6c..9b083322 100644 --- a/tests/unit/test_ingester.py +++ b/tests/unit/test_ingester.py @@ -12,14 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -from helm_drydock.ingester import Ingester -from helm_drydock.statemgmt import DesignState -import helm_drydock.objects as objects +from drydock_provisioner.ingester import Ingester +from drydock_provisioner.statemgmt import DesignState +import drydock_provisioner.objects as objects import pytest import shutil import os -import helm_drydock.ingester.plugins.yaml +import drydock_provisioner.ingester.plugins.yaml class TestClass(object): @@ -37,7 +37,7 @@ class TestClass(object): design_state.post_design(design_data) ingester = Ingester() - ingester.enable_plugins([helm_drydock.ingester.plugins.yaml.YamlIngester]) + ingester.enable_plugins([drydock_provisioner.ingester.plugins.yaml.YamlIngester]) ingester.ingest_data(plugin_name='yaml', design_state=design_state, filenames=[str(input_file)], design_id=design_id) @@ -59,7 +59,7 @@ class TestClass(object): design_state.post_design(design_data) ingester = Ingester() - ingester.enable_plugins([helm_drydock.ingester.plugins.yaml.YamlIngester]) + ingester.enable_plugins([drydock_provisioner.ingester.plugins.yaml.YamlIngester]) ingester.ingest_data(plugin_name='yaml', design_state=design_state, design_id=design_id, filenames=[str(profiles_file), str(networks_file), str(nodes_file)]) diff --git a/tests/unit/test_ingester_yaml.py b/tests/unit/test_ingester_yaml.py index 3be5db08..c078401f 100644 --- a/tests/unit/test_ingester_yaml.py +++ b/tests/unit/test_ingester_yaml.py @@ -16,7 +16,7 @@ import shutil import os import uuid -from helm_drydock.ingester.plugins.yaml import YamlIngester +from drydock_provisioner.ingester.plugins.yaml import YamlIngester class TestClass(object): diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py index e5014444..25c5128a 100644 --- a/tests/unit/test_models.py +++ b/tests/unit/test_models.py @@ -14,8 +14,8 @@ import pytest -import helm_drydock.objects as objects -from helm_drydock.objects import fields +import drydock_provisioner.objects as objects +from drydock_provisioner.objects import fields class TestClass(object): @@ -23,7 +23,7 @@ class TestClass(object): objects.register_all() model_attr = { - 'versioned_object.namespace': 'helm_drydock.objects', + 'versioned_object.namespace': 'drydock_provisioner.objects', 'versioned_object.name': 'HardwareProfile', 'versioned_object.version': '1.0', 'versioned_object.data': { @@ -38,13 +38,13 @@ class TestClass(object): 'bootstrap_protocol': 'pxe', 'pxe_interface': '0', 'devices': { - 'versioned_object.namespace': 'helm_drydock.objects', + 'versioned_object.namespace': 'drydock_provisioner.objects', 'versioned_object.name': 'HardwareDeviceAliasList', 'versioned_object.version': '1.0', 'versioned_object.data': { 'objects': [ { - 'versioned_object.namespace': 'helm_drydock.objects', + 'versioned_object.namespace': 'drydock_provisioner.objects', 'versioned_object.name': 'HardwareDeviceAlias', 'versioned_object.version': '1.0', 'versioned_object.data': { @@ -56,7 +56,7 @@ class TestClass(object): } }, { - 'versioned_object.namespace': 'helm_drydock.objects', + 'versioned_object.namespace': 'drydock_provisioner.objects', 'versioned_object.name': 'HardwareDeviceAlias', 'versioned_object.version': '1.0', 'versioned_object.data': { diff --git a/tests/unit/test_orch_generic.py b/tests/unit/test_orch_generic.py index 86739965..82940686 100644 --- a/tests/unit/test_orch_generic.py +++ b/tests/unit/test_orch_generic.py @@ -18,11 +18,11 @@ import threading import time -import helm_drydock.orchestrator as orch -import helm_drydock.objects.fields as hd_fields -import helm_drydock.statemgmt as statemgmt -import helm_drydock.objects.task as task -import helm_drydock.drivers as drivers +import drydock_provisioner.orchestrator as orch +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.statemgmt as statemgmt +import drydock_provisioner.objects.task as task +import drydock_provisioner.drivers as drivers class TestClass(object): diff --git a/tests/unit/test_orch_oob.py b/tests/unit/test_orch_oob.py index 6c10d8f1..b510b935 100644 --- a/tests/unit/test_orch_oob.py +++ b/tests/unit/test_orch_oob.py @@ -23,15 +23,15 @@ import os import shutil import uuid -from helm_drydock.ingester import Ingester +from drydock_provisioner.ingester import Ingester -import helm_drydock.orchestrator as orch -import helm_drydock.objects.fields as hd_fields -import helm_drydock.statemgmt as statemgmt -import helm_drydock.objects as objects -import helm_drydock.objects.task as task -import helm_drydock.drivers as drivers -import helm_drydock.ingester.plugins.yaml as yaml_ingester +import drydock_provisioner.orchestrator as orch +import drydock_provisioner.objects.fields as hd_fields +import drydock_provisioner.statemgmt as statemgmt +import drydock_provisioner.objects as objects +import drydock_provisioner.objects.task as task +import drydock_provisioner.drivers as drivers +import drydock_provisioner.ingester.plugins.yaml as yaml_ingester class TestClass(object): @@ -44,7 +44,7 @@ class TestClass(object): #mocker.patch.object('pyghmi.ipmi.command.Command','get_asset_tag') orchestrator = orch.Orchestrator(state_manager=loaded_design, - enabled_drivers={'oob': 'helm_drydock.drivers.oob.pyghmi_driver.PyghmiDriver'}) + enabled_drivers={'oob': 'drydock_provisioner.drivers.oob.pyghmi_driver.PyghmiDriver'}) orch_task = orchestrator.create_task(task.OrchestratorTask, site='sitename', @@ -63,7 +63,7 @@ class TestClass(object): #mocker.patch.object('pyghmi.ipmi.command.Command','set_bootdev') orchestrator = orch.Orchestrator(state_manager=loaded_design, - enabled_drivers={'oob': 'helm_drydock.drivers.oob.pyghmi_driver.PyghmiDriver'}) + enabled_drivers={'oob': 'drydock_provisioner.drivers.oob.pyghmi_driver.PyghmiDriver'}) orch_task = orchestrator.create_task(task.OrchestratorTask, site='sitename', diff --git a/tests/unit/test_statemgmt.py b/tests/unit/test_statemgmt.py index edb82764..17c90899 100644 --- a/tests/unit/test_statemgmt.py +++ b/tests/unit/test_statemgmt.py @@ -15,8 +15,8 @@ import pytest import shutil -import helm_drydock.objects as objects -import helm_drydock.statemgmt as statemgmt +import drydock_provisioner.objects as objects +import drydock_provisioner.statemgmt as statemgmt class TestClass(object):