-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add handlers for containerized deployment
Until now, there is no handlers for containerized deployments. Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
- Loading branch information
Showing
11 changed files
with
143 additions
and
79 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
--- | ||
# These checks are used to avoid running handlers at initial deployment. | ||
- name: check for a ceph socket | ||
shell: | | ||
{{ docker_exec_cmd }} bash -c 'stat {{ rbd_client_admin_socket_path }}/*.asok > /dev/null 2>&1' | ||
changed_when: false | ||
failed_when: false | ||
always_run: true | ||
register: socket | ||
|
||
- name: check for a ceph socket in containerized deployment (osds) | ||
shell: | | ||
docker exec ceph-osd-"{{ ansible_hostname }}"-"{{ item | replace('/', '') }}" bash -c 'stat /var/run/ceph/*.asok > /dev/null 2>&1' | ||
changed_when: false | ||
failed_when: false | ||
always_run: true | ||
register: socket_osd_container | ||
with_items: "{{ devices }}" | ||
when: | ||
- containerized_deployment | ||
- inventory_hostname in groups.get(osd_group_name) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
--- | ||
- include: facts.yml | ||
- include: check_socket.yml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#!/bin/bash | ||
|
||
RETRIES="{{ handler_health_osd_check_retries }}" | ||
DELAY="{{ handler_health_osd_check_delay }}" | ||
CEPH_CLI="--name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/{{ cluster }}.keyring --cluster {{ cluster }}" | ||
|
||
check_pgs() { | ||
while [ $RETRIES -ne 0 ]; do | ||
test "[""$($docker_exec ceph $CEPH_CLI -s -f json | python -c 'import sys, json; print(json.load(sys.stdin)["pgmap"]["num_pgs"])')""]" = "$($docker_exec ceph $CEPH_CLI -s -f json | python -c 'import sys, json; print [ i["count"] for i in json.load(sys.stdin)["pgmap"]["pgs_by_state"] if i["state_name"] == "active+clean"]')" | ||
RET=$? | ||
test $RET -eq 0 && return 0 | ||
sleep $DELAY | ||
let RETRIES=RETRIES-1 | ||
done | ||
# PGs not clean, exiting with return code 1 | ||
echo "Error while running 'ceph $CEPH_CLI -s', PGs were not reported as active+clean" | ||
echo "It is possible that the cluster has less OSDs than the replica configuration" | ||
echo "Will refuse to continue" | ||
$docker_exec ceph $CEPH_CLI -s | ||
exit 1 | ||
} | ||
|
||
wait_for_socket_in_docker() { | ||
docker exec $1 timeout 10 bash -c "while [ ! -e /var/run/ceph/*.asok ]; do sleep 1 ; done" | ||
#TODO(guits): What if socket never shows up? | ||
} | ||
|
||
get_dev_name() { | ||
local dev_name | ||
dev_name=$(echo $1 | sed -r 's/ceph-osd@([a-z]{1,4})\.service/\1/') | ||
} | ||
|
||
get_docker_id_from_dev_name() { | ||
local id | ||
local count | ||
count=10 | ||
while [ $count -ne 0 ]; do | ||
id=$(docker ps -q -f "name=$1") | ||
test "$id" != "" && break | ||
sleep 1 | ||
let count=count-1 | ||
done | ||
echo "$id" | ||
} | ||
|
||
get_docker_osd_id() { | ||
# wait_for_socket_in_docker $(get_docker_id_from_dev_name $1) | ||
# echo $(docker exec $(get_docker_id_from_dev_name $1) ls /var/run/ceph | cut -d'.' -f2) | ||
wait_for_socket_in_docker $1 | ||
echo $(docker exec $1 ls /var/run/ceph | cut -d'.' -f2) | ||
} | ||
|
||
# For containerized deployments, the unit file looks like: ceph-osd@sda.service | ||
# For non-containerized deployments, the unit file looks like: ceph-osd@0.service | ||
for unit in $(systemctl list-units | grep -oE "ceph-osd@([0-9]{1,2}|[a-z]+).service"); do | ||
# First, restart daemon(s) | ||
systemctl restart ${unit} | ||
# We need to wait because it may take some time for the socket to actually exists | ||
COUNT=10 | ||
# Wait and ensure the socket exists after restarting the daemon | ||
{% if not containerized_deployment -%} | ||
osd_id=$(echo ${unit#ceph-osd@} | grep -oE '[0-9]{1,2}') | ||
{% else %} | ||
id=$(get_dev_name $unit) | ||
container_id=$(get_docker_id_from_dev_name $id) | ||
osd_id=$(get_docker_osd_id $container_id) | ||
docker_exec="docker exec $container_id" | ||
{% endif %} | ||
SOCKET=/var/run/ceph/test-osd.${osd_id}.asok | ||
while [ $COUNT -ne 0 ]; do | ||
# $docker_exec bash -c "test -S $SOCKET" && check_pgs && continue 2 | ||
$docker_exec test -S $SOCKET && check_pgs && continue 2 | ||
sleep 1 | ||
let COUNT=COUNT-1 | ||
done | ||
# If we reach this point, it means the socket is not present. | ||
echo "Socket file ${SOCKET} could not be found, which means the osd daemon is not running." | ||
exit 1 | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters