Other (optional) supported settings:
-- ``osd_objectstore``: Set the Ceph *objectstore* for the OSD. Available options
- are ``filestore`` or ``bluestore``. You can only select ``bluestore`` with
- the Ceph release is luminous or greater. Defaults to ``bluestore`` if unset.
-
- ``dmcrypt``: Enable Ceph's encryption on OSDs using ``dmcrypt``.
Defaults to ``false`` if unset.
per OSD when using ``devices`` like there is for ``lvm_volumes``.
-``filestore`` objectstore variables:
-
-- ``journal``: The logical volume name or full path to a partition.
-
-- ``journal_vg``: The volume group name, **required** if ``journal`` is a logical volume.
-
.. warning:: Each entry must be unique, duplicate values are not allowed
# Any device containing these patterns in their path will be excluded.
#osd_auto_discovery_exclude: "dm-*|loop*|md*|rbd*"
-
## MDS options
#
#mds_max_mds: 1
# OS TUNING #
#############
-#disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' else true }}"
+#disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' }}"
#os_tuning_params:
# - { name: fs.file-max, value: 26234859 }
# - { name: vm.zone_reclaim_mode, value: 0 }
# Any device containing these patterns in their path will be excluded.
#osd_auto_discovery_exclude: "dm-*|loop*|md*|rbd*"
-
## MDS options
#
#mds_max_mds: 1
# OS TUNING #
#############
-#disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' else true }}"
+#disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' }}"
#os_tuning_params:
# - { name: fs.file-max, value: 26234859 }
# - { name: vm.zone_reclaim_mode, value: 0 }
run_once: true
when: delegate_facts_host | bool
- - name: fail if one osd node is using filestore
- fail:
- msg: >
- filestore OSDs are not supported with cephadm.
- Please convert them with the filestore-to-bluestore.yml playbook first.
- when:
- - osd_group_name in group_names
- - osd_objectstore == 'filestore'
-
- import_role:
name: ceph-facts
tasks_from: container_binary.yml
tasks_from: systemd.yml
when: inventory_hostname in groups.get(nfs_group_name, [])
- - import_role:
- name: ceph-osd
- tasks_from: container_options_facts.yml
- when: inventory_hostname in groups.get(osd_group_name, [])
-
- import_role:
name: ceph-osd
tasks_from: systemd.yml
default: ceph
objectstore:
description:
- - The objectstore of the OSD, (bluestore only)
+ - The objectstore of the OSD.
required: false
choices: ['bluestore']
default: bluestore
{% endif %}
{% if inventory_hostname in groups.get(osd_group_name, []) %}
-{% if osd_objectstore == 'bluestore' %}
[osd]
osd memory target = {{ _osd_memory_target | default(osd_memory_target) }}
{% endif %}
-{% endif %}
{% if inventory_hostname in groups.get(rgw_group_name, []) %}
{% set _rgw_hostname = hostvars[inventory_hostname]['rgw_hostname'] | default(hostvars[inventory_hostname]['ansible_facts']['hostname']) %}
# Any device containing these patterns in their path will be excluded.
osd_auto_discovery_exclude: "dm-*|loop*|md*|rbd*"
-
## MDS options
#
mds_max_mds: 1
# OS TUNING #
#############
-disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' else true }}"
+disable_transparent_hugepage: "{{ false if osd_objectstore == 'bluestore' }}"
os_tuning_params:
- { name: fs.file-max, value: 26234859 }
- { name: vm.zone_reclaim_mode, value: 0 }
+++ /dev/null
----
-- name: set_fact container_env_args '-e osd_bluestore=1 -e osd_filestore=0 -e osd_dmcrypt=0'
- set_fact:
- container_env_args: -e OSD_BLUESTORE=1 -e OSD_FILESTORE=0 -e OSD_DMCRYPT=0
- when:
- - osd_objectstore == 'bluestore'
- - not dmcrypt | bool
-
-- name: set_fact container_env_args '-e osd_bluestore=1 -e osd_filestore=0 -e osd_dmcrypt=1'
- set_fact:
- container_env_args: -e OSD_BLUESTORE=1 -e OSD_FILESTORE=0 -e OSD_DMCRYPT=1
- when:
- - osd_objectstore == 'bluestore'
- - dmcrypt | bool
- not rolling_update | default(False) | bool
- not switch_to_containers | default(False) | bool
-- name: include container_options_facts.yml
- include_tasks: container_options_facts.yml
- when: containerized_deployment | bool
-
- name: include_tasks scenarios/lvm.yml
include_tasks: scenarios/lvm.yml
when:
OSD_TYPE="$(echo "$CEPH_VOLUME_LIST_JSON" | $PYTHON -c "import sys, json; print(json.load(sys.stdin)['$OSD_ID'][0]['type'])")"
# Discover the objectstore
-if [[ "data journal" =~ $OSD_TYPE ]]; then
- OSD_OBJECTSTORE=(--filestore)
-elif [[ "block wal db" =~ $OSD_TYPE ]]; then
+if [[ "block wal db" =~ $OSD_TYPE ]]; then
OSD_OBJECTSTORE=(--bluestore)
else
log "Unable to discover osd objectstore for OSD type: $OSD_TYPE"
--pids-limit={{ 0 if container_binary == 'podman' else -1 }} \
--rm --net=host --privileged=true --pid=host \
--ipc=host \
-{% if osd_objectstore == 'filestore' -%}
---memory={{ ceph_osd_docker_memory_limit }} \
-{% endif -%}
--cpus={{ cpu_limit }} \
{% if ceph_osd_docker_cpuset_cpus is defined -%}
--cpuset-cpus='{{ ceph_osd_docker_cpuset_cpus }}' \
{% if ansible_facts['distribution'] == 'Ubuntu' -%}
--security-opt apparmor:unconfined \
{% endif -%}
-{{ container_env_args }} \
-e CLUSTER={{ cluster }} \
-e TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES={{ ceph_tcmalloc_max_total_thread_cache }} \
-v /run/lvm/:/run/lvm/ \
- name: validate osd_objectstore
fail:
- msg: "osd_objectstore must be either 'bluestore'"
+ msg: "osd_objectstore must be 'bluestore''"
when: osd_objectstore not in ['bluestore']
- name: validate monitor network configuration
---
-osd_objectstore: "bluestore"
lvm_volumes:
- data: data-lv1
data_vg: test_group
---
os_tuning_params:
- { name: fs.file-max, value: 26234859 }
-osd_objectstore: "bluestore"
lvm_volumes:
- data: data-lv1
data_vg: test_group
cluster_network: "192.168.40.0/24"
monitor_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
radosgw_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
-journal_size: 2048
-osd_objectstore: "bluestore"
crush_device_class: test
copy_admin_key: true
devices:
[osds]
osd0
-osd1 osd_objectstore=bluestore devices="['/dev/sda', '/dev/sdb']" dedicated_devices="['/dev/sdc']"
\ No newline at end of file
# DEFINE THE NUMBER OF VMS TO RUN
mon_vms: 1
-osd_vms: 2
+osd_vms: 1
mds_vms: 0
rgw_vms: 0
nfs_vms: 0
cluster_network: "192.168.40.0/24"
monitor_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
radosgw_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
-osd_objectstore: "bluestore"
crush_device_class: test
copy_admin_key: true
devices:
[osds]
osd0
-osd1 osd_objectstore=bluestore devices="['/dev/sda', '/dev/sdb']" dedicated_devices="['/dev/sdc']"
\ No newline at end of file
# DEFINE THE NUMBER OF VMS TO RUN
mon_vms: 1
-osd_vms: 2
+osd_vms: 1
mds_vms: 0
rgw_vms: 0
nfs_vms: 0
public_network: "192.168.33.0/24"
cluster_network: "192.168.34.0/24"
monitor_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
-journal_size: 100
copy_admin_key: true
containerized_deployment: true
# test-volume is created by tests/functional/lvm_setup.yml from /dev/sdb
mon0
[osds]
-osd0 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd1 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
-osd2 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd3 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
+osd0 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
+osd1 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
+osd2 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
+osd3 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
public_network: "192.168.39.0/24"
cluster_network: "192.168.40.0/24"
monitor_interface: "{{ 'eth1' if ansible_facts['distribution'] == 'CentOS' else 'ens6' }}"
-journal_size: 100
copy_admin_key: true
# test-volume is created by tests/functional/lvm_setup.yml from /dev/sdb
os_tuning_params:
mon0
[osds]
-osd0 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd1 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
-osd2 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd3 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
+osd0 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
+osd1 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
+osd2 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
+osd3 lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
+++ /dev/null
----
-journal_size: 100
[osds]
osd0 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
osd1 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
-osd2 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd3 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
\ No newline at end of file
# DEFINE THE NUMBER OF VMS TO RUN
mon_vms: 1
-osd_vms: 4
+osd_vms: 2
mds_vms: 0
rgw_vms: 0
nfs_vms: 0
---
os_tuning_params:
- { name: fs.file-max, value: 26234859 }
-journal_size: 100
[osds]
osd0 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
osd1 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
-osd2 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group', 'db': 'journal1', 'db_vg': 'journals'}]"
-osd3 osd_objectstore=bluestore lvm_volumes="[{'data': 'data-lv1', 'data_vg': 'test_group'},{'data': 'data-lv2', 'data_vg': 'test_group'}]" dmcrypt=true
# DEFINE THE NUMBER OF VMS TO RUN
mon_vms: 1
-osd_vms: 4
+osd_vms: 2
mds_vms: 0
rgw_vms: 0
nfs_vms: 0
# configure lvm, we exclude osd2 given this node uses lvm batch scenario (see corresponding inventory host file)
!lvm_batch-!lvm_auto_discovery: ansible-playbook -vv -i {changedir}/{env:INVENTORY} {toxinidir}/tests/functional/lvm_setup.yml --limit 'osds:!osd2'
- lvm_osds,all_in_one: ansible-playbook -vv -i {changedir}/{env:INVENTORY} {toxinidir}/tests/functional/lvm_setup.yml --limit osd2
+ lvm_osds: ansible-playbook -vv -i {changedir}/{env:INVENTORY} {toxinidir}/tests/functional/lvm_setup.yml --limit 'osd2'
+ all_in_one: ansible-playbook -vv -i {changedir}/{env:INVENTORY} {toxinidir}/tests/functional/lvm_setup.yml
rhcs: ansible-playbook -vv -i {changedir}/{env:INVENTORY} {toxinidir}/tests/functional/rhcs_setup.yml --extra-vars "ceph_docker_registry={env:CEPH_DOCKER_REGISTRY:quay.io} repo_url={env:REPO_URL:} rhel7_repo_url={env:RHEL7_REPO_URL:}" --skip-tags "vagrant_setup"