diff --git a/api-ref/source/parameters.yaml b/api-ref/source/parameters.yaml index 0d575063b8..d8d413a6e7 100644 --- a/api-ref/source/parameters.yaml +++ b/api-ref/source/parameters.yaml @@ -225,8 +225,7 @@ dns_nameserver: docker_storage_driver: description: | The name of a driver to manage the storage for the images and the - container's writable layer. The supported drivers are ``devicemapper`` and - ``overlay``. The default is ``devicemapper``. + container's writable layer. The default is ``devicemapper``. in: body required: true type: string diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst index 32dd190199..f6c97d9b1c 100644 --- a/doc/source/user/index.rst +++ b/doc/source/user/index.rst @@ -236,8 +236,7 @@ They are loosely grouped as: mandatory, infrastructure, COE specific. --docker-storage-driver \ The name of a driver to manage the storage for the images and the - container's writable layer. The supported drivers are 'devicemapper' - and 'overlay'. The default is 'devicemapper'. + container's writable layer. The default is 'devicemapper'. --labels \ Arbitrary labels in the form of key=value pairs. The accepted keys @@ -1025,8 +1024,7 @@ Volume driver (volume-driver) Storage driver (docker-storage-driver) Specified in the ClusterTemplate to select the Docker storage driver. The - supported storage drivers are 'devicemapper' and 'overlay', with - 'devicemapper' being the default. Refer to the `Storage`_ section for more + default is 'devicemapper'. Refer to the `Storage`_ section for more details. Image (image) @@ -1203,8 +1201,7 @@ Volume driver (volume-driver) Storage driver (docker-storage-driver) Specified in the ClusterTemplate to select the Docker storage driver. The - supported storage driver are 'devicemapper' and 'overlay', with - 'devicemapper' being the default. Refer to the `Storage`_ section for more + default is 'devicemapper'. Refer to the `Storage`_ section for more details. Image (image) diff --git a/magnum/api/controllers/v1/baymodel.py b/magnum/api/controllers/v1/baymodel.py index fb9b268e18..1b5c0e6c2f 100644 --- a/magnum/api/controllers/v1/baymodel.py +++ b/magnum/api/controllers/v1/baymodel.py @@ -127,7 +127,7 @@ class BayModel(base.APIBase): insecure_registry = wtypes.StringType(min_length=1, max_length=255) """Insecure registry URL when creating a Baymodel""" - docker_storage_driver = wtypes.Enum(str, *fields.DockerStorageDriver.ALL) + docker_storage_driver = wtypes.StringType(min_length=1, max_length=255) """Docker storage driver""" master_lb_enabled = wsme.wsattr(types.boolean, default=False) diff --git a/magnum/api/controllers/v1/cluster_template.py b/magnum/api/controllers/v1/cluster_template.py index cc95bfcfe9..fe0d942761 100644 --- a/magnum/api/controllers/v1/cluster_template.py +++ b/magnum/api/controllers/v1/cluster_template.py @@ -128,7 +128,7 @@ class ClusterTemplate(base.APIBase): insecure_registry = wtypes.StringType(min_length=1, max_length=255) """Insecure registry URL when creating a ClusterTemplate """ - docker_storage_driver = wtypes.Enum(str, *fields.DockerStorageDriver.ALL) + docker_storage_driver = wtypes.StringType(min_length=1, max_length=255) """Docker storage driver""" master_lb_enabled = wsme.wsattr(types.boolean, default=False) diff --git a/magnum/db/sqlalchemy/alembic/versions/04c625aa95ba_change_storage_driver_to_string.py b/magnum/db/sqlalchemy/alembic/versions/04c625aa95ba_change_storage_driver_to_string.py new file mode 100644 index 0000000000..4a53f32579 --- /dev/null +++ b/magnum/db/sqlalchemy/alembic/versions/04c625aa95ba_change_storage_driver_to_string.py @@ -0,0 +1,33 @@ +# 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. +"""change storage driver to string + +Revision ID: 04c625aa95ba +Revises: 52bcaf58fecb +Create Date: 2017-10-10 15:40:37.553288 + +""" + +# revision identifiers, used by Alembic. +revision = '04c625aa95ba' +down_revision = '52bcaf58fecb' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.alter_column('cluster_template', 'docker_storage_driver', + existing_type=sa.Enum('devicemapper', 'overlay', + name='docker_storage_driver'), + type_=sa.String(length=512), + nullable=True) diff --git a/magnum/drivers/common/templates/fragments/configure-docker-storage.sh b/magnum/drivers/common/templates/fragments/configure-docker-storage.sh index 4704e07558..87b803825b 100644 --- a/magnum/drivers/common/templates/fragments/configure-docker-storage.sh +++ b/magnum/drivers/common/templates/fragments/configure-docker-storage.sh @@ -32,14 +32,8 @@ fi $configure_docker_storage_driver -if [ "$DOCKER_STORAGE_DRIVER" = "overlay" ]; then - if [ $(echo -e "$(uname -r)\n3.18" | sort -V | head -1) = $(uname -r) ]; then - ERROR_MESSAGE="OverlayFS requires at least Linux kernel 3.18. Cluster node kernel version: $(uname -r)" - echo "ERROR: ${ERROR_MESSAGE}" >&2 - sh -c "${WAIT_CURL} --data-binary '{\"status\": \"FAILURE\", \"reason\": \"${ERROR_MESSAGE}\"}'" - else - configure_overlay - fi -else +if [ "$DOCKER_STORAGE_DRIVER" = "devicemapper" ]; then configure_devicemapper +else + configure_storage_driver_generic $DOCKER_STORAGE_DRIVER fi diff --git a/magnum/drivers/common/templates/fragments/configure_docker_storage_driver_atomic.sh b/magnum/drivers/common/templates/fragments/configure_docker_storage_driver_atomic.sh index 9d92a666d2..a06cccc413 100644 --- a/magnum/drivers/common/templates/fragments/configure_docker_storage_driver_atomic.sh +++ b/magnum/drivers/common/templates/fragments/configure_docker_storage_driver_atomic.sh @@ -1,5 +1,5 @@ # This file contains docker storage drivers configuration for fedora -# atomic hosts. Currently, devicemapper and overlay are supported. +# atomic hosts, as supported by Magnum. # * Remove any existing docker-storage configuration. In case of an # existing configuration, docker-storage-setup will fail. @@ -17,8 +17,8 @@ clear_docker_storage () { fi } -# Configure docker storage with xfs as backing filesystem. -configure_overlay () { +# Configure generic docker storage driver. +configure_storage_driver_generic() { clear_docker_storage if [ -n "$DOCKER_VOLUME_SIZE" ] && [ "$DOCKER_VOLUME_SIZE" -gt 0 ]; then @@ -27,9 +27,7 @@ configure_overlay () { mount -a fi - echo "STORAGE_DRIVER=overlay" > /etc/sysconfig/docker-storage-setup - - docker-storage-setup + sed -i "/^DOCKER_STORAGE_OPTIONS=/ s/=.*/=-s $1/" /etc/sysconfig/docker-storage local lvname=$(lvdisplay | grep "LV\ Path" | awk '{print $3}') local pvname=$(pvdisplay | grep "PV\ Name" | awk '{print $3}') diff --git a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml index 8a05721aa1..a87183b999 100644 --- a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml +++ b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster.yaml @@ -153,8 +153,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] wait_condition_timeout: type: number diff --git a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml index 6bdc0acc50..335fae78c7 100644 --- a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml +++ b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml @@ -60,8 +60,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] volume_driver: type: string diff --git a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml index 53ef59dde7..d299fbe787 100644 --- a/magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml +++ b/magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml @@ -50,8 +50,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] tls_disabled: type: boolean diff --git a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml index 0225633e0f..736815903f 100644 --- a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml +++ b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml @@ -151,8 +151,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] wait_condition_timeout: type: number diff --git a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml index 43b987d75f..e496523199 100644 --- a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml +++ b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml @@ -49,8 +49,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] flannel_network_cidr: type: string diff --git a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion_software_configs.yaml b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion_software_configs.yaml index 0c7bd45a70..8b7d006b22 100644 --- a/magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion_software_configs.yaml +++ b/magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion_software_configs.yaml @@ -22,8 +22,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] tls_disabled: type: boolean diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml index aacafda325..103e8ef002 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml @@ -144,8 +144,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] loadbalancing_protocol: type: string diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml index c535676e33..a8f040762f 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml @@ -29,8 +29,6 @@ parameters: docker_storage_driver: type: string description: docker storage driver name - constraints: - - allowed_values: ["devicemapper", "overlay"] external_network: type: string diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml index d4562e1746..3d4dd64899 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml @@ -38,8 +38,6 @@ parameters: docker_storage_driver: type: string description: docker storage driver name - constraints: - - allowed_values: ["devicemapper", "overlay"] external_network: type: string diff --git a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmcluster.yaml b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmcluster.yaml index 9687836754..55de3290d0 100644 --- a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmcluster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmcluster.yaml @@ -116,8 +116,6 @@ parameters: type: string description: docker storage driver name default: "devicemapper" - constraints: - - allowed_values: ["devicemapper", "overlay"] loadbalancing_protocol: type: string diff --git a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmmaster.yaml b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmmaster.yaml index 8f8d6ffb4f..cd7e675c54 100644 --- a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmmaster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmmaster.yaml @@ -30,8 +30,6 @@ parameters: docker_storage_driver: type: string description: docker storage driver name - constraints: - - allowed_values: ["devicemapper", "overlay"] external_network: type: string diff --git a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmnode.yaml b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmnode.yaml index c0c362a7f5..a205833001 100644 --- a/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmnode.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v2/templates/swarmnode.yaml @@ -38,8 +38,6 @@ parameters: docker_storage_driver: type: string description: docker storage driver name - constraints: - - allowed_values: ["devicemapper", "overlay"] external_network: type: string diff --git a/magnum/objects/cluster_template.py b/magnum/objects/cluster_template.py index ecaff185da..955536d81c 100644 --- a/magnum/objects/cluster_template.py +++ b/magnum/objects/cluster_template.py @@ -41,7 +41,8 @@ class ClusterTemplate(base.MagnumPersistentObject, base.MagnumObject, # Version 1.15: Added 'floating_ip_enabled' field # Version 1.16: Renamed the class from "BayModel' to 'ClusterTemplate' # Version 1.17: 'coe' field type change to ClusterTypeField - VERSION = '1.17' + # Version 1.18: DockerStorageDriver is a StringField (was an Enum) + VERSION = '1.18' dbapi = dbapi.get_instance() @@ -63,8 +64,7 @@ class ClusterTemplate(base.MagnumPersistentObject, base.MagnumObject, 'volume_driver': fields.StringField(nullable=True), 'apiserver_port': fields.IntegerField(nullable=True), 'docker_volume_size': fields.IntegerField(nullable=True), - 'docker_storage_driver': m_fields.DockerStorageDriverField( - nullable=True), + 'docker_storage_driver': fields.StringField(nullable=True), 'cluster_distro': fields.StringField(nullable=True), 'coe': m_fields.ClusterTypeField(nullable=True), 'http_proxy': fields.StringField(nullable=True), diff --git a/magnum/objects/fields.py b/magnum/objects/fields.py index 559a4e8379..9024ef33d0 100644 --- a/magnum/objects/fields.py +++ b/magnum/objects/fields.py @@ -72,18 +72,6 @@ class ClusterType(fields.Enum): super(ClusterType, self).__init__(valid_values=ClusterType.ALL) -class DockerStorageDriver(fields.Enum): - ALL = ( - DEVICEMAPPER, OVERLAY, - ) = ( - 'devicemapper', 'overlay', - ) - - def __init__(self): - super(DockerStorageDriver, self).__init__( - valid_values=DockerStorageDriver.ALL) - - class QuotaResourceName(fields.Enum): ALL = ( CLUSTER, @@ -156,9 +144,5 @@ class ClusterTypeField(fields.BaseEnumField): AUTO_TYPE = ClusterType() -class DockerStorageDriverField(fields.BaseEnumField): - AUTO_TYPE = DockerStorageDriver() - - class ServerTypeField(fields.BaseEnumField): AUTO_TYPE = ServerType() diff --git a/magnum/tests/unit/objects/test_objects.py b/magnum/tests/unit/objects/test_objects.py index 0f9c3debd0..16d1f5c13a 100644 --- a/magnum/tests/unit/objects/test_objects.py +++ b/magnum/tests/unit/objects/test_objects.py @@ -356,7 +356,7 @@ class TestObject(test_base.TestCase, _TestObject): # http://docs.openstack.org/developer/magnum/objects.html object_data = { 'Cluster': '1.16-7a544c5059697c464810470980f81ba1', - 'ClusterTemplate': '1.17-f1ce5212b46506360b41ab5cb7658af4', + 'ClusterTemplate': '1.18-7fa94f4fdd027acfb4f022f202afdfb5', 'Certificate': '1.1-1924dc077daa844f0f9076332ef96815', 'MyObj': '1.0-34c4b1aadefd177b13f9a2f894cc23cd', 'X509KeyPair': '1.2-d81950af36c59a71365e33ce539d24f9', diff --git a/releasenotes/notes/bug-1722522-d94743c6362a5e48.yaml b/releasenotes/notes/bug-1722522-d94743c6362a5e48.yaml new file mode 100644 index 0000000000..b4164fff5f --- /dev/null +++ b/releasenotes/notes/bug-1722522-d94743c6362a5e48.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Allow any value to be passed on the docker_storage_driver field by turning it + into a StringField (was EnumField), and remove the constraints limiting the + values to 'devicemapper' and 'overlay'. +upgrade: + - | + Requires a db upgrade to change the docker_storage_driver + field to be a string instead of an enum.