Skip to content

Commit

Permalink
nanny: save restart-persistent policy on create
Browse files Browse the repository at this point in the history
  • Loading branch information
mtomaschewski committed Nov 9, 2015
1 parent a5cc2b8 commit 7c7a533
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 8 deletions.
3 changes: 2 additions & 1 deletion include/wicked/fsm.h
Expand Up @@ -292,7 +292,8 @@ extern unsigned int ni_fsm_policy_get_applicable_policies(const ni_fsm_t *, ni_
extern ni_bool_t ni_fsm_exists_applicable_policy(const ni_fsm_t *, ni_fsm_policy_t *, ni_ifworker_t *);
extern xml_node_t * ni_fsm_policy_transform_document(xml_node_t *, ni_fsm_policy_t * const *, unsigned int);
extern const char * ni_fsm_policy_name(const ni_fsm_policy_t *);
extern xml_location_t * ni_fsm_policy_location(const ni_fsm_policy_t *);
extern const xml_node_t * ni_fsm_policy_node(const ni_fsm_policy_t *);
extern const xml_location_t * ni_fsm_policy_location(const ni_fsm_policy_t *);
extern const char * ni_fsm_policy_get_origin(const ni_fsm_policy_t *);
extern ni_bool_t ni_fsm_policies_changed_since(const ni_fsm_t *, unsigned int *tstamp);

Expand Down
5 changes: 5 additions & 0 deletions nanny/nanny.c
Expand Up @@ -912,6 +912,11 @@ ni_objectmodel_nanny_create_policy(ni_dbus_object_t *object, const ni_dbus_metho
}
xml_document_free(doc);

if (!ni_objectmodel_managed_policy_save(policy_object)) {
ni_warn("Unable to save created managed nanny policy %s",
ni_dbus_object_get_path(policy_object));
}

return ni_dbus_message_append_object_path(reply, ni_dbus_object_get_path(policy_object));
}

Expand Down
1 change: 1 addition & 0 deletions nanny/nanny.h
Expand Up @@ -160,6 +160,7 @@ extern const char * ni_managed_state_to_string(ni_managed_state_t);
extern ni_dbus_object_t * ni_objectmodel_register_managed_netdev(ni_dbus_server_t *, ni_managed_device_t *);
extern ni_dbus_object_t * ni_objectmodel_register_managed_modem(ni_dbus_server_t *, ni_managed_device_t *);
extern ni_dbus_object_t * ni_objectmodel_register_managed_policy(ni_dbus_server_t *, ni_managed_policy_t *);
extern ni_bool_t ni_objectmodel_managed_policy_save(ni_dbus_object_t *);
extern dbus_bool_t ni_objectmodel_unregister_managed_policy(ni_dbus_server_t *, ni_managed_policy_t *, const char*);
extern void ni_objectmodel_unregister_managed_device(ni_managed_device_t *);

Expand Down
35 changes: 33 additions & 2 deletions nanny/policy.c
Expand Up @@ -45,7 +45,7 @@ ni_managed_policy_filename(const char *name, char *path, size_t size)
}

static ni_bool_t
ni_managed_policy_save(xml_node_t *pnode)
ni_managed_policy_save_node(const xml_node_t *pnode)
{
char path[PATH_MAX] = {'\0'};
char temp[PATH_MAX] = {'\0'};
Expand Down Expand Up @@ -96,6 +96,18 @@ ni_managed_policy_save(xml_node_t *pnode)
return FALSE;
}

static ni_bool_t
ni_managed_policy_save(const ni_managed_policy_t *mpolicy)
{
const xml_node_t *node;

if (!mpolicy)
return FALSE;

node = ni_fsm_policy_node(mpolicy->fsm_policy);
return ni_managed_policy_save_node(node);
}

void
ni_objectmodel_managed_policy_init(ni_dbus_server_t *server)
{
Expand Down Expand Up @@ -179,6 +191,21 @@ ni_objectmodel_managed_policy_unwrap(const ni_dbus_object_t *object, DBusError *
return NULL;
}

/*
* Save managed_policy data from dbus object
*/
ni_bool_t
ni_objectmodel_managed_policy_save(ni_dbus_object_t *object)
{
ni_managed_policy_t *mpolicy;

if (!object)
return FALSE;

mpolicy = ni_objectmodel_managed_policy_unwrap(object, NULL);
return ni_managed_policy_save(mpolicy);
}

/*
* ManagedPolicy.update(s)
*/
Expand Down Expand Up @@ -234,7 +261,11 @@ ni_objectmodel_managed_policy_update(ni_dbus_object_t *object, const ni_dbus_met
mpolicy->owner = caller_uid;
mpolicy->seqno++;

ni_managed_policy_save(node);
if (!ni_managed_policy_save(mpolicy)) {
ni_warn("Unable to save updated managed nanny policy %s",
ni_dbus_object_get_path(object));
}

return TRUE;
}

Expand Down
8 changes: 4 additions & 4 deletions src/client/ifconfig.h
Expand Up @@ -89,27 +89,27 @@ ni_ifconfig_is_config(xml_node_t *ifnode)
}

static inline ni_bool_t
ni_ifconfig_is_policy(xml_node_t *pnode)
ni_ifconfig_is_policy(const xml_node_t *pnode)
{
return !xml_node_is_empty(pnode) &&
(ni_string_eq(pnode->name, NI_NANNY_IFPOLICY) ||
ni_string_eq(pnode->name, NI_NANNY_IFTEMPLATE));
}

static inline const char *
ni_ifpolicy_get_origin(xml_node_t *pnode)
ni_ifpolicy_get_origin(const xml_node_t *pnode)
{
return xml_node_get_attr(pnode, NI_NANNY_IFPOLICY_ORIGIN);
}

static inline const char *
ni_ifpolicy_get_name(xml_node_t *pnode)
ni_ifpolicy_get_name(const xml_node_t *pnode)
{
return xml_node_get_attr(pnode, NI_NANNY_IFPOLICY_NAME);
}

static inline ni_bool_t
ni_ifpolicy_is_valid(xml_node_t *pnode)
ni_ifpolicy_is_valid(const xml_node_t *pnode)
{
if (!ni_ifconfig_is_policy(pnode))
return FALSE;
Expand Down
11 changes: 10 additions & 1 deletion src/fsm-policy.c
Expand Up @@ -359,10 +359,19 @@ ni_fsm_policy_name(const ni_fsm_policy_t *policy)
return policy->name;
}

/*
* Get the policy xml node
*/
const xml_node_t *
ni_fsm_policy_node(const ni_fsm_policy_t *policy)
{
return policy ? policy->node : NULL;
}

/*
* Get the policy's location (if set)
*/
xml_location_t *
const xml_location_t *
ni_fsm_policy_location(const ni_fsm_policy_t *policy)
{
if (!policy || !policy->node)
Expand Down

0 comments on commit 7c7a533

Please sign in to comment.