From 5c25d7cae4de3d66792d90178c8b1f57a9cddf12 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Fri, 31 Mar 2017 11:41:52 +1100 Subject: [PATCH] PE: Containers: Allow custom docker run commands --- lib/pengine/container.c | 18 +++++++++++------- lib/pengine/variant.h | 1 + xml/resources-2.8.rng | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/pengine/container.c b/lib/pengine/container.c index ed63b80..388dd88 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -222,6 +209,12 @@ create_docker_resource( offset += snprintf(buffer+offset, max-offset, " --net=%s", data->docker_network); } + if(data->control_port) { + offset += snprintf(buffer+offset, max-offset, " -e PCMK_remote_port=%s", data->control_port); + } else { + offset += snprintf(buffer+offset, max-offset, " -e PCMK_remote_port=%d", DEFAULT_REMOTE_PORT); + } + for(GListPtr pIter = data->mounts; pIter != NULL; pIter = pIter->next) { container_mount_t *mount = pIter->data; @@ -276,15 +263,11 @@ create_docker_resource( free(dbuffer); if(tuple->child) { - char *command = NULL; - - if(data->control_port) { - command = crm_strdup_printf(SBIN_DIR"/pacemaker_remoted -p %s", data->control_port); + if(data->docker_run_command) { + create_nvp(xml_obj, "run_cmd", data->docker_run_command); } else { - command = crm_strdup_printf(SBIN_DIR"/pacemaker_remoted -p %d", DEFAULT_REMOTE_PORT); + create_nvp(xml_obj, "run_cmd", SBIN_DIR"/pacemaker_remoted"); } - create_nvp(xml_obj, "run_cmd", command); - free(command); /* TODO: Allow users to specify their own? * @@ -486,6 +470,7 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set) clear_bit(rsc->flags, pe_rsc_unique); } + container_data->docker_run_command = crm_element_value_copy(xml_obj, "run-command"); container_data->docker_run_options = crm_element_value_copy(xml_obj, "options"); container_data->image = crm_element_value_copy(xml_obj, "image"); container_data->docker_network = crm_element_value_copy(xml_obj, "network"); @@ -886,6 +863,7 @@ container_free(resource_t * rsc) free(container_data->ip_range_start); free(container_data->docker_network); free(container_data->docker_run_options); + free(container_data->docker_run_command); free(container_data->docker_host_options); g_list_free_full(container_data->tuples, (GDestroyNotify)tuple_free); diff --git a/lib/pengine/variant.h b/lib/pengine/variant.h index aa2a1b7..c8fe159 100644 --- a/lib/pengine/variant.h +++ b/lib/pengine/variant.h @@ -99,6 +99,7 @@ typedef struct container_variant_data_s { char *ip_range_start; char *docker_host_options; char *docker_run_options; + char *docker_run_command; resource_t *child; diff --git a/xml/resources-2.8.rng b/xml/resources-2.8.rng index 870e804..5c83e07 100644 --- a/xml/resources-2.8.rng +++ b/xml/resources-2.8.rng @@ -84,6 +84,9 @@ + + + -- 1.8.3.1