Drop k8s_fedora_atomic_v1 driver

Change-Id: I3551ae244ecf99f67a9b142c964c020a5fae70a3
This commit is contained in:
Michal Nasiadka 2024-02-27 09:47:06 +01:00
parent 05c2b170c0
commit ed699b0c9a
24 changed files with 107 additions and 5900 deletions

View File

@ -90,7 +90,7 @@ class ClusterTemplate(base.APIBase):
"""The size in GB of the docker volume"""
cluster_distro = wtypes.StringType(min_length=1, max_length=255)
"""The Cluster distro for the Cluster, e.g. coreos, fedora-atomic, etc."""
"""The Cluster distro for the Cluster, e.g. coreos, fedora-coreos, etc."""
links = wsme.wsattr([link.Link], readonly=True)
"""A list containing a self link and associated ClusterTemplate links"""
@ -205,7 +205,7 @@ class ClusterTemplate(base.APIBase):
apiserver_port=8080,
docker_volume_size=25,
docker_storage_driver='devicemapper',
cluster_distro='fedora-atomic',
cluster_distro='fedora-coreos',
coe=fields.ClusterType.KUBERNETES,
http_proxy='http://proxy.com:123',
https_proxy='https://proxy.com:123',
@ -269,11 +269,6 @@ class ClusterTemplatesController(base.Controller):
"different storage driver, such as overlay2. overlay2 will be set "
"as the default storage driver from Victoria cycle in Magnum.")
_fedora_atomic_deprecation_note = (
"The fedora_atomic driver is deprecated in favor of the fedora_coreos "
"driver. Please migrate to the fedora_coreos driver. fedora_atomic "
"driver will be removed in a future Magnum version.")
def _generate_name_for_cluster_template(self, context):
"""Generate a random name like: zeta-22-model."""
@ -431,12 +426,6 @@ class ClusterTemplatesController(base.Controller):
DeprecationWarning)
LOG.warning(self._devicemapper_overlay_deprecation_note)
if (cluster_template_dict['coe'] == 'kubernetes' and
cluster_template_dict['cluster_distro'] == 'fedora-atomic'):
warnings.warn(self._fedora_atomic_deprecation_note,
DeprecationWarning)
LOG.warning(self._fedora_atomic_deprecation_note)
if (cluster_template_dict['coe'] == 'kubernetes' and
cluster_template_dict['cluster_distro'] == 'coreos'):
warnings.warn(self._coreos_deprecation_note,

View File

@ -1,53 +0,0 @@
# This file contains docker storage drivers configuration for fedora
# atomic hosts, as supported by Magnum.
# * Remove any existing docker-storage configuration. In case of an
# existing configuration, docker-storage-setup will fail.
# * Remove docker storage graph
ssh_cmd="ssh -F /srv/magnum/.ssh/config root@localhost"
clear_docker_storage () {
# stop docker
$ssh_cmd systemctl stop docker
$ssh_cmd systemctl disable docker-storage-setup
# clear storage graph
$ssh_cmd rm -rf /var/lib/docker/*
if [ -f /etc/sysconfig/docker-storage ]; then
sed -i "/^DOCKER_STORAGE_OPTIONS=/ s/=.*/=/" /etc/sysconfig/docker-storage
fi
}
# Configure generic docker storage driver.
configure_storage_driver_generic() {
clear_docker_storage
if [ -n "$DOCKER_VOLUME_SIZE" ] && [ "$DOCKER_VOLUME_SIZE" -gt 0 ]; then
$ssh_cmd mkfs.xfs -f ${device_path}
echo "${device_path} /var/lib/docker xfs defaults 0 0" >> /etc/fstab
$ssh_cmd mount -a
fi
echo "DOCKER_STORAGE_OPTIONS=\"--storage-driver $1\"" > /etc/sysconfig/docker-storage
}
# Configure docker storage with devicemapper using direct LVM
configure_devicemapper () {
clear_docker_storage
echo "GROWROOT=True" > /etc/sysconfig/docker-storage-setup
echo "STORAGE_DRIVER=devicemapper" >> /etc/sysconfig/docker-storage-setup
if [ -n "$DOCKER_VOLUME_SIZE" ] && [ "$DOCKER_VOLUME_SIZE" -gt 0 ]; then
$ssh_cmd pvcreate -f ${device_path}
$ssh_cmd vgcreate docker ${device_path}
echo "VG=docker" >> /etc/sysconfig/docker-storage-setup
else
echo "ROOT_SIZE=5GB" >> /etc/sysconfig/docker-storage-setup
echo "DATA_SIZE=95%FREE" >> /etc/sysconfig/docker-storage-setup
fi
$ssh_cmd docker-storage-setup
}

View File

@ -1,34 +0,0 @@
# Copyright 2016 Rackspace Inc. All 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.
from oslo_log import log as logging
from magnum.drivers.heat import driver
from magnum.drivers.k8s_fedora_atomic_v1 import template_def
LOG = logging.getLogger(__name__)
class Driver(driver.FedoraKubernetesDriver):
@property
def provides(self):
return [
{'server_type': 'vm',
'os': 'fedora-atomic',
'coe': 'kubernetes'},
]
def get_template_definition(self):
return template_def.AtomicK8sTemplateDefinition()

View File

@ -1,33 +0,0 @@
# Copyright 2016 Rackspace Inc. All 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.
import os
import magnum.conf
from magnum.drivers.heat import k8s_fedora_template_def as kftd
CONF = magnum.conf.CONF
class AtomicK8sTemplateDefinition(kftd.K8sFedoraTemplateDefinition):
"""Kubernetes template for a Fedora Atomic VM."""
@property
def driver_module_path(self):
return __name__[:__name__.rindex('.')]
@property
def template_path(self):
return os.path.join(os.path.dirname(os.path.realpath(__file__)),
'templates/kubecluster.yaml')

View File

@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,636 +0,0 @@
heat_template_version: queens
description: >
This is a nested stack that defines a single Kubernetes minion, This stack is
included by an AutoScalingGroup resource in the parent template
(kubecluster.yaml).
parameters:
name:
type: string
description: server name
server_image:
type: string
description: glance image used to boot the server
minion_flavor:
type: string
description: flavor to use when booting the server
nodegroup_role:
type: string
description: the role of the nodegroup
nodegroup_name:
type: string
description: the name of the nodegroup where the node belongs
ssh_key_name:
type: string
description: name of ssh key to be provisioned on our server
external_network:
type: string
description: uuid/name of a network to use for floating ip addresses
kube_allow_priv:
type: string
description: >
whether or not kubernetes should permit privileged containers.
constraints:
- allowed_values: ["true", "false"]
boot_volume_size:
type: number
description: >
size of the cinder boot volume
boot_volume_type:
type: string
description: >
type of the cinder boot volume
docker_volume_size:
type: number
description: >
size of a cinder volume to allocate to docker for container/image
storage
docker_volume_type:
type: string
description: >
type of a cinder volume to allocate to docker for container/image
storage
docker_storage_driver:
type: string
description: docker storage driver name
default: "devicemapper"
cgroup_driver:
type: string
description: >
cgroup driver name that kubelet should use, ideally the same as
the docker cgroup driver.
default: "cgroupfs"
tls_disabled:
type: boolean
description: whether or not to enable TLS
verify_ca:
type: boolean
description: whether or not to validate certificate authority
kubernetes_port:
type: number
description: >
The port which are used by kube-apiserver to provide Kubernetes
service.
cluster_uuid:
type: string
description: identifier for the cluster this template is generating
magnum_url:
type: string
description: endpoint to retrieve TLS certs from
prometheus_monitoring:
type: boolean
description: >
whether or not to have the node-exporter running on the node
kube_master_ip:
type: string
description: IP address of the Kubernetes master server.
etcd_server_ip:
type: string
description: IP address of the Etcd server.
fixed_network:
type: string
description: Network from which to allocate fixed addresses.
fixed_subnet:
type: string
description: Subnet from which to allocate fixed addresses.
network_driver:
type: string
description: network driver to use for instantiating container networks
flannel_network_cidr:
type: string
description: network range for flannel overlay network
wait_condition_timeout:
type: number
description : >
timeout for the Wait Conditions
registry_enabled:
type: boolean
description: >
Indicates whether the docker registry is enabled.
registry_port:
type: number
description: port of registry service
swift_region:
type: string
description: region of swift service
registry_container:
type: string
description: >
name of swift container which docker registry stores images in
registry_insecure:
type: boolean
description: >
indicates whether to skip TLS verification between registry and backend storage
registry_chunksize:
type: number
description: >
size fo the data segments for the swift dynamic large objects
secgroup_kube_minion_id:
type: string
description: ID of the security group for kubernetes minion.
volume_driver:
type: string
description: volume driver to use for container storage
region_name:
type: string
description: A logically separate section of the cluster
username:
type: string
description: >
user account
password:
type: string
description: >
user password, not set in current implementation, only used to
fill in for Kubernetes config file
hidden: true
http_proxy:
type: string
description: http proxy address for docker
https_proxy:
type: string
description: https proxy address for docker
no_proxy:
type: string
description: no proxies for docker
hyperkube_prefix:
type: string
description: prefix to use for hyperkube images
kube_tag:
type: string
description: tag of the k8s containers used to provision the kubernetes cluster
kube_version:
type: string
description: version of kubernetes used for kubernetes cluster
trustee_domain_id:
type: string
description: domain id of the trustee
trustee_user_id:
type: string
description: user id of the trustee
trustee_username:
type: string
description: username of the trustee
trustee_password:
type: string
description: password of the trustee
hidden: true
trust_id:
type: string
description: id of the trust which is used by the trustee
hidden: true
auth_url:
type: string
description: >
url for keystone, must be v2 since k8s backend only support v2
at this point
insecure_registry_url:
type: string
description: insecure registry url
container_infra_prefix:
type: string
description: >
prefix of container images used in the cluster, kubernetes components,
kubernetes-dashboard, coredns etc
dns_service_ip:
type: string
description: >
address used by Kubernetes DNS service
dns_cluster_domain:
type: string
description: >
domain name for cluster DNS
openstack_ca:
type: string
description: The OpenStack CA certificate to install on the node.
nodes_server_group_id:
type: string
description: ID of the server group for kubernetes cluster nodes.
availability_zone:
type: string
description: >
availability zone for master and nodes
default: ""
pods_network_cidr:
type: string
description: Configure the IP pool/range from which pod IPs will be chosen
kubelet_options:
type: string
description: >
additional options to be passed to the kubelet
kubeproxy_options:
type: string
description: >
additional options to be passed to the kube proxy
octavia_enabled:
type: boolean
description: >
whether or not to use Octavia for LoadBalancer type service.
default: False
cloud_provider_enabled:
type: boolean
description: Enable or disable the openstack kubernetes cloud provider
heat_container_agent_tag:
type: string
description: tag of the heat_container_agent system container
auto_healing_enabled:
type: boolean
description: >
true if the auto healing feature should be enabled
auto_healing_controller:
type: string
description: >
The service to be deployed for auto-healing.
default: "draino"
npd_enabled:
type: boolean
description: >
true if the npd service should be launched
default:
true
ostree_remote:
type: string
description: The ostree remote branch to upgrade
default: ''
ostree_commit:
type: string
description: The ostree commit to deploy
default: ''
use_podman:
type: boolean
description: >
if true, run system containers for kubernetes, etcd and heat-agent
selinux_mode:
type: string
description: >
Choose SELinux mode
container_runtime:
type: string
description: The container runtime to install
containerd_version:
type: string
description: The containerd version to download from https://storage.googleapis.com/cri-containerd-release/
containerd_tarball_url:
type: string
description: Url location of the containerd tarball.
containerd_tarball_sha256:
type: string
description: sha256 of the target containerd tarball.
conditions:
image_based: {equals: [{get_param: boot_volume_size}, 0]}
volume_based:
not:
equals:
- get_param: boot_volume_size
- 0
resources:
agent_config:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config:
list_join:
- "\n"
-
- str_replace:
template: {get_file: ../../common/templates/fragments/atomic-install-openstack-ca.sh}
params:
$OPENSTACK_CA: {get_param: openstack_ca}
- str_replace:
template: {get_file: ../../common/templates/kubernetes/fragments/start-container-agent.sh}
params:
$CONTAINER_INFRA_PREFIX: {get_param: container_infra_prefix}
$HEAT_CONTAINER_AGENT_TAG: {get_param: heat_container_agent_tag}
$USE_PODMAN: {get_param: use_podman}
$HTTP_PROXY: {get_param: http_proxy}
$HTTPS_PROXY: {get_param: https_proxy}
$NO_PROXY: {get_param: no_proxy}
- str_replace:
template: {get_file: ../../common/templates/kubernetes/fragments/disable-selinux.sh}
params:
$SELINUX_MODE: {get_param: selinux_mode}
######################################################################
#
# software configs. these are components that are combined into
# a multipart MIME user-data archive.
#
node_config:
type: OS::Heat::SoftwareConfig
properties:
group: script
config:
list_join:
- "\n"
-
- "#!/bin/bash"
- str_replace:
template: {get_file: ../../common/templates/kubernetes/fragments/write-heat-params.sh}
params:
$INSTANCE_NAME: {get_param: name}
$PROMETHEUS_MONITORING: {get_param: prometheus_monitoring}
$KUBE_ALLOW_PRIV: {get_param: kube_allow_priv}
$KUBE_MASTER_IP: {get_param: kube_master_ip}
$KUBE_API_PORT: {get_param: kubernetes_port}
$KUBE_NODE_PUBLIC_IP: {get_attr: [kube_minion_floating, floating_ip_address]}
$KUBE_NODE_IP: {get_attr: [kube_minion_eth0, fixed_ips, 0, ip_address]}
$ETCD_SERVER_IP: {get_param: etcd_server_ip}
$DOCKER_VOLUME: {get_resource: docker_volume}
$DOCKER_VOLUME_SIZE: {get_param: docker_volume_size}
$DOCKER_STORAGE_DRIVER: {get_param: docker_storage_driver}
$CGROUP_DRIVER: {get_param: cgroup_driver}
$NETWORK_DRIVER: {get_param: network_driver}
$REGISTRY_ENABLED: {get_param: registry_enabled}
$REGISTRY_PORT: {get_param: registry_port}
$SWIFT_REGION: {get_param: swift_region}
$REGISTRY_CONTAINER: {get_param: registry_container}
$REGISTRY_INSECURE: {get_param: registry_insecure}
$REGISTRY_CHUNKSIZE: {get_param: registry_chunksize}
$TLS_DISABLED: {get_param: tls_disabled}
$VERIFY_CA: {get_param: verify_ca}
$CLUSTER_UUID: {get_param: cluster_uuid}
$MAGNUM_URL: {get_param: magnum_url}
$USERNAME: {get_param: username}
$PASSWORD: {get_param: password}
$VOLUME_DRIVER: {get_param: volume_driver}
$REGION_NAME: {get_param: region_name}
$HTTP_PROXY: {get_param: http_proxy}
$HTTPS_PROXY: {get_param: https_proxy}
$NO_PROXY: {get_param: no_proxy}
$HYPERKUBE_PREFIX: {get_param: hyperkube_prefix}
$KUBE_TAG: {get_param: kube_tag}
$FLANNEL_NETWORK_CIDR: {get_param: flannel_network_cidr}
$PODS_NETWORK_CIDR: {get_param: pods_network_cidr}
$KUBE_VERSION: {get_param: kube_version}
$TRUSTEE_USER_ID: {get_param: trustee_user_id}
$TRUSTEE_USERNAME: {get_param: trustee_username}
$TRUSTEE_PASSWORD: {get_param: trustee_password}
$TRUSTEE_DOMAIN_ID: {get_param: trustee_domain_id}
$TRUST_ID: {get_param: trust_id}
$AUTH_URL: {get_param: auth_url}
$CLOUD_PROVIDER_ENABLED: {get_param: cloud_provider_enabled}
$INSECURE_REGISTRY_URL: {get_param: insecure_registry_url}
$CONTAINER_INFRA_PREFIX: {get_param: container_infra_prefix}
$DNS_SERVICE_IP: {get_param: dns_service_ip}
$DNS_CLUSTER_DOMAIN: {get_param: dns_cluster_domain}
$KUBELET_OPTIONS: {get_param: kubelet_options}
$KUBEPROXY_OPTIONS: {get_param: kubeproxy_options}
$OCTAVIA_ENABLED: {get_param: octavia_enabled}
$HEAT_CONTAINER_AGENT_TAG: {get_param: heat_container_agent_tag}
$AUTO_HEALING_ENABLED: {get_param: auto_healing_enabled}
$AUTO_HEALING_CONTROLLER: {get_param: auto_healing_controller}
$NPD_ENABLED: {get_param: npd_enabled}
$NODEGROUP_ROLE: {get_param: nodegroup_role}
$NODEGROUP_NAME: {get_param: nodegroup_name}
$USE_PODMAN: {get_param: use_podman}
$CONTAINER_RUNTIME: {get_param: container_runtime}
$CONTAINERD_VERSION: {get_param: containerd_version}
$CONTAINERD_TARBALL_URL: {get_param: containerd_tarball_url}
$CONTAINERD_TARBALL_SHA256: {get_param: containerd_tarball_sha256}
- get_file: ../../common/templates/kubernetes/fragments/install-cri.sh
- get_file: ../../common/templates/kubernetes/fragments/install-clients.sh
- get_file: ../../common/templates/kubernetes/fragments/write-kube-os-config.sh
- get_file: ../../common/templates/kubernetes/fragments/make-cert-client.sh
- get_file: ../../common/templates/fragments/configure-docker-registry.sh
- get_file: ../../common/templates/kubernetes/fragments/configure-kubernetes-minion.sh
- get_file: ../../common/templates/kubernetes/fragments/add-proxy.sh
- str_replace:
template: {get_file: ../../common/templates/fragments/configure-docker-storage.sh}
params:
$configure_docker_storage_driver: {get_file: ../../common/templates/fragments/configure_docker_storage_driver_atomic.sh}
- get_file: ../../common/templates/kubernetes/fragments/enable-services-minion.sh
- get_file: ../../common/templates/fragments/enable-docker-registry.sh
node_config_deployment:
type: OS::Heat::SoftwareDeployment
properties:
signal_transport: HEAT_SIGNAL
config: {get_resource: node_config}
server: {if: ["volume_based", {get_resource: kube-minion-bfv}, {get_resource: kube-minion}]}
actions: ['CREATE']
######################################################################
#
# a single kubernetes minion.
#
kube_node_volume:
type: OS::Cinder::Volume
condition: volume_based
properties:
image: {get_param: server_image}
size: {get_param: boot_volume_size}
volume_type: {get_param: boot_volume_type}
availability_zone: {get_param: availability_zone}
# do NOT use "_" (underscore) in the Nova server name
# it creates a mismatch between the generated Nova name and its hostname
# which can lead to weird problems
kube-minion:
condition: image_based
type: OS::Nova::Server
properties:
name: {get_param: name}
flavor: {get_param: minion_flavor}
image: {get_param: server_image}
key_name: {get_param: ssh_key_name}
user_data: {get_resource: agent_config}
user_data_format: SOFTWARE_CONFIG
software_config_transport: POLL_SERVER_HEAT
networks:
- port: {get_resource: kube_minion_eth0}
scheduler_hints: { group: { get_param: nodes_server_group_id }}
availability_zone: {get_param: availability_zone}
kube-minion-bfv:
condition: volume_based
type: OS::Nova::Server
properties:
name: {get_param: name}
flavor: {get_param: minion_flavor}
key_name: {get_param: ssh_key_name}
user_data: {get_resource: agent_config}
user_data_format: SOFTWARE_CONFIG
software_config_transport: POLL_SERVER_HEAT
networks:
- port: {get_resource: kube_minion_eth0}
scheduler_hints: { group: { get_param: nodes_server_group_id }}
availability_zone: {get_param: availability_zone}
block_device_mapping_v2:
- boot_index: 0
volume_id: {get_resource: kube_node_volume}
kube_minion_eth0:
type: OS::Neutron::Port
properties:
network: {get_param: fixed_network}
security_groups:
- get_param: secgroup_kube_minion_id
fixed_ips:
- subnet: {get_param: fixed_subnet}
allowed_address_pairs:
- ip_address: {get_param: pods_network_cidr}
replacement_policy: AUTO
kube_minion_floating:
type: Magnum::Optional::KubeMinion::Neutron::FloatingIP
properties:
floating_network: {get_param: external_network}
port_id: {get_resource: kube_minion_eth0}
depends_on: kube-minion
######################################################################
#
# docker storage. This allocates a cinder volume and attaches it
# to the minion.
#
docker_volume:
type: Magnum::Optional::Cinder::Volume
properties:
size: {get_param: docker_volume_size}
volume_type: {get_param: docker_volume_type}
availability_zone: {get_param: availability_zone}
docker_volume_attach:
type: Magnum::Optional::Cinder::VolumeAttachment
properties:
instance_uuid: {if: ["volume_based", {get_resource: kube-minion-bfv}, {get_resource: kube-minion}]}
volume_id: {get_resource: docker_volume}
mountpoint: /dev/vdb
upgrade_kubernetes:
type: OS::Heat::SoftwareConfig
properties:
group: script
inputs:
- name: kube_tag_input
- name: ostree_remote_input
- name: ostree_commit_input
config:
list_join:
- "\n"
-
- "#!/bin/bash"
- get_file: ../../common/templates/kubernetes/fragments/upgrade-kubernetes.sh
upgrade_kubernetes_deployment:
type: OS::Heat::SoftwareDeployment
properties:
signal_transport: HEAT_SIGNAL
config: {get_resource: upgrade_kubernetes}
server: {if: ["volume_based", {get_resource: kube-minion-bfv}, {get_resource: kube-minion}]}
actions: ['UPDATE']
input_values:
kube_tag_input: {get_param: kube_tag}
ostree_remote_input: {get_param: ostree_remote}
ostree_commit_input: {get_param: ostree_commit}
outputs:
kube_minion_ip:
value: {get_attr: [kube_minion_eth0, fixed_ips, 0, ip_address]}
description: >
This is the "public" IP address of the Kubernetes minion node.
kube_minion_external_ip:
value: {get_attr: [kube_minion_floating, floating_ip_address]}
description: >
This is the "public" IP address of the Kubernetes minion node.
######################################################################
#
# NOTE(flwang): Returning the minion node server ID here so that
# consumer can send API request to Heat to remove a particular
# node with removal_policies. Otherwise, the consumer (e.g. AutoScaler)
# has to use index to do the remove which is confusing out of the
# OpenStack world.
# https://storyboard.openstack.org/#!/story/2005054
#
######################################################################
OS::stack_id:
value: {if: ["volume_based", {get_resource: kube-minion-bfv}, {get_resource: kube-minion}]}
description: >
This is the Nova server id of the node.

View File

@ -1,17 +0,0 @@
# Copyright 2016 - Rackspace Hosting
#
# 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.
version = '1.0.0'
driver = 'k8s_fedora_atomic_v1'
container_version = '1.12.6'

View File

@ -13,5 +13,5 @@
# limitations under the License.
version = '1.0.0'
driver = 'k8s_fedora_atomic_v1'
driver = 'k8s_fedora_coreos_v1'
container_version = '1.12.6'

View File

@ -98,8 +98,6 @@ if [[ "$COE" == "kubernetes" ]]; then
remote_exec $SSH_USER "sudo cat /etc/systemd/system/flannel-config.service" flannel-config.service
remote_exec $SSH_USER "sudo journalctl -u heat-container-agent --no-pager" heat-container-agent.log
remote_exec $SSH_USER "sudo journalctl -u kube-enable-monitoring --no-pager" kube-enable-monitoring.service.log
remote_exec $SSH_USER "sudo atomic containers list" atomic-containers-list.log
remote_exec $SSH_USER "sudo atomic images list" atomic-images-list.log
else
echo "ERROR: Unknown COE '${COE}'"
EXIT_CODE=1

View File

@ -641,7 +641,7 @@ class TestPost(api_base.FunctionalTest):
test_time = datetime.datetime(2000, 1, 1, 0, 0)
mock_utcnow.return_value = test_time
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(201, response.status_int)
@ -663,7 +663,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
self.post_json('/clustertemplates', bdict)
cc_mock.assert_called_once_with(mock.ANY)
@ -679,7 +679,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(image_id='my-image')
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(bdict['image_id'], response.json['image_id'])
@ -695,7 +695,7 @@ class TestPost(api_base.FunctionalTest):
mock.patch('magnum.api.attr_validator.validate_image')\
as mock_image_data:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(**kwargs)
self.assertRaises(AppError, self.post_json, '/clustertemplates',
bdict)
@ -753,7 +753,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(
labels={'key1': 'val1', 'key2': 'val2'})
response = self.post_json('/clustertemplates', bdict)
@ -769,7 +769,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(docker_volume_size=99)
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(bdict['docker_volume_size'],
@ -783,7 +783,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(
docker_volume_size=1, docker_storage_driver="overlay")
note = 'deprecated in favor of overlay2'
@ -803,7 +803,7 @@ class TestPost(api_base.FunctionalTest):
expect_default_driver,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
for k, v in cluster_template_config_dict.items():
cfg.CONF.set_override(k, v, 'cluster_template')
with mock.patch.object(
@ -900,7 +900,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(bdict['volume_driver'],
@ -917,7 +917,7 @@ class TestPost(api_base.FunctionalTest):
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_policy.return_value = True
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(public=True)
response = self.post_json('/clustertemplates', bdict)
self.assertTrue(response.json['public'])
@ -937,7 +937,7 @@ class TestPost(api_base.FunctionalTest):
# make policy enforcement fail
mock_policy.return_value = False
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(public=True)
self.assertRaises(AppError, self.post_json, '/clustertemplates',
bdict)
@ -950,7 +950,7 @@ class TestPost(api_base.FunctionalTest):
self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(public=False)
response = self.post_json('/clustertemplates', bdict)
self.assertFalse(response.json['public'])
@ -969,7 +969,7 @@ class TestPost(api_base.FunctionalTest):
wraps=self.dbapi.create_cluster_template) as cc_mock:
mock_policy.return_value = True
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(hidden=True)
response = self.post_json('/clustertemplates', bdict)
self.assertTrue(response.json['hidden'])
@ -989,7 +989,7 @@ class TestPost(api_base.FunctionalTest):
# make policy enforcement fail
mock_policy.return_value = False
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data(hidden=True)
self.assertRaises(AppError, self.post_json, '/clustertemplates',
bdict)
@ -1008,7 +1008,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_with_os_distro_image(self,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
del bdict['uuid']
response = self.post_json('/clustertemplates', bdict,
@ -1019,7 +1019,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_with_image_name(self,
mock_image_data):
mock_image = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
mock_image_data.return_value = mock_image
bdict = apiutils.cluster_template_post_data()
del bdict['uuid']
@ -1058,7 +1058,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_without_keypair_id(self,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
del bdict['keypair_id']
response = self.post_json('/clustertemplates', bdict)
@ -1068,7 +1068,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_with_dns(self,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(201, response.status_int)
@ -1080,7 +1080,7 @@ class TestPost(api_base.FunctionalTest):
mock_image_data):
self.mock_valid_os_res.side_effect = exception.KeyPairNotFound("Test")
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict,
expect_errors=True)
@ -1090,7 +1090,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_with_flavor(self,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(201, response.status_int)
@ -1104,7 +1104,7 @@ class TestPost(api_base.FunctionalTest):
mock_image_data):
self.mock_valid_os_res.side_effect = exception.FlavorNotFound("flavor")
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict,
expect_errors=True)
@ -1114,7 +1114,7 @@ class TestPost(api_base.FunctionalTest):
def test_create_cluster_template_with_external_network(self,
mock_image_data):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(201, response.status_int)
@ -1127,7 +1127,7 @@ class TestPost(api_base.FunctionalTest):
self.mock_valid_os_res.side_effect = exception.ExternalNetworkNotFound(
"test")
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
response = self.post_json('/clustertemplates', bdict,
expect_errors=True)
@ -1138,7 +1138,7 @@ class TestPost(api_base.FunctionalTest):
with mock.patch.object(self.dbapi, 'create_cluster_template',
wraps=self.dbapi.create_cluster_template):
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
bdict = apiutils.cluster_template_post_data()
bdict.pop('name')
resp = self.post_json('/clustertemplates', bdict)
@ -1162,7 +1162,7 @@ class TestPost(api_base.FunctionalTest):
test_time = datetime.datetime(2000, 1, 1, 0, 0)
mock_utcnow.return_value = test_time
mock_image_data.return_value = {'name': 'mock_name',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
response = self.post_json('/clustertemplates', bdict)
self.assertEqual(201, response.status_int)
@ -1180,7 +1180,7 @@ class TestPost(api_base.FunctionalTest):
@mock.patch('magnum.api.attr_validator.validate_image')
def test_create_cluster_template_with_driver_name(self, mock_image_data):
mock_image = {'name': 'mock_name',
'os_distro': 'fedora-atomic',
'os_distro': 'fedora-coreos',
'magnum_driver': 'mock_driver'}
mock_image_data.return_value = mock_image
bdict = apiutils.cluster_template_post_data()

View File

@ -205,12 +205,12 @@ class TestAttrValidator(base.BaseTestCase):
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_with_valid_image_by_name(self, mock_os_res):
mock_image = {'name': 'fedora-21-atomic-5',
mock_image = {'name': 'fedora-21-coreos-5',
'id': 'e33f0988-1730-405e-8401-30cbc8535302',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
mock_os_res.return_value = mock_image
mock_os_cli = mock.MagicMock()
attr_validator.validate_image(mock_os_cli, 'fedora-21-atomic-5')
attr_validator.validate_image(mock_os_cli, 'fedora-21-coreos-5')
self.assertTrue(mock_os_res.called)
@mock.patch('magnum.api.utils.get_openstack_resource')
@ -222,13 +222,13 @@ class TestAttrValidator(base.BaseTestCase):
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.ImageNotAuthorized,
attr_validator.validate_image, mock_os_cli,
'fedora-21-atomic-5')
'fedora-21-coreos-5')
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_with_valid_image_by_id(self, mock_os_res):
mock_image = {'name': 'fedora-21-atomic-5',
mock_image = {'name': 'fedora-21-coreos-5',
'id': 'e33f0988-1730-405e-8401-30cbc8535302',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
mock_os_res.return_value = mock_image
mock_os_cli = mock.MagicMock()
attr_validator.validate_image(mock_os_cli,
@ -241,7 +241,7 @@ class TestAttrValidator(base.BaseTestCase):
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.ImageNotFound,
attr_validator.validate_image,
mock_os_cli, 'fedora-21-atomic-5')
mock_os_cli, 'fedora-21-coreos-5')
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_with_nonexist_image_by_id(self, mock_os_res):
@ -249,7 +249,7 @@ class TestAttrValidator(base.BaseTestCase):
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.ImageNotFound,
attr_validator.validate_image,
mock_os_cli, 'fedora-21-atomic-5')
mock_os_cli, 'fedora-21-coreos-5')
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_with_multi_images_same_name(self, mock_os_res):
@ -257,28 +257,28 @@ class TestAttrValidator(base.BaseTestCase):
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.Conflict,
attr_validator.validate_image,
mock_os_cli, 'fedora-21-atomic-5')
mock_os_cli, 'fedora-21-coreos-5')
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_without_os_distro(self, mock_os_res):
mock_image = {'name': 'fedora-21-atomic-5',
mock_image = {'name': 'fedora-21-coreos-5',
'id': 'e33f0988-1730-405e-8401-30cbc8535302'}
mock_os_res.return_value = mock_image
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.OSDistroFieldNotFound,
attr_validator.validate_image,
mock_os_cli, 'fedora-21-atomic-5')
mock_os_cli, 'fedora-21-coreos-5')
@mock.patch('magnum.api.utils.get_openstack_resource')
def test_validate_image_when_user_forbidden(self, mock_os_res):
mock_image = {'name': 'fedora-21-atomic-5',
mock_image = {'name': 'fedora-21-coreos-5',
'id': 'e33f0988-1730-405e-8401-30cbc8535302',
'os_distro': ''}
mock_os_res.return_value = mock_image
mock_os_cli = mock.MagicMock()
self.assertRaises(exception.OSDistroFieldNotFound,
attr_validator.validate_image,
mock_os_cli, 'fedora-21-atomic-5')
mock_os_cli, 'fedora-21-coreos-5')
@mock.patch('magnum.common.clients.OpenStackClients')
def test_validate_os_resources_with_invalid_flavor(self,
@ -355,9 +355,9 @@ class TestAttrValidator(base.BaseTestCase):
}
mock_keypair = mock.MagicMock()
mock_keypair.id = 'test-keypair'
mock_image = {'name': 'fedora-21-atomic-5',
mock_image = {'name': 'fedora-21-coreos-5',
'id': 'e33f0988-1730-405e-8401-30cbc8535302',
'os_distro': 'fedora-atomic'}
'os_distro': 'fedora-coreos'}
mock_nova = mock.MagicMock()
mock_nova.keypairs.get.return_value = mock_keypair
mock_nova.images.get.return_value = mock_image

View File

@ -60,7 +60,7 @@ class TestValidation(base.BaseTestCase):
self, mock_cluster_template_get, mock_cluster_get_by_uuid,
mock_pecan_request):
cluster_type = ('vm', 'fedora-atomic', 'kubernetes')
cluster_type = ('vm', 'fedora-coreos', 'kubernetes')
self._test_enforce_cluster_type_supported(
mock_cluster_template_get, mock_cluster_get_by_uuid,
mock_pecan_request, cluster_type)

View File

@ -24,7 +24,7 @@ from pycadf import cadftaxonomy as taxonomy
from magnum.common import exception
from magnum.conductor.handlers import cluster_conductor
import magnum.conf
from magnum.drivers.k8s_fedora_atomic_v1 import driver as k8s_atomic_dr
from magnum.drivers.k8s_fedora_coreos_v1 import driver as k8s_fcos_dr
from magnum import objects
from magnum.objects.fields import ClusterHealthStatus
from magnum.objects.fields import ClusterStatus as cluster_status
@ -410,7 +410,7 @@ class TestHandler(db_base.DbTestCase):
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.conductor.handlers.cluster_conductor.trust_manager')
@patch('magnum.conductor.handlers.cluster_conductor.cert_manager')
@patch('magnum.drivers.k8s_fedora_atomic_v1.driver.Driver.'
@patch('magnum.drivers.k8s_fedora_coreos_v1.driver.Driver.'
'_extract_template_definition')
@patch('magnum.drivers.common.driver.Driver.get_driver')
@patch('magnum.common.clients.OpenStackClients')
@ -429,7 +429,7 @@ class TestHandler(db_base.DbTestCase):
mock_poller = mock.MagicMock()
mock_poller.poll_and_check.return_value = loopingcall.LoopingCallDone()
mock_heat_poller_class.return_value = mock_poller
mock_driver.return_value = k8s_atomic_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
mock_short_id.return_value = 'short_id'
mock_extract_tmpl_def.return_value = (
@ -508,7 +508,7 @@ class TestHandler(db_base.DbTestCase):
def test_cluster_delete(self, mock_octavia, mock_driver,
mock_openstack_client_class, cert_manager):
mock_octavia.return_value = False
mock_driver.return_value = k8s_atomic_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
osc = mock.MagicMock()
mock_openstack_client_class.return_value = osc
osc.heat.side_effect = exc.HTTPNotFound
@ -544,7 +544,7 @@ class TestHandler(db_base.DbTestCase):
mock_openstack_client_class,
cert_manager):
mock_octavia.return_value = False
mock_driver.return_value = k8s_atomic_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
osc = mock.MagicMock()
mock_openstack_client_class.return_value = osc
osc.heat.side_effect = exc.HTTPConflict
@ -575,7 +575,7 @@ class TestHandler(db_base.DbTestCase):
def test_cluster_delete_with_lb(self, mock_delete_lb, mock_octavia,
mock_clients, mock_driver):
mock_octavia.return_value = True
mock_driver.return_value = k8s_atomic_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
self.master.create()
self.worker.create()

View File

@ -16,7 +16,6 @@ from unittest import mock
from unittest.mock import patch
import magnum.conf
from magnum.drivers.k8s_fedora_atomic_v1 import driver as k8s_dr
from magnum.drivers.k8s_fedora_coreos_v1 import driver as k8s_fcos_dr
from magnum import objects
from magnum.tests import base
@ -49,7 +48,7 @@ class TestClusterConductorWithK8s(base.TestCase):
'volume_driver': 'volume_driver',
'docker_volume_size': 20,
'docker_storage_driver': 'devicemapper',
'cluster_distro': 'fedora-atomic',
'cluster_distro': 'fedora-coreos',
'coe': 'kubernetes',
'token': None,
'http_proxy': 'http_proxy',
@ -245,7 +244,7 @@ class TestClusterConductorWithK8s(base.TestCase):
worker_ng = objects.NodeGroup(self.context, **self.worker_ng_dict)
master_ng = objects.NodeGroup(self.context, **self.master_ng_dict)
mock_objects_nodegroup_list.return_value = [master_ng, worker_ng]
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
mock_get_subnet.return_value = self.fixed_subnet_cidr
@ -440,7 +439,7 @@ class TestClusterConductorWithK8s(base.TestCase):
worker_ng = objects.NodeGroup(self.context, **self.worker_ng_dict)
master_ng = objects.NodeGroup(self.context, **self.master_ng_dict)
mock_objects_nodegroup_list.return_value = [master_ng, worker_ng]
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
mock_get_subnet.return_value = self.fixed_subnet_cidr
CONF.set_override('swift_region',
@ -593,7 +592,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_resp = mock.MagicMock()
mock_resp.text = expected_result
mock_get.return_value = mock_resp
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
cluster = objects.Cluster(self.context, **self.cluster_dict)
del self.worker_ng_dict['image_id']
worker_ng = objects.NodeGroup(self.context, **self.worker_ng_dict)
@ -976,7 +975,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_objects_cluster_template_get_by_uuid,
mock_get,
mock_get_subnet):
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
self._test_extract_template_definition(
mock_generate_csr_and_key,
mock_sign_node_certificate,
@ -1004,7 +1003,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_objects_cluster_template_get_by_uuid,
mock_get,
mock_get_subnet):
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
self._test_extract_template_definition(
mock_generate_csr_and_key,
mock_sign_node_certificate,
@ -1032,7 +1031,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_objects_cluster_template_get_by_uuid,
mock_get,
mock_get_subnet):
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
self._test_extract_template_definition(
mock_generate_csr_and_key,
mock_sign_node_certificate,
@ -1060,7 +1059,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_objects_cluster_template_get_by_uuid,
mock_get,
mock_get_subnet):
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
self._test_extract_template_definition(
mock_generate_csr_and_key,
mock_sign_node_certificate,
@ -1102,7 +1101,7 @@ class TestClusterConductorWithK8s(base.TestCase):
worker_ng = objects.NodeGroup(self.context, **self.worker_ng_dict)
master_ng = objects.NodeGroup(self.context, **self.master_ng_dict)
mock_objects_nodegroup_list.return_value = [master_ng, worker_ng]
mock_driver.return_value = k8s_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
CONF.set_override('etcd_discovery_service_endpoint_format',
'http://etcd/test?size=%(size)d',
@ -1214,7 +1213,7 @@ class TestClusterConductorWithK8s(base.TestCase):
@patch('magnum.common.short_id.generate_id')
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.drivers.k8s_fedora_atomic_v1.driver.Driver.'
@patch('magnum.drivers.k8s_fedora_coreos_v1.driver.Driver.'
'_extract_template_definition')
@patch('magnum.common.clients.OpenStackClients')
def test_create_stack(self,
@ -1239,8 +1238,8 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_cluster = mock.MagicMock()
mock_cluster.name = dummy_cluster_name
k8s_dr.Driver().create_cluster(self.context, mock_cluster,
expected_timeout)
k8s_fcos_dr.Driver().create_cluster(self.context, mock_cluster,
expected_timeout)
expected_args = {
'stack_name': expected_stack_name,
@ -1254,7 +1253,7 @@ class TestClusterConductorWithK8s(base.TestCase):
@patch('magnum.common.short_id.generate_id')
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.drivers.k8s_fedora_atomic_v1.driver.Driver.'
@patch('magnum.drivers.k8s_fedora_coreos_v1.driver.Driver.'
'_extract_template_definition')
@patch('magnum.common.clients.OpenStackClients')
def test_create_stack_no_timeout_specified(
@ -1280,7 +1279,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_cluster = mock.MagicMock()
mock_cluster.name = dummy_cluster_name
k8s_dr.Driver().create_cluster(self.context, mock_cluster, None)
k8s_fcos_dr.Driver().create_cluster(self.context, mock_cluster, None)
expected_args = {
'stack_name': expected_stack_name,
@ -1294,7 +1293,7 @@ class TestClusterConductorWithK8s(base.TestCase):
@patch('magnum.common.short_id.generate_id')
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.drivers.k8s_fedora_atomic_v1.driver.Driver.'
@patch('magnum.drivers.k8s_fedora_coreos_v1.driver.Driver.'
'_extract_template_definition')
@patch('magnum.common.clients.OpenStackClients')
def test_create_stack_timeout_is_zero(
@ -1321,8 +1320,8 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_cluster = mock.MagicMock()
mock_cluster.name = dummy_cluster_name
k8s_dr.Driver().create_cluster(self.context, mock_cluster,
cluster_timeout)
k8s_fcos_dr.Driver().create_cluster(self.context, mock_cluster,
cluster_timeout)
expected_args = {
'stack_name': expected_stack_name,
@ -1335,7 +1334,7 @@ class TestClusterConductorWithK8s(base.TestCase):
mock_heat_client.stacks.create.assert_called_once_with(**expected_args)
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.drivers.k8s_fedora_atomic_v1.driver.Driver.'
@patch('magnum.drivers.k8s_fedora_coreos_v1.driver.Driver.'
'_extract_template_definition')
@patch('magnum.common.clients.OpenStackClients')
@patch('magnum.objects.ClusterTemplate.get_by_uuid')
@ -1364,7 +1363,7 @@ class TestClusterConductorWithK8s(base.TestCase):
master_ng = objects.NodeGroup(self.context, **self.master_ng_dict)
mock_objects_nodegroup_list.return_value = [master_ng, worker_ng]
k8s_dr.Driver().update_cluster({}, mock_cluster)
k8s_fcos_dr.Driver().update_cluster({}, mock_cluster)
expected_args = {
'parameters': {'number_of_minions': 2},

View File

@ -41,7 +41,7 @@ def get_test_cluster_template(**kw):
'docker_volume_size': kw.get('docker_volume_size', 20),
'docker_storage_driver': kw.get('docker_storage_driver',
'devicemapper'),
'cluster_distro': kw.get('cluster_distro', 'fedora-atomic'),
'cluster_distro': kw.get('cluster_distro', 'fedora-coreos'),
'coe': kw.get('coe', 'kubernetes'),
'created_at': kw.get('created_at'),
'updated_at': kw.get('updated_at'),

View File

@ -18,7 +18,7 @@ from oslo_utils import uuidutils
import magnum.conf
from magnum.drivers.heat import driver as heat_driver
from magnum.drivers.k8s_fedora_atomic_v1 import driver as k8s_atomic_dr
from magnum.drivers.k8s_fedora_coreos_v1 import driver as k8s_fcos_dr
from magnum import objects
from magnum.objects.fields import ClusterStatus as cluster_status
from magnum.tests import base
@ -128,10 +128,10 @@ class TestHeatPoller(base.TestCase):
cluster_template = objects.ClusterTemplate(self.context,
**cluster_template_dict)
mock_retrieve_cluster_template.return_value = cluster_template
mock_driver.return_value = k8s_atomic_dr.Driver()
mock_driver.return_value = k8s_fcos_dr.Driver()
poller = heat_driver.HeatPoller(mock_openstack_client,
mock.MagicMock(), cluster,
k8s_atomic_dr.Driver())
k8s_fcos_dr.Driver())
poller.get_version_info = mock.MagicMock()
return (cluster, poller)

View File

@ -1,88 +0,0 @@
# Copyright (c) 2018 European Organization for Nuclear Research.
# All 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.
from unittest.mock import patch
from magnum.common import exception
from magnum.drivers.k8s_fedora_atomic_v1 import driver
from magnum.tests.unit.db import base
from magnum.tests.unit.objects import utils as obj_utils
class K8sFedoraAtomicV1DriverTest(base.DbTestCase):
def setUp(self):
super(K8sFedoraAtomicV1DriverTest, self).setUp()
self.driver = driver.Driver()
self.cluster_template = obj_utils.create_test_cluster_template(
self.context, uuid='94889aa4-e686-11e9-81b4-2a2ae2dbcce4',
name='test_2', id=2, labels={'kube_tag': 'v1.14.7'},
image_id='test-image2')
self.cluster_obj = obj_utils.create_test_cluster(
self.context, name='cluster_example_A', image_id='test-image1')
self.cluster_obj.refresh()
self.nodegroup_obj = obj_utils.create_test_nodegroup(
self.context, name='test_ng', cluster_id=self.cluster_obj.uuid,
uuid='27e3153e-d5bf-4b7e-b517-fb518e17f34c',
project_id=self.cluster_obj.project_id, is_default=False,
image_id='test-image1')
self.nodegroup_obj.refresh()
@patch('magnum.common.keystone.KeystoneClientV3')
@patch('magnum.common.clients.OpenStackClients')
def test_upgrade_not_supported(self, mock_osc, mock_keystone):
self.assertRaises(exception.NotSupported,
self.driver.upgrade_cluster, self.context,
self.cluster_obj, self.cluster_template, 1,
self.nodegroup_obj)
@patch('magnum.common.keystone.KeystoneClientV3')
@patch('magnum.common.clients.OpenStackClients')
def test_downgrade_not_supported(self, mock_osc, mock_keystone):
# Scenario, a user creates a nodegroup with kube_tag
# greater that the one set in cluster's template. Check
# that downgrading is not supported.
self.nodegroup_obj.labels = {'kube_tag': 'v1.14.7'}
self.nodegroup_obj.save()
self.cluster_template.labels = {'kube_tag': 'v1.14.3'}
self.cluster_template.save()
self.assertRaises(exception.NotSupported,
self.driver.upgrade_cluster, self.context,
self.cluster_obj, self.cluster_template, 1,
self.nodegroup_obj)
@patch('magnum.common.keystone.KeystoneClientV3')
@patch('magnum.common.clients.OpenStackClients')
def test_upgrade_invalid_ct(self, mock_osc, mock_keystone):
# Scenario, a user creates a nodegroup with kube_tag
# greater that the one set in cluster's template. Check
# that downgrading is not supported.
self.cluster_template.labels = {}
self.cluster_template.save()
self.assertRaises(exception.NotSupported,
self.driver.upgrade_cluster, self.context,
self.cluster_obj, self.cluster_template, 1,
self.nodegroup_obj)
@patch('magnum.common.keystone.KeystoneClientV3')
@patch('magnum.common.clients.OpenStackClients')
def test_ca_rotate_not_supported(self, mock_osc, mock_keystone):
self.cluster_template.cluster_distro = 'fedora-atomic'
self.cluster_template.save()
mock_keystone.is_octavia_enabled.return_value = False
self.assertRaises(exception.NotSupported,
self.driver.rotate_ca_certificate,
self.context,
self.cluster_obj)

View File

@ -19,8 +19,6 @@ from magnum.common import exception
import magnum.conf
from magnum.drivers.common import driver
from magnum.drivers.heat import template_def as cmn_tdef
from magnum.drivers.k8s_fedora_atomic_v1 import driver as k8sa_dr
from magnum.drivers.k8s_fedora_atomic_v1 import template_def as k8sa_tdef
from magnum.drivers.k8s_fedora_coreos_v1 import driver as k8s_fcos_dr
from magnum.drivers.k8s_fedora_coreos_v1 import template_def as k8s_fcos_tdef
from magnum.tests import base
@ -46,17 +44,6 @@ class TemplateDefinitionTestCase(base.TestCase):
self.assertEqual(expected_entry_point, actual_entry_point)
expected_entry_point.load.assert_called_once()
@mock.patch('magnum.drivers.common.driver.Driver.get_driver')
def test_get_vm_atomic_kubernetes_definition(self, mock_driver):
mock_driver.return_value = k8sa_dr.Driver()
cluster_driver = driver.Driver.get_driver('vm',
'fedora-atomic',
'kubernetes')
definition = cluster_driver.get_template_definition()
self.assertIsInstance(definition,
k8sa_tdef.AtomicK8sTemplateDefinition)
@mock.patch('magnum.drivers.common.driver.Driver.get_driver')
def test_get_vm_fcos_kubernetes_definition(self, mock_driver):
mock_driver.return_value = k8s_fcos_dr.Driver()
@ -119,7 +106,7 @@ class TemplateDefinitionTestCase(base.TestCase):
self.assertIsNone(value)
def test_add_output_with_mapping_type(self):
definition = k8sa_dr.Driver().get_template_definition()
definition = k8s_fcos_dr.Driver().get_template_definition()
mock_args = [1, 3, 4]
mock_kwargs = {'cluster_attr': 'test'}
@ -307,10 +294,10 @@ class BaseK8sTemplateDefinitionTestCase(base.TestCase, metaclass=abc.ABCMeta):
self.assertEqual(expected_address, actual)
class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
class FCOSK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
def get_definition(self):
return k8sa_dr.Driver().get_template_definition()
return k8s_fcos_dr.Driver().get_template_definition()
@mock.patch('magnum.common.clients.OpenStackClients')
@mock.patch('magnum.drivers.heat.template_def.TemplateDefinition'
@ -325,7 +312,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_scale_manager = mock.MagicMock()
mock_scale_manager.get_removal_nodes.return_value = removal_nodes
definition = k8sa_tdef.AtomicK8sTemplateDefinition()
definition = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
scale_params = definition.get_scale_params(mock_context, mock_cluster,
node_count,
@ -342,8 +329,8 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
@mock.patch('magnum.common.neutron.get_fixed_network_name')
@mock.patch('magnum.common.keystone.is_octavia_enabled')
@mock.patch('magnum.common.clients.OpenStackClients')
@mock.patch('magnum.drivers.k8s_fedora_atomic_v1.template_def'
'.AtomicK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.k8s_fedora_coreos_v1.template_def'
'.FCOSK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.heat.template_def.BaseTemplateDefinition'
'.get_params')
@mock.patch('magnum.drivers.heat.template_def.TemplateDefinition'
@ -575,7 +562,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
octavia_lb_healthcheck = mock_cluster.labels.get(
'octavia_lb_healthcheck')
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.get_params(mock_context, mock_cluster_template, mock_cluster)
@ -709,7 +696,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_cluster_template.volume_driver = 'cinder'
mock_cluster.labels = {'cloud_provider_enabled': 'false'}
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(
exception.InvalidParameterValue,
k8s_def.get_params,
@ -731,8 +718,8 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
@mock.patch('magnum.common.neutron.get_external_network_id')
@mock.patch('magnum.common.keystone.is_octavia_enabled')
@mock.patch('magnum.common.clients.OpenStackClients')
@mock.patch('magnum.drivers.k8s_fedora_atomic_v1.template_def'
'.AtomicK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.k8s_fedora_coreos_v1.template_def'
'.FCOSK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.heat.template_def.BaseTemplateDefinition'
'.get_params')
@mock.patch('magnum.drivers.heat.template_def.TemplateDefinition'
@ -777,7 +764,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_osc.cinder_region_name.return_value = 'RegionOne'
mock_osc_class.return_value = mock_osc
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.get_params(mock_context, mock_cluster_template, mock_cluster)
actual_params = mock_get_params.call_args[1]["extra_params"]
@ -793,8 +780,8 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
@mock.patch('magnum.common.neutron.get_subnet')
@mock.patch('magnum.common.keystone.is_octavia_enabled')
@mock.patch('magnum.common.clients.OpenStackClients')
@mock.patch('magnum.drivers.k8s_fedora_atomic_v1.template_def'
'.AtomicK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.k8s_fedora_coreos_v1.template_def'
'.FCOSK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.heat.template_def.BaseTemplateDefinition'
'.get_params')
@mock.patch('magnum.drivers.heat.template_def.TemplateDefinition'
@ -837,7 +824,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_osc.cinder_region_name.return_value = 'RegionOne'
mock_osc_class.return_value = mock_osc
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(
exception.InvalidParameterValue,
@ -850,8 +837,8 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
@mock.patch('magnum.common.neutron.get_subnet')
@mock.patch('magnum.common.keystone.is_octavia_enabled')
@mock.patch('magnum.common.clients.OpenStackClients')
@mock.patch('magnum.drivers.k8s_fedora_atomic_v1.template_def'
'.AtomicK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.k8s_fedora_coreos_v1.template_def'
'.FCOSK8sTemplateDefinition.get_discovery_url')
@mock.patch('magnum.drivers.heat.template_def.BaseTemplateDefinition'
'.get_params')
@mock.patch('magnum.drivers.heat.template_def.TemplateDefinition'
@ -894,7 +881,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_osc.cinder_region_name.return_value = 'RegionOne'
mock_osc_class.return_value = mock_osc
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.get_params(mock_context, mock_cluster_template, mock_cluster)
actual_params = mock_get_params.call_args[1]["extra_params"]
@ -1140,7 +1127,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
octavia_lb_healthcheck = mock_cluster.labels.get(
'octavia_lb_healthcheck')
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.get_params(mock_context, mock_cluster_template, mock_cluster)
@ -1282,14 +1269,14 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_resp.text = expected_result
mock_get.return_value = mock_resp
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.validate_discovery_url('http://etcd/test', 1)
@mock.patch('requests.get')
def test_k8s_validate_discovery_url_fail(self, mock_get):
mock_get.side_effect = req_exceptions.RequestException()
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(exception.GetClusterSizeFailed,
k8s_def.validate_discovery_url,
'http://etcd/test', 1)
@ -1300,7 +1287,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_resp.text = str('{"action":"get"}')
mock_get.return_value = mock_resp
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(exception.InvalidClusterDiscoveryURL,
k8s_def.validate_discovery_url,
'http://etcd/test', 1)
@ -1313,7 +1300,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_resp.text = expected_result
mock_get.return_value = mock_resp
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(exception.InvalidClusterSize,
k8s_def.validate_discovery_url,
'http://etcd/test', 5)
@ -1332,7 +1319,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_cluster.master_count = 10
mock_cluster.discovery_url = None
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
discovery_url = k8s_def.get_discovery_url(mock_cluster)
mock_get.assert_called_once_with('http://etcd/test?size=10',
@ -1350,13 +1337,13 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
mock_cluster.master_count = 10
mock_cluster.discovery_url = None
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self.assertRaises(exception.GetDiscoveryUrlFailed,
k8s_def.get_discovery_url, mock_cluster)
def test_k8s_get_heat_param(self):
k8s_def = k8sa_tdef.AtomicK8sTemplateDefinition()
k8s_def = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
k8s_def.add_nodegroup_params(self.mock_cluster)
heat_param = k8s_def.get_heat_param(nodegroup_attr='node_count',
@ -1378,7 +1365,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
self.assertRaises(
exception.InvalidDiscoveryURL,
k8sa_tdef.AtomicK8sTemplateDefinition().get_discovery_url,
k8s_fcos_tdef.FCOSK8sTemplateDefinition().get_discovery_url,
fake_cluster)
def _test_update_outputs_api_address(self, template_definition,
@ -1412,7 +1399,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
'port': port,
}
template_definition = k8sa_tdef.AtomicK8sTemplateDefinition()
template_definition = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self._test_update_outputs_api_address(template_definition, params)
def test_update_k8s_outputs_if_cluster_template_is_secure(self):
@ -1424,7 +1411,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
'address': address,
'port': port,
}
template_definition = k8sa_tdef.AtomicK8sTemplateDefinition()
template_definition = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self._test_update_outputs_api_address(template_definition, params,
tls=False)
@ -1457,7 +1444,7 @@ class AtomicK8sTemplateDefinitionTestCase(BaseK8sTemplateDefinitionTestCase):
'port': port,
}
template_definition = k8sa_tdef.AtomicK8sTemplateDefinition()
template_definition = k8s_fcos_tdef.FCOSK8sTemplateDefinition()
self._test_update_outputs_none_api_address(template_definition, params)
def test_update_outputs_master_address(self):

View File

@ -0,0 +1,4 @@
---
upgrade:
- |
``k8s_fedora_atomic_v1`` driver has been dropped.

View File

@ -51,7 +51,6 @@ oslo.policy.policies =
magnum = magnum.common.policies:list_rules
magnum.drivers =
k8s_fedora_atomic_v1 = magnum.drivers.k8s_fedora_atomic_v1.driver:Driver
k8s_fedora_coreos_v1 = magnum.drivers.k8s_fedora_coreos_v1.driver:Driver
magnum.database.migration_backend =