External Ceph support - Implementation Glance

Most simple implementation of external ceph support.

We use INI merge to configure RBD backend for Glance and copy
ceph.conf and keyring provided by the user into the container.

Set_configs.py had to be extended to support globbing (wildcards) in
order to copy ceph keyring file which is named depending on the cephx
user name.

Partially-Implements Blueprint: external-ceph
Partially-Implements Blueprint: selectable-ceph

Change-Id: Iacadbd8ec9956e9f075206ea03b28f044cb6ffb8
This commit is contained in:
Mathias Ewald 2016-07-13 10:00:27 +00:00
parent 27f1cad74f
commit f16a45180c
7 changed files with 48 additions and 26 deletions

View File

@ -219,6 +219,9 @@ nova_keystone_user: "nova"
enable_nova_fake: "no"
num_nova_fake_per_node: 5
# Control usage of ceph per service
glance_enable_ceph: "{{ enable_ceph }}"
####################
# RabbitMQ options
####################

View File

@ -1,11 +1,17 @@
---
- include: ceph.yml
when:
- enable_ceph | bool
- (enable_ceph | bool) and (glance_enable_ceph | bool)
- inventory_hostname in groups['ceph-mon'] or
inventory_hostname in groups['glance-api'] or
inventory_hostname in groups['glance-registry']
- include: external_ceph.yml
when:
- (enable_ceph | bool == False) and (glance_enable_ceph | bool)
- inventory_hostname in groups['glance-api'] or
inventory_hostname in groups['glance-registry']
- include: register.yml
when: inventory_hostname in groups['glance-api']

View File

@ -0,0 +1,13 @@
---
- name: Ensuring config directory exists
file:
path: "{{ node_config_directory }}/glance-api"
state: "directory"
when: inventory_hostname in groups['glance-api']
- name: Copy over ceph files
copy:
src: "{{ item }}"
dest: "{{ node_config_directory }}/glance-api/"
with_fileglob:
- "{{ node_custom_config }}/glance/ceph*"

View File

@ -39,7 +39,7 @@ memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansi
flavor = keystone
[glance_store]
{% if enable_ceph | bool %}
{% if enable_ceph | bool and glance_enable_ceph | bool %}
default_store = rbd
stores = rbd
rbd_store_user = glance

View File

@ -6,18 +6,13 @@
"dest": "/etc/glance/glance-api.conf",
"owner": "glance",
"perm": "0600"
}{% if enable_ceph | bool %},
}{% if glance_enable_ceph | bool %},
{
"source": "{{ container_config_directory }}/ceph.client.glance.keyring",
"dest": "/etc/ceph/ceph.client.glance.keyring",
"source": "{{ container_config_directory }}/ceph.*",
"dest": "/etc/ceph/",
"owner": "glance",
"perm": "0600"
},
{
"source": "{{ container_config_directory }}/ceph.conf",
"dest": "/etc/ceph/ceph.conf",
"owner": "glance",
"perm": "0600"
}{% endif %}
"perm": "0700"
}
{% endif %}
]
}

View File

@ -13,6 +13,7 @@
# limitations under the License.
import argparse
import glob
import json
import logging
import os
@ -45,9 +46,9 @@ def validate_config(config):
def validate_source(data):
source = data.get('source')
exists = os.path.exists(source)
if not exists:
# Only check existance if no wildcard found
if '*' not in source:
if not os.path.exists(source):
if data.get('optional'):
LOG.info("%s does not exist, but is not required", source)
return False
@ -82,8 +83,9 @@ def copy_files(data):
if source != source_path:
# Source is file
LOG.info("Copying %s to %s", source, dest)
shutil.copy(source, dest)
for file in glob.glob(source):
LOG.info("Copying %s to %s", file, dest)
shutil.copy(file, dest)
else:
# Source is a directory
for src in os.listdir(source_path):

View File

@ -125,6 +125,9 @@ neutron_external_interface: "eth1"
#enable_neutron_qos: "no"
#enable_swift: "no"
# Control usage of ceph per service. This allows to configure external ceph
# when ceph is not deployed by Kolla.
#glance_enable_ceph: "{{ enable_ceph }}"
###################
# Ceph options