Browse Source

Split k8s atomic vm and ironic drivers

The 2 k8s atomic drivers we currently support are added to the
same driver. This breaks ironic support with the stevedore
work I'm currently doing.

With stevedore, we can choose only one driver based on the
server_type, os and coe. We won't be able to pick a driver and
then choose an implementation bases on server_type.

Partially-Implements: blueprint magnum-baremetal-full-support
Co-Authored-By: Spyros Trigazis <strigazi@gmail.com>
Change-Id: Ic1b8103551f48f85baa2ed9ff32d5b70b1fab84e
changes/25/360625/5
Spyros Trigazis 5 years ago
parent
commit
2c635692ae
  1. 96
      magnum/drivers/common/k8s_fedora_template_def.py
  2. 0
      magnum/drivers/common/templates/kubernetes/fragments/add-proxy.sh
  3. 0
      magnum/drivers/common/templates/kubernetes/fragments/configure-etcd.sh
  4. 0
      magnum/drivers/common/templates/kubernetes/fragments/configure-flannel.sh
  5. 0
      magnum/drivers/common/templates/kubernetes/fragments/configure-kubernetes-master.sh
  6. 0
      magnum/drivers/common/templates/kubernetes/fragments/configure-kubernetes-minion.sh
  7. 0
      magnum/drivers/common/templates/kubernetes/fragments/disable-selinux.sh
  8. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-etcd.sh
  9. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-kube-podmaster.sh
  10. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-kube-proxy-master.sh
  11. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-kube-proxy-minion.sh
  12. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-services-master.sh
  13. 0
      magnum/drivers/common/templates/kubernetes/fragments/enable-services-minion.sh
  14. 0
      magnum/drivers/common/templates/kubernetes/fragments/kube-examples.yaml
  15. 0
      magnum/drivers/common/templates/kubernetes/fragments/kube-system-namespace-service.sh
  16. 0
      magnum/drivers/common/templates/kubernetes/fragments/kube-ui-service.sh
  17. 0
      magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh
  18. 0
      magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh
  19. 0
      magnum/drivers/common/templates/kubernetes/fragments/network-config-service.sh
  20. 0
      magnum/drivers/common/templates/kubernetes/fragments/network-service.sh
  21. 0
      magnum/drivers/common/templates/kubernetes/fragments/wc-notify-master.sh
  22. 0
      magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml
  23. 0
      magnum/drivers/common/templates/kubernetes/fragments/write-heat-params.yaml
  24. 0
      magnum/drivers/common/templates/kubernetes/fragments/write-kube-os-config.sh
  25. 0
      magnum/drivers/common/templates/kubernetes/fragments/write-kubeconfig.yaml
  26. 0
      magnum/drivers/common/templates/kubernetes/fragments/write-network-config.sh
  27. 139
      magnum/drivers/k8s_fedora_atomic_v1/template_def.py
  28. 29
      magnum/drivers/k8s_fedora_atomic_v1/templates/elements/README.md
  29. 1
      magnum/drivers/k8s_fedora_atomic_v1/templates/elements/kubernetes/elements-deps
  30. 4
      magnum/drivers/k8s_fedora_atomic_v1/templates/elements/kubernetes/package-installs.yaml
  31. 34
      magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml
  32. 20
      magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml
  33. 0
      magnum/drivers/k8s_fedora_ironic_v1/__init__.py
  34. 0
      magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/Readme.md
  35. 0
      magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/elements-deps
  36. 0
      magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/package-installs.yaml
  37. 84
      magnum/drivers/k8s_fedora_ironic_v1/template_def.py
  38. 4
      magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml
  39. 34
      magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml
  40. 20
      magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion.yaml
  41. 3
      magnum/tests/unit/drivers/test_template_definition.py
  42. 2
      setup.cfg

96
magnum/drivers/common/k8s_fedora_template_def.py

@ -0,0 +1,96 @@
# 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.common import k8s_template_def
from magnum.drivers.common import template_def
from oslo_config import cfg
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
class ServerAddressOutputMapping(template_def.OutputMapping):
public_ip_output_key = None
private_ip_output_key = None
def __init__(self, dummy_arg, cluster_attr=None):
self.cluster_attr = cluster_attr
self.heat_output = self.public_ip_output_key
def set_output(self, stack, cluster_template, cluster):
if not cluster_template.floating_ip_enabled:
self.heat_output = self.private_ip_output_key
LOG.debug("Using heat_output: %s", self.heat_output)
super(ServerAddressOutputMapping,
self).set_output(stack, cluster_template, cluster)
class MasterAddressOutputMapping(ServerAddressOutputMapping):
public_ip_output_key = 'kube_masters'
private_ip_output_key = 'kube_masters_private'
class NodeAddressOutputMapping(ServerAddressOutputMapping):
public_ip_output_key = 'kube_minions'
private_ip_output_key = 'kube_minions_private'
class K8sFedoraTemplateDefinition(k8s_template_def.K8sTemplateDefinition):
"""Kubernetes template for a Fedora."""
def __init__(self):
super(K8sFedoraTemplateDefinition, self).__init__()
self.add_parameter('docker_volume_size',
cluster_template_attr='docker_volume_size')
self.add_parameter('docker_storage_driver',
cluster_template_attr='docker_storage_driver')
self.add_output('kube_minions',
cluster_attr='node_addresses',
mapping_type=NodeAddressOutputMapping)
self.add_output('kube_masters',
cluster_attr='master_addresses',
mapping_type=MasterAddressOutputMapping)
def get_params(self, context, cluster_template, cluster, **kwargs):
extra_params = kwargs.pop('extra_params', {})
extra_params['username'] = context.user_name
extra_params['tenant_name'] = context.tenant
osc = self.get_osc(context)
extra_params['region_name'] = osc.cinder_region_name()
return super(K8sFedoraTemplateDefinition,
self).get_params(context, cluster_template, cluster,
extra_params=extra_params,
**kwargs)
def get_env_files(self, cluster_template):
env_files = []
if cluster_template.master_lb_enabled:
env_files.append(
template_def.COMMON_ENV_PATH + 'with_master_lb.yaml')
else:
env_files.append(
template_def.COMMON_ENV_PATH + 'no_master_lb.yaml')
if cluster_template.floating_ip_enabled:
env_files.append(
template_def.COMMON_ENV_PATH + 'enable_floating_ip.yaml')
else:
env_files.append(
template_def.COMMON_ENV_PATH + 'disable_floating_ip.yaml')
return env_files

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/add-proxy.sh → magnum/drivers/common/templates/kubernetes/fragments/add-proxy.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/configure-etcd.sh → magnum/drivers/common/templates/kubernetes/fragments/configure-etcd.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/configure-flannel.sh → magnum/drivers/common/templates/kubernetes/fragments/configure-flannel.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/configure-kubernetes-master.sh → magnum/drivers/common/templates/kubernetes/fragments/configure-kubernetes-master.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/configure-kubernetes-minion.sh → magnum/drivers/common/templates/kubernetes/fragments/configure-kubernetes-minion.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/disable-selinux.sh → magnum/drivers/common/templates/kubernetes/fragments/disable-selinux.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-etcd.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-etcd.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-kube-podmaster.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-kube-podmaster.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-kube-proxy-master.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-kube-proxy-master.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-kube-proxy-minion.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-kube-proxy-minion.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-services-master.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-services-master.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/enable-services-minion.sh → magnum/drivers/common/templates/kubernetes/fragments/enable-services-minion.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/kube-examples.yaml → magnum/drivers/common/templates/kubernetes/fragments/kube-examples.yaml

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/kube-system-namespace-service.sh → magnum/drivers/common/templates/kubernetes/fragments/kube-system-namespace-service.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/kube-ui-service.sh → magnum/drivers/common/templates/kubernetes/fragments/kube-ui-service.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/make-cert-client.sh → magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/make-cert.sh → magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/network-config-service.sh → magnum/drivers/common/templates/kubernetes/fragments/network-config-service.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/network-service.sh → magnum/drivers/common/templates/kubernetes/fragments/network-service.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/wc-notify-master.sh → magnum/drivers/common/templates/kubernetes/fragments/wc-notify-master.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/write-heat-params-master.yaml → magnum/drivers/common/templates/kubernetes/fragments/write-heat-params-master.yaml

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/write-heat-params.yaml → magnum/drivers/common/templates/kubernetes/fragments/write-heat-params.yaml

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/write-kube-os-config.sh → magnum/drivers/common/templates/kubernetes/fragments/write-kube-os-config.sh

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/write-kubeconfig.yaml → magnum/drivers/common/templates/kubernetes/fragments/write-kubeconfig.yaml

0
magnum/drivers/k8s_fedora_atomic_v1/templates/fragments/write-network-config.sh → magnum/drivers/common/templates/kubernetes/fragments/write-network-config.sh

139
magnum/drivers/k8s_fedora_atomic_v1/template_def.py

@ -12,14 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutronclient.common import exceptions as n_exception
from neutronclient.neutron import v2_0 as neutronV20
import os
from oslo_log import log as logging
from magnum.common import exception
from magnum.drivers.common import k8s_template_def
from magnum.drivers.common import template_def
from magnum.drivers.common import k8s_fedora_template_def as kftd
from oslo_config import cfg
CONF = cfg.CONF
@ -27,35 +23,7 @@ CONF = cfg.CONF
LOG = logging.getLogger(__name__)
class ServerAddressOutputMapping(template_def.OutputMapping):
public_ip_output_key = None
private_ip_output_key = None
def __init__(self, dummy_arg, cluster_attr=None):
self.cluster_attr = cluster_attr
self.heat_output = self.public_ip_output_key
def set_output(self, stack, cluster_template, cluster):
if not cluster_template.floating_ip_enabled:
self.heat_output = self.private_ip_output_key
LOG.debug("Using heat_output: %s", self.heat_output)
super(ServerAddressOutputMapping,
self).set_output(stack, cluster_template, cluster)
class MasterAddressOutputMapping(ServerAddressOutputMapping):
public_ip_output_key = 'kube_masters'
private_ip_output_key = 'kube_masters_private'
class NodeAddressOutputMapping(ServerAddressOutputMapping):
public_ip_output_key = 'kube_minions'
private_ip_output_key = 'kube_minions_private'
class AtomicK8sTemplateDefinition(k8s_template_def.K8sTemplateDefinition):
class AtomicK8sTemplateDefinition(kftd.K8sFedoraTemplateDefinition):
"""Kubernetes template for a Fedora Atomic VM."""
provides = [
@ -64,49 +32,6 @@ class AtomicK8sTemplateDefinition(k8s_template_def.K8sTemplateDefinition):
'coe': 'kubernetes'},
]
def __init__(self):
super(AtomicK8sTemplateDefinition, self).__init__()
self.add_parameter('docker_volume_size',
cluster_template_attr='docker_volume_size')
self.add_parameter('docker_storage_driver',
cluster_template_attr='docker_storage_driver')
self.add_output('kube_minions',
cluster_attr='node_addresses',
mapping_type=NodeAddressOutputMapping)
self.add_output('kube_masters',
cluster_attr='master_addresses',
mapping_type=MasterAddressOutputMapping)
def get_params(self, context, cluster_template, cluster, **kwargs):
extra_params = kwargs.pop('extra_params', {})
extra_params['username'] = context.user_name
extra_params['tenant_name'] = context.tenant
osc = self.get_osc(context)
extra_params['region_name'] = osc.cinder_region_name()
return super(AtomicK8sTemplateDefinition,
self).get_params(context, cluster_template, cluster,
extra_params=extra_params,
**kwargs)
def get_env_files(self, cluster_template):
env_files = []
if cluster_template.master_lb_enabled:
env_files.append(
template_def.COMMON_ENV_PATH + 'with_master_lb.yaml')
else:
env_files.append(
template_def.COMMON_ENV_PATH + 'no_master_lb.yaml')
if cluster_template.floating_ip_enabled:
env_files.append(
template_def.COMMON_ENV_PATH + 'enable_floating_ip.yaml')
else:
env_files.append(
template_def.COMMON_ENV_PATH + 'disable_floating_ip.yaml')
return env_files
@property
def driver_module_path(self):
return __name__[:__name__.rindex('.')]
@ -115,63 +40,3 @@ class AtomicK8sTemplateDefinition(k8s_template_def.K8sTemplateDefinition):
def template_path(self):
return os.path.join(os.path.dirname(os.path.realpath(__file__)),
'templates/kubecluster.yaml')
class FedoraK8sIronicTemplateDefinition(AtomicK8sTemplateDefinition):
"""Kubernetes template for a Fedora Baremetal."""
provides = [
{'server_type': 'bm',
'os': 'fedora',
'coe': 'kubernetes'},
]
def __init__(self):
super(FedoraK8sIronicTemplateDefinition, self).__init__()
self.add_parameter('fixed_subnet',
cluster_template_attr='fixed_subnet',
param_type=str,
required=True)
def get_fixed_network_id(self, osc, cluster_template):
try:
subnet = neutronV20.find_resource_by_name_or_id(
osc.neutron(),
'subnet',
cluster_template.fixed_subnet
)
except n_exception.NeutronException as e:
# NOTE(yuanying): NeutronCLIError doesn't have status_code
# if subnet name is duplicated, NeutronClientNoUniqueMatch
# (which is kind of NeutronCLIError) will be raised.
if getattr(e, 'status_code', 400) < 500:
raise exception.InvalidSubnet(message=("%s" % e))
else:
raise e
if subnet['ip_version'] != 4:
raise exception.InvalidSubnet(
message="Subnet IP version should be 4"
)
return subnet['network_id']
def get_params(self, context, cluster_template, cluster, **kwargs):
ep = kwargs.pop('extra_params', {})
osc = self.get_osc(context)
ep['fixed_network'] = self.get_fixed_network_id(osc, cluster_template)
return super(FedoraK8sIronicTemplateDefinition,
self).get_params(context, cluster_template, cluster,
extra_params=ep,
**kwargs)
@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-fedora-ironic.yaml')

29
magnum/drivers/k8s_fedora_atomic_v1/templates/elements/README.md

@ -1,29 +0,0 @@
Kubernetes elements
===================
This directory contains `[diskimage-builder](https://github.com/openstack/diskimage-builder)`
elements to build an image which contains kubernetes required to use kubecluster-fedora-ironic.yaml.
An example fedora based image and uploaded to glance with the following:
git clone https://git.openstack.org/openstack/magnum
git clone https://git.openstack.org/openstack/diskimage-builder.git
git clone https://git.openstack.org/openstack/tripleo-image-elements.git
git clone https://git.openstack.org/openstack/heat-templates.git
git clone https://git.openstack.org/openstack/dib-utils.git
export PATH="${PWD}/dib-utils/bin:$PATH"
export ELEMENTS_PATH=tripleo-image-elements/elements:heat-templates/hot/software-config/elements
export ELEMENTS_PATH=${ELEMENTS_PATH}:magnum/etc/magnum/templates/kubernetes/elements
export DIB_RELEASE=21
diskimage-builder/bin/disk-image-create baremetal \
fedora selinux-permissive \
os-collect-config \
os-refresh-config \
os-apply-config \
heat-config-script \
kubernetes \
-o fedora-21-kubernetes.qcow2
KERNEL_ID=`glance image-create --name fedora-k8s-kernel --visibility public --disk-format=aki --container-format=aki --file=fedora-21-kubernetes.vmlinuz | grep id | tr -d '| ' | cut --bytes=3-57`
RAMDISK_ID=`glance image-create --name fedora-k8s-ramdisk --visibility public --disk-format=ari --container-format=ari --file=fedora-21-kubernetes.initrd | grep id | tr -d '| ' | cut --bytes=3-57`
BASE_ID=`glance image-create --name fedora-k8s --visibility public --disk-format=qcow2 --container-format=bare --property kernel_id=$KERNEL_ID --property ramdisk_id=$RAMDISK_ID --file=fedora-21-kubernetes.qcow2 | grep -v kernel | grep -v ramdisk | grep id | tr -d '| ' | cut --bytes=3-57`

1
magnum/drivers/k8s_fedora_atomic_v1/templates/elements/kubernetes/elements-deps

@ -1 +0,0 @@
package-installs

4
magnum/drivers/k8s_fedora_atomic_v1/templates/elements/kubernetes/package-installs.yaml

@ -1,4 +0,0 @@
kubernetes:
etcd:
flannel:
docker-io:

34
magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster.yaml

@ -221,7 +221,7 @@ resources:
group: ungrouped
config:
str_replace:
template: {get_file: fragments/write-heat-params-master.yaml}
template: {get_file: ../../common/templates/kubernetes/fragments/write-heat-params-master.yaml}
params:
"$KUBE_API_PUBLIC_ADDRESS": {get_attr: [api_address_switch, public_ip]}
"$KUBE_API_PRIVATE_ADDRESS": {get_attr: [api_address_switch, private_ip]}
@ -259,7 +259,7 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/make-cert.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/make-cert.sh}
configure_docker_storage:
type: OS::Heat::SoftwareConfig
@ -275,91 +275,91 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-etcd.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-etcd.sh}
write_kube_os_config:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-kube-os-config.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/write-kube-os-config.sh}
configure_kubernetes:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-kubernetes-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-kubernetes-master.sh}
write_network_config:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-network-config.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/write-network-config.sh}
network_config_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-config-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-config-service.sh}
enable_services:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-services-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-services-master.sh}
kube_examples:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-examples.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-examples.yaml}
network_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-service.sh}
enable_kube_podmaster:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-podmaster.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-podmaster.sh}
kube_system_namespace_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-system-namespace-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-system-namespace-service.sh}
kube_ui_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-ui-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-ui-service.sh}
enable_kube_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-proxy-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-proxy-master.sh}
master_wc_notify:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/wc-notify-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/wc-notify-master.sh}
disable_selinux:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/disable-selinux.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/disable-selinux.sh}
add_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/add-proxy.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/add-proxy.sh}
kube_master_init:
type: OS::Heat::MultipartMime

20
magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion.yaml

@ -218,7 +218,7 @@ resources:
group: ungrouped
config:
str_replace:
template: {get_file: fragments/write-heat-params.yaml}
template: {get_file: ../../common/templates/kubernetes/fragments/write-heat-params.yaml}
params:
$KUBE_ALLOW_PRIV: {get_param: kube_allow_priv}
$KUBE_MASTER_IP: {get_param: kube_master_ip}
@ -260,13 +260,13 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-kubeconfig.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/write-kubeconfig.yaml}
make_cert:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/make-cert-client.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/make-cert-client.sh}
configure_docker_storage:
type: OS::Heat::SoftwareConfig
@ -288,25 +288,25 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-kubernetes-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-kubernetes-minion.sh}
kube_examples:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-examples.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-examples.yaml}
network_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-service.sh}
enable_services:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-services-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-services-minion.sh}
enable_docker_registry:
type: OS::Heat::SoftwareConfig
@ -318,7 +318,7 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-proxy-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-proxy-minion.sh}
minion_wc_notify:
type: OS::Heat::SoftwareConfig
@ -336,13 +336,13 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/disable-selinux.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/disable-selinux.sh}
add_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/add-proxy.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/add-proxy.sh}
kube_minion_init:
type: OS::Heat::MultipartMime

0
magnum/drivers/k8s_fedora_ironic_v1/__init__.py

0
magnum/drivers/k8s_fedora_atomic_v1/image/ironic/kubernetes/Readme.md → magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/Readme.md

0
magnum/drivers/k8s_fedora_atomic_v1/image/ironic/kubernetes/elements-deps → magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/elements-deps

0
magnum/drivers/k8s_fedora_atomic_v1/image/ironic/kubernetes/package-installs.yaml → magnum/drivers/k8s_fedora_ironic_v1/image/kubernetes/package-installs.yaml

84
magnum/drivers/k8s_fedora_ironic_v1/template_def.py

@ -0,0 +1,84 @@
# 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 neutronclient.common import exceptions as n_exception
from neutronclient.neutron import v2_0 as neutronV20
import os
from oslo_log import log as logging
from magnum.common import exception
from magnum.drivers.common import k8s_fedora_template_def as kftd
from oslo_config import cfg
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
class FedoraK8sIronicTemplateDefinition(kftd.K8sFedoraTemplateDefinition):
"""Kubernetes template for a Fedora Baremetal."""
provides = [
{'server_type': 'bm',
'os': 'fedora',
'coe': 'kubernetes'},
]
def __init__(self):
super(FedoraK8sIronicTemplateDefinition, self).__init__()
self.add_parameter('fixed_subnet',
cluster_template_attr='fixed_subnet',
param_type=str,
required=True)
def get_fixed_network_id(self, osc, cluster_template):
try:
subnet = neutronV20.find_resource_by_name_or_id(
osc.neutron(),
'subnet',
cluster_template.fixed_subnet
)
except n_exception.NeutronException as e:
# NOTE(yuanying): NeutronCLIError doesn't have status_code
# if subnet name is duplicated, NeutronClientNoUniqueMatch
# (which is kind of NeutronCLIError) will be raised.
if getattr(e, 'status_code', 400) < 500:
raise exception.InvalidSubnet(message=("%s" % e))
else:
raise e
if subnet['ip_version'] != 4:
raise exception.InvalidSubnet(
message="Subnet IP version should be 4"
)
return subnet['network_id']
def get_params(self, context, cluster_template, cluster, **kwargs):
ep = kwargs.pop('extra_params', {})
osc = self.get_osc(context)
ep['fixed_network'] = self.get_fixed_network_id(osc, cluster_template)
return super(FedoraK8sIronicTemplateDefinition,
self).get_params(context, cluster_template, cluster,
extra_params=ep,
**kwargs)
@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')

4
magnum/drivers/k8s_fedora_atomic_v1/templates/kubecluster-fedora-ironic.yaml → magnum/drivers/k8s_fedora_ironic_v1/templates/kubecluster.yaml

@ -421,7 +421,7 @@ resources:
properties:
count: {get_param: number_of_masters}
resource_def:
type: kubemaster-fedora-ironic.yaml
type: kubemaster.yaml
properties:
api_public_address: {get_attr: [api_pool_floating, floating_ip_address]}
api_private_address: {get_attr: [api_loadbalancer, vip_address]}
@ -473,7 +473,7 @@ resources:
count: {get_param: number_of_minions}
removal_policies: [{resource_list: {get_param: minions_to_remove}}]
resource_def:
type: kubeminion-fedora-ironic.yaml
type: kubeminion.yaml
properties:
ssh_key_name: {get_param: ssh_key_name}
server_image: {get_param: server_image}

34
magnum/drivers/k8s_fedora_atomic_v1/templates/kubemaster-fedora-ironic.yaml → magnum/drivers/k8s_fedora_ironic_v1/templates/kubemaster.yaml

@ -215,7 +215,7 @@ resources:
group: ungrouped
config:
str_replace:
template: {get_file: fragments/write-heat-params-master.yaml}
template: {get_file: ../../common/templates/kubernetes/fragments/write-heat-params-master.yaml}
params:
"$KUBE_API_PUBLIC_ADDRESS": {get_attr: [api_address_switch, public_ip]}
"$KUBE_API_PRIVATE_ADDRESS": {get_attr: [api_address_switch, private_ip]}
@ -252,7 +252,7 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/make-cert.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/make-cert.sh}
configure_docker_storage:
type: OS::Heat::SoftwareConfig
@ -268,91 +268,91 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-etcd.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-etcd.sh}
write_kube_os_config:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-kube-os-config.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/write-kube-os-config.sh}
configure_kubernetes:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-kubernetes-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-kubernetes-master.sh}
write_network_config:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-network-config.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/write-network-config.sh}
network_config_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-config-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-config-service.sh}
enable_services:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-services-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-services-master.sh}
kube_examples:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-examples.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-examples.yaml}
network_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-service.sh}
enable_kube_podmaster:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-podmaster.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-podmaster.sh}
kube_system_namespace_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-system-namespace-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-system-namespace-service.sh}
kube_ui_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-ui-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-ui-service.sh}
enable_kube_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-proxy-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-proxy-master.sh}
master_wc_notify:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/wc-notify-master.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/wc-notify-master.sh}
disable_selinux:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/disable-selinux.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/disable-selinux.sh}
add_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/add-proxy.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/add-proxy.sh}
kube_master_init:
type: OS::Heat::MultipartMime

20
magnum/drivers/k8s_fedora_atomic_v1/templates/kubeminion-fedora-ironic.yaml → magnum/drivers/k8s_fedora_ironic_v1/templates/kubeminion.yaml

@ -212,7 +212,7 @@ resources:
group: ungrouped
config:
str_replace:
template: {get_file: fragments/write-heat-params.yaml}
template: {get_file: ../../common/templates/kubernetes/fragments/write-heat-params.yaml}
params:
$KUBE_ALLOW_PRIV: {get_param: kube_allow_priv}
$KUBE_MASTER_IP: {get_param: kube_master_ip}
@ -253,13 +253,13 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/write-kubeconfig.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/write-kubeconfig.yaml}
make_cert:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/make-cert-client.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/make-cert-client.sh}
configure_docker_storage:
type: OS::Heat::SoftwareConfig
@ -281,25 +281,25 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/configure-kubernetes-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/configure-kubernetes-minion.sh}
kube_examples:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/kube-examples.yaml}
config: {get_file: ../../common/templates/kubernetes/fragments/kube-examples.yaml}
network_service:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/network-service.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/network-service.sh}
enable_services:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-services-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-services-minion.sh}
enable_docker_registry:
type: OS::Heat::SoftwareConfig
@ -311,7 +311,7 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/enable-kube-proxy-minion.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/enable-kube-proxy-minion.sh}
minion_wc_notify:
type: OS::Heat::SoftwareConfig
@ -329,13 +329,13 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/disable-selinux.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/disable-selinux.sh}
add_proxy:
type: OS::Heat::SoftwareConfig
properties:
group: ungrouped
config: {get_file: fragments/add-proxy.sh}
config: {get_file: ../../common/templates/kubernetes/fragments/add-proxy.sh}
kube_minion_init:
type: OS::Heat::MultipartMime

3
magnum/tests/unit/drivers/test_template_definition.py

@ -22,6 +22,7 @@ from magnum.common import exception
from magnum.drivers.common import template_def as cmn_tdef
from magnum.drivers.k8s_coreos_v1 import template_def as k8s_coreos_tdef
from magnum.drivers.k8s_fedora_atomic_v1 import template_def as k8sa_tdef
from magnum.drivers.k8s_fedora_ironic_v1 import template_def as k8si_tdef
from magnum.drivers.mesos_ubuntu_v1 import template_def as mesos_tdef
from magnum.drivers.swarm_fedora_atomic_v1 import template_def as swarm_tdef
from magnum.tests import base
@ -74,7 +75,7 @@ class TemplateDefinitionTestCase(base.TestCase):
'kubernetes')
self.assertIsInstance(definition,
k8sa_tdef.FedoraK8sIronicTemplateDefinition)
k8si_tdef.FedoraK8sIronicTemplateDefinition)
def test_get_vm_coreos_kubernetes_definition(self):
definition = cmn_tdef.TemplateDefinition.get_template_definition(

2
setup.cfg

@ -58,7 +58,7 @@ oslo.config.opts.defaults =
magnum = magnum.common.config:set_cors_middleware_defaults
magnum.template_definitions =
magnum_bm_fedora_k8s = magnum.drivers.k8s_fedora_atomic_v1.template_def:FedoraK8sIronicTemplateDefinition
magnum_bm_fedora_k8s = magnum.drivers.k8s_fedora_ironic_v1.template_def:FedoraK8sIronicTemplateDefinition
magnum_vm_atomic_k8s = magnum.drivers.k8s_fedora_atomic_v1.template_def:AtomicK8sTemplateDefinition
magnum_vm_coreos_k8s = magnum.drivers.k8s_coreos_v1.template_def:CoreOSK8sTemplateDefinition
magnum_vm_atomic_swarm = magnum.drivers.swarm_fedora_atomic_v1.template_def:AtomicSwarmTemplateDefinition

Loading…
Cancel
Save