| 147 | } |
| 148 | |
| 149 | static async_command_t *create_async_command(xmlNode *msg) |
| 150 | { |
| 151 | async_command_t *cmd = NULL; |
| 152 | xmlNode *op = get_xpath_object("//@"F_STONITH_ACTION, msg, LOG_ERR); |
| 153 | const char *action = crm_element_value(op, F_STONITH_ACTION); |
| 154 | |
| 155 | CRM_CHECK(action != NULL, crm_log_xml_warn(msg, "NoAction"); return NULL); |
| 156 | |
| 157 | crm_log_xml_trace(msg, "Command"); |
| 158 | cmd = calloc(1, sizeof(async_command_t)); |
| 159 | crm_element_value_int(msg, F_STONITH_CALLID, &(cmd->id)); |
| 160 | crm_element_value_int(msg, F_STONITH_CALLOPTS, &(cmd->options)); |
| 161 | crm_element_value_int(msg, F_STONITH_TIMEOUT, &(cmd->default_timeout)); |
| 162 | cmd->timeout = cmd->default_timeout; |
| 163 | |
| 164 | cmd->origin = crm_element_value_copy(msg, F_ORIG); |
| 165 | cmd->remote_op_id = crm_element_value_copy(msg, F_STONITH_REMOTE_OP_ID); |
| 166 | cmd->client = crm_element_value_copy(msg, F_STONITH_CLIENTID); |
| 167 | cmd->client_name = crm_element_value_copy(msg, F_STONITH_CLIENTNAME); |
| 168 | cmd->op = crm_element_value_copy(msg, F_STONITH_OPERATION); |
| 169 | cmd->action = strdup(action); |
| 170 | cmd->victim = crm_element_value_copy(op, F_STONITH_TARGET); |
| 171 | cmd->mode = crm_element_value_copy(op, F_STONITH_MODE); |
| 172 | cmd->device = crm_element_value_copy(op, F_STONITH_DEVICE); |
| 173 | |
| 174 | CRM_CHECK(cmd->op != NULL, crm_log_xml_warn(msg, "NoOp"); free_async_command(cmd); return NULL); |
| 175 | CRM_CHECK(cmd->client != NULL, crm_log_xml_warn(msg, "NoClient")); |
| 176 | |
| 177 | cmd->done_cb = st_child_done; |
| 178 | cmd_list = g_list_append(cmd_list, cmd); |
| 179 | return cmd; |
| 180 | } |
| 181 | |
| 182 | static int stonith_manual_ack(xmlNode *msg, remote_fencing_op_t *op) |
| 183 | { |
no test coverage detected