]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
osd: container use id instead of dev name
authorSébastien Han <seb@redhat.com>
Wed, 27 Sep 2017 22:17:12 +0000 (00:17 +0200)
committerSébastien Han <seb@redhat.com>
Tue, 3 Oct 2017 12:44:00 +0000 (14:44 +0200)
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1494127
Signed-off-by: Sébastien Han <seb@redhat.com>
12 files changed:
infrastructure-playbooks/purge-docker-cluster.yml
roles/ceph-defaults/tasks/check_socket.yml
roles/ceph-defaults/tasks/facts.yml
roles/ceph-osd/tasks/check_devices.yml
roles/ceph-osd/tasks/check_devices_static.yml
roles/ceph-osd/tasks/docker/start_docker_osd.yml
roles/ceph-osd/tasks/main.yml
roles/ceph-osd/tasks/scenarios/collocated.yml
roles/ceph-osd/tasks/scenarios/non-collocated.yml
roles/ceph-osd/templates/ceph-osd-run.sh.j2
roles/ceph-osd/templates/ceph-osd.service.j2
tests/conftest.py

index aa4769e53656ce2f8445510b25095212f86b688c..512860377c0ecca643301d71e20b813458590aee 100644 (file)
     with_items: "{{ devices }}"
     ignore_errors: true
 
+  - name: resolve device link
+    command: readlink -f {{ item }}
+    changed_when: false
+    with_items: "{{ devices }}"
+    register: purge_devices_links
+
+  - name: set_fact devices generate device list when osd_auto_discovery
+    set_fact:
+      devices: "{{ devices | default([]) + [ item.stdout ] }}"
+    with_items: "{{ purge_devices_links.results }}"
+
   - name: remove ceph osd prepare container
     docker:
       image: "{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
-      name: "ceph-osd-prepare-{{ ansible_hostname }}-dev{{ item | regex_replace('/', '') }}"
+      name: "ceph-osd-prepare-{{ ansible_hostname }}{{ item | regex_replace('/dev/', '') }}"
       state: absent
     with_items: "{{ devices }}"
     ignore_errors: true
   - name: remove ceph osd container
     docker:
       image: "{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
-      name: "ceph-osd-{{ ansible_hostname }}-dev{{ item | regex_replace('/', '') }}"
+      name: "ceph-osd-{{ ansible_hostname }}-{{ item | regex_replace('/dev/', '') }}"
       state: absent
     with_items: "{{ devices }}"
     ignore_errors: true
     shell: |
       docker run \
       --privileged=true \
-      --name ceph-osd-zap-{{ ansible_hostname }}-dev{{ item | regex_replace('/', '') }} \
+      --name ceph-osd-zap-{{ ansible_hostname }}-{{ item | regex_replace('/dev/', '') }} \
       -v /dev/:/dev/ \
       -e OSD_DEVICE={{ item }} \
       {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} \
 
   - name: wait until the zap containers die
     shell: |
-      docker ps | grep -sq ceph-osd-zap-{{ ansible_hostname }}-dev
+      docker ps | grep -sq ceph-osd-zap-{{ ansible_hostname }}
     register: zap_alive
     failed_when: false
     until: zap_alive.rc != 0
   - name: remove ceph osd zap disk container
     docker:
       image: "{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
-      name: "ceph-osd-zap-{{ ansible_hostname }}-dev{{ item | regex_replace('/', '') }}"
+      name: "ceph-osd-zap-{{ ansible_hostname }}-{{ item | regex_replace('/dev/', '') }}"
       state: absent
     with_items:
       - "{{ devices }}"
index 70ed0e4336ad5450cc9c21283fbb9bb7bcc58c7d..2b3f2c051fcbd38fcc67e2b763573f2c685cf654 100644 (file)
 
 - name: check for a ceph socket in containerized deployment (osds)
   shell: |
-    docker exec ceph-osd-"{{ ansible_hostname }}"-"{{ item | replace('/', '') }}" bash -c 'stat --printf=%n /var/run/ceph/*.asok'
+    docker exec ceph-osd-"{{ ansible_hostname }}"-"{{ item | replace('/dev/', '') }}" bash -c 'stat --printf=%n /var/run/ceph/*.asok'
   changed_when: false
   failed_when: false
   always_run: true
index 8dcad149b3b64c28d64079dc99050aca3c2868ef..fe0f55b910bc37770aaaa857d157ac05d3ae4636 100644 (file)
   when:
     - rbd_client_directory_mode is not defined
       or not rbd_client_directory_mode
+
+- name: resolve device link(s)
+  command: readlink -f {{ item }}
+  changed_when: false
+  with_items: "{{ devices }}"
+  register: devices_prepare_canonicalize
+  when:
+    - inventory_hostname in groups.get(osd_group_name, [])
+
+- name: set_fact build devices from resolved symlinks
+  set_fact:
+    devices: "{{ devices | default([]) + [ item.stdout ] }}"
+  with_items: "{{ devices_prepare_canonicalize.results }}"
+  when:
+    - inventory_hostname in groups.get(osd_group_name, [])
+
+- name: set_fact build final devices list
+  set_fact:
+    devices: "{{ devices | reject('search','/dev/disk') | list | unique }}"
+  when:
+    - inventory_hostname in groups.get(osd_group_name, [])
index c03222fa440fdbb66dc44eda719029d099e040e0..b96c646708982f6a1fd920f6c9a7fb74a2aa697e 100644 (file)
 # allow 2-digit partition numbers so fast SSDs can be shared by > 9 disks
 # for SSD journals.
 
+- name: resolve dedicated device link(s)
+  command: readlink -f {{ item }}
+  changed_when: false
+  with_items: "{{ dedicated_devices }}"
+  register: dedicated_devices_prepare_canonicalize
+  when:
+    - osd_scenario == 'non-collocated'
+
+- name: set_fact build dedicated_devices from resolved symlinks
+  set_fact:
+    dedicated_devices: "{{ dedicated_devices | default([]) + [ item.stdout ] }}"
+  with_items: "{{ dedicated_devices_prepare_canonicalize.results }}"
+  when:
+    - osd_scenario == 'non-collocated'
+
+- name: set_fact build final dedicated_devices list
+  set_fact:
+    dedicated_devices: "{{ dedicated_devices | reject('search','/dev/disk') | list | unique }}"
+  when:
+    - osd_scenario == 'non-collocated'
+
 - name: include check_devices_static.yml
   include: check_devices_static.yml
   # Hard code this so we will skip the entire file instead of individual tasks (Default isn't Consistent)
     - "{{ dedicated_devices|unique }}"
   changed_when: false
   when:
+    - not containerized_deployment
+    - osd_scenario == 'non-collocated'
     - not item.0.get("skipped")
     - item.0.get("rc", 0) != 0
-    - osd_scenario == 'non-collocated'
-    - not containerized_deployment
 
 - name: create gpt disk label of the journal device(s)
   command: parted --script {{ item.1 }} mklabel gpt
@@ -45,7 +66,7 @@
     - "{{ dedicated_devices|unique }}"
   changed_when: false
   when:
+    - containerized_deployment
+    - osd_scenario == 'non-collocated'
     - not item.0.get("skipped")
     - item.0.get("rc", 0) != 0
-    - osd_scenario == 'non-collocated'
-    - containerized_deployment
index eb1d12ff3beeaee2a43ea947820ac0da7e09f07a..3a4ca79349d7cb4b8dfb6946815ae18944b76f95 100644 (file)
     - not item.0.get("skipped")
     - item.0.get("rc", 0) != 0
     - containerized_deployment
-
-- name: check if a partition named 'ceph' exists
-  shell: "parted --script {{ item }} print | egrep -sq '^ 1.*ceph'"
-  with_items:
-    - "{{ devices }}"
-  changed_when: false
-  failed_when: false
-  always_run: true
-  register: parted_results
index ecafcd92648d302cbffa1f57c3d5863b8e2c0aca..fce8a7fbccd11809ce247f7104e79d93c71aa1b3 100644 (file)
@@ -30,7 +30,7 @@
 
 - name: systemd start osd container
   systemd:
-    name: ceph-osd@{{ item | basename }}
+    name: ceph-osd@{{ item | regex_replace('/dev/', '') }}
     state: started
     enabled: yes
     daemon_reload: yes
index 3a9e807fe97290767b0d6a8fb14fad6a0d89cf0a..d405cb75f4e56717577997f61768c05ae7ee53b8 100644 (file)
     devices: "{{ devices | default([]) + [ item.key | regex_replace('^', '/dev/') ] }}"
   with_dict: "{{ ansible_devices }}"
   when:
+    - osd_auto_discovery
     - ansible_devices is defined
     - item.value.removable == "0"
     - item.value.partitions|count == 0
     - item.value.holders|count == 0
-    - osd_auto_discovery
 
 - name: include check_devices.yml
   include: check_devices.yml
+  when:
+    - not osd_auto_discovery
+
+- name: check if a partition named 'ceph' exists
+  shell: "parted --script {{ item }} print | egrep -sq '^ 1.*ceph'"
+  with_items:
+    - "{{ devices }}"
+  changed_when: false
+  failed_when: false
+  always_run: true
+  register: parted_results
 
 - name: include copy_configs.yml
   include: copy_configs.yml
@@ -42,6 +53,7 @@
 - name: include scenarios/non-collocated.yml
   include: scenarios/non-collocated.yml
   when:
+    - not osd_auto_discovery
     - osd_scenario == 'non-collocated'
   # Hard code this so we will skip the entire file instead of individual tasks (Default isn't Consistent)
   static: False
index 1af1a8d26c56c6a154de80d9db8ff12113bd4564..a9b84baa02f8516a28fec5f58db5b2763ff9f113 100644 (file)
@@ -7,7 +7,7 @@
     docker run --net=host \
     --pid=host \
     --privileged=true \
-    --name=ceph-osd-prepare-{{ ansible_hostname }}-dev{{ item.1 | regex_replace('/', '') }} \
+    --name=ceph-osd-prepare-{{ ansible_hostname }}-{{ item.1 | regex_replace('/dev/', '') }} \
     -v /etc/ceph:/etc/ceph \
     -v /var/lib/ceph/:/var/lib/ceph/ \
     -v /dev:/dev \
     - "{{ parted_results.results | default([]) }}"
     - "{{ devices }}"
   when:
-    - not item.0.get("skipped")
-    - item.0.get("rc", 0) != 0
     - not osd_auto_discovery
     - containerized_deployment
+    - not item.0.get("skipped")
+    - item.0.get("rc", 0) != 0
 
 - name: automatic prepare ceph containerized osd disk collocated
   shell: |
     docker run --net=host \
     --pid=host \
     --privileged=true \
-    --name=ceph-osd-prepare-{{ ansible_hostname }}-devdev{{ item.key }} \
+    --name=ceph-osd-prepare-{{ ansible_hostname }}-{{ item.key }} \
     -v /etc/ceph:/etc/ceph \
     -v /var/lib/ceph/:/var/lib/ceph/ \
     -v /dev:/dev \
     {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}
   with_dict: "{{ ansible_devices }}"
   when:
+    - osd_auto_discovery
+    - containerized_deployment
     - ansible_devices is defined
     - item.value.removable == "0"
     - item.value.partitions|count == 0
     - item.value.holders|count == 0
-    - osd_auto_discovery
-    - containerized_deployment
 
 - name: manually prepare ceph "{{ osd_objectstore }}" non-containerized osd disk(s) with collocated osd data and journal
   command: "ceph-disk prepare {{ ceph_disk_cli_options }} {{ item.1 }}"
@@ -58,6 +58,6 @@
     - "{{ parted_results.results | default([]) }}"
     - "{{ devices }}"
   when:
+    - not containerized_deployment
     - not item.0.get("skipped")
     - item.0.get("rc", 0) != 0
-    - not containerized_deployment
index fbd479769d280f446c311b15b42a866616168ad4..22a8e0e7225d06373276947595125851ed525dda 100644 (file)
@@ -7,7 +7,7 @@
     docker run --net=host \
     --pid=host \
     --privileged=true \
-    --name=ceph-osd-prepare-{{ ansible_hostname }}-dev{{ item.1 | regex_replace('/', '') }} \
+    --name=ceph-osd-prepare-{{ ansible_hostname }}-{{ item.1 | regex_replace('/dev/', '') }} \
     -v /etc/ceph:/etc/ceph \
     -v /var/lib/ceph/:/var/lib/ceph/ \
     -v /dev:/dev \
     - "{{ devices }}"
     - "{{ dedicated_devices }}"
   when:
-    - not item.0.get("skipped")
-    - item.0.get("rc", 0) != 0
-    - not osd_auto_discovery
     - containerized_deployment
     - osd_objectstore == 'filestore'
+    - not item.0.get("skipped")
+    - item.0.get("rc", 0) != 0
 
 - name: prepare ceph "{{ osd_objectstore }}" containerized osd disk(s) non-collocated with a dedicated device for db and wal
   shell: |
     docker run --net=host \
     --pid=host \
     --privileged=true \
-    --name=ceph-osd-prepare-{{ ansible_hostname }}-dev{{ item.1 | regex_replace('/', '') }} \
+    --name=ceph-osd-prepare-{{ ansible_hostname }}-{{ item.1 | regex_replace('/dev/', '') }} \
     -v /etc/ceph:/etc/ceph \
     -v /var/lib/ceph/:/var/lib/ceph/ \
     -v /dev:/dev \
     - "{{ dedicated_devices }}"
     - "{{ bluestore_wal_devices }}"
   when:
-    - not item.0.get("skipped")
-    - item.0.get("rc", 0) != 0
-    - not osd_auto_discovery
     - containerized_deployment
     - osd_objectstore == 'bluestore'
+    - not item.0.get("skipped")
+    - item.0.get("rc", 0) != 0
 
 - name: prepare ceph "{{ osd_objectstore }}" non-containerized osd disk(s) non-collocated
   command: "ceph-disk prepare {{ ceph_disk_cli_options }} {{ item.1 }} {{ item.2 }}"
     - "{{ dedicated_devices }}"
   changed_when: false
   when:
-    - not item.0.get("skipped")
-    - item.0.get("rc", 0) != 0
     - osd_objectstore == 'filestore'
     - not containerized_deployment
+    - not item.0.get("skipped")
+    - item.0.get("rc", 0) != 0
 
 - name: manually prepare ceph "{{ osd_objectstore }}" non-containerized osd disk(s) with a dedicated device for db and wal
   command: "ceph-disk prepare {{ ceph_disk_cli_options }} --block.db {{ item.1 }} --block.wal {{ item.2 }} {{ item.3 }}"
@@ -79,9 +77,9 @@
     - "{{ parted_results.results | default([]) }}"
     - "{{ dedicated_devices }}"
     - "{{ bluestore_wal_devices }}"
-    - "{{ devices }}"
+    - "{{ devices | unique }}"
   when:
-    - not item.0.get("skipped")
-    - item.0.get("rc", 0) != 0
     - osd_objectstore == 'bluestore'
     - not containerized_deployment
+    - not item.0.get("skipped")
+    - item.0.get("rc", 0) != 0
index e1dd77601375c2031bfcc1e12f8762a1ad53d2aa..bd854ae0a87221a340e7e76405506aca24926136 100644 (file)
@@ -64,5 +64,5 @@ expose_partitions "$1"
   -e OSD_DEVICE=/dev/${1} \
   -e CEPH_DAEMON=OSD_CEPH_DISK_ACTIVATE \
   {{ ceph_osd_docker_extra_env }} \
-  --name=ceph-osd-{{ ansible_hostname }}-dev${1} \
+  --name=ceph-osd-{{ ansible_hostname }}-${1} \
   {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}
index c0a4f402b85af726beec7df1cde6625e7b666c98..0e7dae3f033a38bfe6484c6fa1a84220c909559f 100644 (file)
@@ -5,10 +5,10 @@ After=docker.service
 
 [Service]
 EnvironmentFile=-/etc/environment
-ExecStartPre=-/usr/bin/docker stop ceph-osd-{{ ansible_hostname }}-dev%i
-ExecStartPre=-/usr/bin/docker rm -f ceph-osd-{{ ansible_hostname }}-dev%i
+ExecStartPre=-/usr/bin/docker stop ceph-osd-{{ ansible_hostname }}-%i
+ExecStartPre=-/usr/bin/docker rm -f ceph-osd-{{ ansible_hostname }}-%i
 ExecStart={{ ceph_osd_docker_run_script_path }}/ceph-osd-run.sh %i
-ExecStop=-/usr/bin/docker stop ceph-osd-{{ ansible_hostname }}-dev%i
+ExecStop=-/usr/bin/docker stop ceph-osd-{{ ansible_hostname }}-%i
 Restart=always
 RestartSec=10s
 TimeoutStartSec=120
index 5a4b5b51beed37a418ebdbbde3434e71f931e9e3..851bf075843aa668bbdb175ad148f14adbba8138 100644 (file)
@@ -16,7 +16,7 @@ def node(host, request):
     # tox will pass in this environment variable. we need to do it this way
     # because testinfra does not collect and provide ansible config passed in
     # from using --extra-vars
-    ceph_stable_release = os.environ.get("CEPH_STABLE_RELEASE", "kraken")
+    ceph_stable_release = os.environ.get("CEPH_STABLE_RELEASE", "luminous")
     node_type = ansible_vars["group_names"][0]
     docker = ansible_vars.get("docker")
     osd_auto_discovery = ansible_vars.get("osd_auto_discovery")