log_error("Unable to create event data");
goto out;
}
+ epc_fill_for_unit_action(ev_data.action_data, r->action);
ret = epc_event_create(DECISION_MADE_EVENT_ID, &ev_data, &new_ev);
if (ret) {
#define EPC_AD_SERVICE_NAME "ServiceName"
#define EPC_AD_CLEANUP_UNIT "RecoveryUnit"
#define EPC_AD_UNIT_NAME "UnitName"
+#define EPC_AD_UNIT_ACTION "UnitAction"
int epc_fill_for_srv_restart(struct epc_object *obj, char *service_path);
int epc_fill_for_srv_recover(struct epc_object *obj, char *service_path, char *recovery);
int epc_fill_for_unit_start(struct epc_object *obj, char *unit_path);
+int epc_fill_for_unit_action(struct epc_object *obj, char *action);
#define epc_fill_for_reboot(o) \
epc_object_fill_empty(o)
{
"rules":[
- {"event":"vconf_key_changed", "key_name":"db/test/key3", "action":"Start", "target":"foo.service"}
+ {"event":"vconf_key_changed", "key_name":"db/test/key3", "action":"StartUnit", "target":"foo.service"}
]
}
struct epc_event *ev = pop_epc_event(&action->execution_queue);
struct decision_made_event *dm_ev = to_decision_made_event(ev);
char *unit_name = NULL;
+ char *unit_action = NULL;
int ret;
/*
return 0;
}
+ epc_object_get_string(dm_ev->action_data,
+ EPC_AD_UNIT_ACTION, &unit_action);
+ if (!unit_action) {
+ epc_object_append_string(exe_info->action_log, "error",
+ "Unit action not specified");
+ exe_info->result = -EINVAL;
+ return 0;
+ }
+
+ if (strcmp(unit_action, "StartUnit") &&
+ strcmp(unit_action, "StopUnit") &&
+ strcmp(unit_action, "RestartUnit")) {
+ epc_object_append_string(exe_info->action_log, "error",
+ "Unit action is not one of \"StartUnit\", "
+ "\"StopUnit\" or \"RestartUnit\"");
+ exe_info->result = -EINVAL;
+ return 0;
+ }
+
ret = epc_dbus_call_systemd_simple(SYSTEMD_OBJ,
SYSTEMD_MANAGER_INTERFACE,
- "StartUnit",
+ unit_action,
"ss",
unit_name,
"replace");
return 0;
}
+
+int epc_fill_for_unit_action(struct epc_object *obj, char *unit_action)
+{
+ int ret;
+
+ ret = epc_object_append_string(obj, EPC_AD_UNIT_ACTION, unit_action);
+ if (ret < 0) {
+ log_error("Unable to append %s:%s",
+ EPC_AD_UNIT_ACTION, unit_action);
+ return -ENOMEM;
+ }
+
+ return 0;
+}