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
changes/99/341399/6
Mathias Ewald 6 years ago
parent 27f1cad74f
commit f16a45180c
  1. 3
      ansible/group_vars/all.yml
  2. 12
      ansible/roles/glance/tasks/deploy.yml
  3. 13
      ansible/roles/glance/tasks/external_ceph.yml
  4. 2
      ansible/roles/glance/templates/glance-api.conf.j2
  5. 17
      ansible/roles/glance/templates/glance-api.json.j2
  6. 24
      docker/base/set_configs.py
  7. 3
      etc/kolla/globals.yml

@ -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
####################

@ -1,10 +1,16 @@
---
- 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']
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']

@ -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*"

@ -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

@ -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 %}
]
}

@ -13,6 +13,7 @@
# limitations under the License.
import argparse
import glob
import json
import logging
import os
@ -45,15 +46,15 @@ def validate_config(config):
def validate_source(data):
source = data.get('source')
exists = os.path.exists(source)
if not exists:
if data.get('optional'):
LOG.info("%s does not exist, but is not required", source)
return False
else:
LOG.error("The source to copy does not exist: %s", source)
sys.exit(1)
# 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
else:
LOG.error("The source to copy does not exist: %s", source)
sys.exit(1)
return True
@ -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):

@ -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

Loading…
Cancel
Save