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:
parent
27f1cad74f
commit
f16a45180c
@ -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']
|
||||
|
13
ansible/roles/glance/tasks/external_ceph.yml
Normal file
13
ansible/roles/glance/tasks/external_ceph.yml
Normal 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*"
|
@ -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…
Reference in New Issue
Block a user