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"
|
enable_nova_fake: "no"
|
||||||
num_nova_fake_per_node: 5
|
num_nova_fake_per_node: 5
|
||||||
|
|
||||||
|
# Control usage of ceph per service
|
||||||
|
glance_enable_ceph: "{{ enable_ceph }}"
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# RabbitMQ options
|
# RabbitMQ options
|
||||||
####################
|
####################
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
---
|
---
|
||||||
- include: ceph.yml
|
- include: ceph.yml
|
||||||
when:
|
when:
|
||||||
- enable_ceph | bool
|
- (enable_ceph | bool) and (glance_enable_ceph | bool)
|
||||||
- inventory_hostname in groups['ceph-mon'] or
|
- inventory_hostname in groups['ceph-mon'] or
|
||||||
inventory_hostname in groups['glance-api'] or
|
inventory_hostname in groups['glance-api'] or
|
||||||
inventory_hostname in groups['glance-registry']
|
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
|
- include: register.yml
|
||||||
when: inventory_hostname in groups['glance-api']
|
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
|
flavor = keystone
|
||||||
|
|
||||||
[glance_store]
|
[glance_store]
|
||||||
{% if enable_ceph | bool %}
|
{% if enable_ceph | bool and glance_enable_ceph | bool %}
|
||||||
default_store = rbd
|
default_store = rbd
|
||||||
stores = rbd
|
stores = rbd
|
||||||
rbd_store_user = glance
|
rbd_store_user = glance
|
||||||
|
@ -6,18 +6,13 @@
|
|||||||
"dest": "/etc/glance/glance-api.conf",
|
"dest": "/etc/glance/glance-api.conf",
|
||||||
"owner": "glance",
|
"owner": "glance",
|
||||||
"perm": "0600"
|
"perm": "0600"
|
||||||
}{% if enable_ceph | bool %},
|
}{% if glance_enable_ceph | bool %},
|
||||||
{
|
{
|
||||||
"source": "{{ container_config_directory }}/ceph.client.glance.keyring",
|
"source": "{{ container_config_directory }}/ceph.*",
|
||||||
"dest": "/etc/ceph/ceph.client.glance.keyring",
|
"dest": "/etc/ceph/",
|
||||||
"owner": "glance",
|
"owner": "glance",
|
||||||
"perm": "0600"
|
"perm": "0700"
|
||||||
},
|
}
|
||||||
{
|
{% endif %}
|
||||||
"source": "{{ container_config_directory }}/ceph.conf",
|
|
||||||
"dest": "/etc/ceph/ceph.conf",
|
|
||||||
"owner": "glance",
|
|
||||||
"perm": "0600"
|
|
||||||
}{% endif %}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import glob
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -45,15 +46,15 @@ def validate_config(config):
|
|||||||
def validate_source(data):
|
def validate_source(data):
|
||||||
source = data.get('source')
|
source = data.get('source')
|
||||||
|
|
||||||
exists = os.path.exists(source)
|
# Only check existance if no wildcard found
|
||||||
|
if '*' not in source:
|
||||||
if not exists:
|
if not os.path.exists(source):
|
||||||
if data.get('optional'):
|
if data.get('optional'):
|
||||||
LOG.info("%s does not exist, but is not required", source)
|
LOG.info("%s does not exist, but is not required", source)
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
LOG.error("The source to copy does not exist: %s", source)
|
LOG.error("The source to copy does not exist: %s", source)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -82,8 +83,9 @@ def copy_files(data):
|
|||||||
|
|
||||||
if source != source_path:
|
if source != source_path:
|
||||||
# Source is file
|
# Source is file
|
||||||
LOG.info("Copying %s to %s", source, dest)
|
for file in glob.glob(source):
|
||||||
shutil.copy(source, dest)
|
LOG.info("Copying %s to %s", file, dest)
|
||||||
|
shutil.copy(file, dest)
|
||||||
else:
|
else:
|
||||||
# Source is a directory
|
# Source is a directory
|
||||||
for src in os.listdir(source_path):
|
for src in os.listdir(source_path):
|
||||||
|
@ -125,6 +125,9 @@ neutron_external_interface: "eth1"
|
|||||||
#enable_neutron_qos: "no"
|
#enable_neutron_qos: "no"
|
||||||
#enable_swift: "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
|
# Ceph options
|
||||||
|
Loading…
Reference in New Issue
Block a user