Adds Cinder Volume Support to Swarm Bay Type
Previously, the swarm bay type did not support using a cinder volume for docker. Implements: blueprint swarm-cinder Change-Id: I8acaf60caab52a5e5a234e4c5f89ce3dd155759c
This commit is contained in:
parent
9f95010246
commit
4a2c71c4c4
|
@ -571,6 +571,8 @@ class AtomicSwarmTemplateDefinition(BaseTemplateDefinition):
|
|||
param_type=str)
|
||||
self.add_parameter('server_flavor',
|
||||
baymodel_attr='flavor_id')
|
||||
self.add_parameter('docker_volume_size',
|
||||
baymodel_attr='docker_volume_size')
|
||||
self.add_parameter('external_network',
|
||||
baymodel_attr='external_network_id',
|
||||
required=True)
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /etc/sysconfig/heat-params
|
||||
|
||||
DOCKER_DEV=/dev/disk/by-id/virtio-${DOCKER_VOLUME:0:20}
|
||||
|
||||
attempts=60
|
||||
while [[ ! -b $DOCKER_DEV && $attempts != 0 ]]; do
|
||||
echo "waiting for disk $DOCKER_DEV"
|
||||
sleep 0.5
|
||||
udevadm trigger
|
||||
let attempts--
|
||||
done
|
||||
|
||||
if ! [ -b $DOCKER_DEV ]; then
|
||||
echo "ERROR: device $DOCKER_DEV does not exist" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pvcreate $DOCKER_DEV
|
||||
vgcreate docker $DOCKER_DEV
|
||||
|
||||
cat > /etc/sysconfig/docker-storage-setup <<EOF
|
||||
VG=docker
|
||||
EOF
|
|
@ -6,6 +6,7 @@ write_files:
|
|||
permissions: "0644"
|
||||
content: |
|
||||
WAIT_HANDLE="$WAIT_HANDLE"
|
||||
DOCKER_VOLUME="$DOCKER_VOLUME"
|
||||
HTTP_PROXY="$HTTP_PROXY"
|
||||
HTTPS_PROXY="$HTTPS_PROXY"
|
||||
NO_PROXY="$NO_PROXY"
|
||||
|
|
|
@ -75,6 +75,13 @@ parameters:
|
|||
description: how many swarm nodes to spawn
|
||||
default: 1
|
||||
|
||||
docker_volume_size:
|
||||
type: number
|
||||
description: >
|
||||
size of a cinder volume to allocate to docker for container/image
|
||||
storage
|
||||
default: 25
|
||||
|
||||
fixed_network_cidr:
|
||||
type: string
|
||||
description: network range for fixed ip network
|
||||
|
@ -192,6 +199,7 @@ resources:
|
|||
template: {get_file: fragments/write-heat-params.yaml}
|
||||
params:
|
||||
"$WAIT_HANDLE": {get_resource: cloud_init_wait_handle}
|
||||
"$DOCKER_VOLUME": {get_resource: docker_volume}
|
||||
"$HTTP_PROXY": {get_param: http_proxy}
|
||||
"$HTTPS_PROXY": {get_param: https_proxy}
|
||||
"$NO_PROXY": {get_param: no_proxy}
|
||||
|
@ -306,6 +314,12 @@ resources:
|
|||
group: ungrouped
|
||||
config: {get_file: fragments/disable-selinux.sh}
|
||||
|
||||
configure_docker_storage:
|
||||
type: OS::Heat::SoftwareConfig
|
||||
properties:
|
||||
group: ungrouped
|
||||
config: {get_file: fragments/configure-docker-storage.sh}
|
||||
|
||||
add_proxy:
|
||||
type: "OS::Heat::SoftwareConfig"
|
||||
properties:
|
||||
|
@ -320,6 +334,7 @@ resources:
|
|||
- config: {get_resource: remove_docker_key}
|
||||
- config: {get_resource: write_heat_params}
|
||||
- config: {get_resource: make_cert}
|
||||
- config: {get_resource: configure_docker_storage}
|
||||
- config: {get_resource: write_swarm_agent_failure_service}
|
||||
- config: {get_resource: write_swarm_manager_failure_service}
|
||||
- config: {get_resource: write_docker_service}
|
||||
|
@ -387,6 +402,7 @@ resources:
|
|||
ssh_key_name: {get_param: ssh_key_name}
|
||||
server_image: {get_param: server_image}
|
||||
server_flavor: {get_param: server_flavor}
|
||||
docker_volume_size: {get_param: docker_volume_size}
|
||||
fixed_network_id: {get_resource: fixed_network}
|
||||
fixed_subnet_id: {get_resource: fixed_subnet}
|
||||
external_network: {get_param: external_network}
|
||||
|
@ -400,6 +416,24 @@ resources:
|
|||
magnum_url: {get_param: magnum_url}
|
||||
tls_disabled: {get_param: tls_disabled}
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# docker storage. This allocates a cinder volume and attaches it
|
||||
# to the master.
|
||||
#
|
||||
|
||||
docker_volume:
|
||||
type: OS::Cinder::Volume
|
||||
properties:
|
||||
size: {get_param: docker_volume_size}
|
||||
|
||||
docker_volume_attach:
|
||||
type: OS::Cinder::VolumeAttachment
|
||||
properties:
|
||||
instance_uuid: {get_resource: swarm_master}
|
||||
volume_id: {get_resource: docker_volume}
|
||||
mountpoint: /dev/vdb
|
||||
|
||||
outputs:
|
||||
|
||||
api_address:
|
||||
|
|
|
@ -22,6 +22,12 @@ parameters:
|
|||
description: name of ssh key to be provisioned on our server
|
||||
default: lars
|
||||
|
||||
docker_volume_size:
|
||||
type: number
|
||||
description: >
|
||||
size of a cinder volume to allocate to docker for container/image
|
||||
storage
|
||||
|
||||
external_network:
|
||||
type: string
|
||||
description: uuid/name of a network to use for floating ip addresses
|
||||
|
@ -127,6 +133,7 @@ resources:
|
|||
template: {get_file: fragments/write-heat-params.yaml}
|
||||
params:
|
||||
"$WAIT_HANDLE": {get_resource: node_cloud_init_wait_handle}
|
||||
"$DOCKER_VOLUME": {get_resource: docker_volume}
|
||||
"$HTTP_PROXY": {get_param: http_proxy}
|
||||
"$HTTPS_PROXY": {get_param: https_proxy}
|
||||
"$NO_PROXY": {get_param: no_proxy}
|
||||
|
@ -155,6 +162,12 @@ resources:
|
|||
group: ungrouped
|
||||
config: {get_file: fragments/make-cert.py}
|
||||
|
||||
configure_docker_storage:
|
||||
type: OS::Heat::SoftwareConfig
|
||||
properties:
|
||||
group: ungrouped
|
||||
config: {get_file: fragments/configure-docker-storage.sh}
|
||||
|
||||
write_docker_service:
|
||||
type: "OS::Heat::SoftwareConfig"
|
||||
properties:
|
||||
|
@ -229,6 +242,7 @@ resources:
|
|||
- config: {get_resource: remove_docker_key}
|
||||
- config: {get_resource: write_heat_params}
|
||||
- config: {get_resource: make_cert}
|
||||
- config: {get_resource: configure_docker_storage}
|
||||
- config: {get_resource: write_swarm_agent_failure_service}
|
||||
- config: {get_resource: write_swarm_agent_service}
|
||||
- config: {get_resource: write_docker_service}
|
||||
|
@ -272,6 +286,24 @@ resources:
|
|||
port_id:
|
||||
get_resource: swarm_node_eth0
|
||||
|
||||
######################################################################
|
||||
#
|
||||
# docker storage. This allocates a cinder volume and attaches it
|
||||
# to the node.
|
||||
#
|
||||
|
||||
docker_volume:
|
||||
type: OS::Cinder::Volume
|
||||
properties:
|
||||
size: {get_param: docker_volume_size}
|
||||
|
||||
docker_volume_attach:
|
||||
type: OS::Cinder::VolumeAttachment
|
||||
properties:
|
||||
instance_uuid: {get_resource: swarm_node}
|
||||
volume_id: {get_resource: docker_volume}
|
||||
mountpoint: /dev/vdb
|
||||
|
||||
outputs:
|
||||
|
||||
swarm_node_ip:
|
||||
|
|
|
@ -31,6 +31,7 @@ class TestBayConductorWithSwarm(base.TestCase):
|
|||
'flavor_id': 'flavor_id',
|
||||
'keypair_id': 'keypair_id',
|
||||
'dns_nameserver': 'dns_nameserver',
|
||||
'docker_volume_size': 20,
|
||||
'external_network_id': 'external_network_id',
|
||||
'fixed_network': '10.2.0.0/22',
|
||||
'cluster_distro': 'fedora-atomic',
|
||||
|
@ -80,6 +81,7 @@ class TestBayConductorWithSwarm(base.TestCase):
|
|||
'server_image': 'image_id',
|
||||
'server_flavor': 'flavor_id',
|
||||
'number_of_nodes': '1',
|
||||
'docker_volume_size': 20,
|
||||
'fixed_network_cidr': '10.2.0.0/22',
|
||||
'discovery_url': 'token://39987da72f8386e0d0225ae8929e7cb4',
|
||||
'http_proxy': 'http_proxy',
|
||||
|
@ -102,8 +104,8 @@ class TestBayConductorWithSwarm(base.TestCase):
|
|||
'test_discovery', group='bay')
|
||||
|
||||
not_required = ['image_id', 'flavor_id', 'dns_nameserver',
|
||||
'fixed_network', 'http_proxy', 'https_proxy',
|
||||
'no_proxy']
|
||||
'docker_volume_size', 'fixed_network', 'http_proxy',
|
||||
'https_proxy', 'no_proxy']
|
||||
for key in not_required:
|
||||
self.baymodel_dict[key] = None
|
||||
self.bay_dict['discovery_url'] = None
|
||||
|
|
Loading…
Reference in New Issue