Skip to content

Commit

Permalink
daemon: Record agent's systemd service
Browse files Browse the repository at this point in the history
In coreos#2395, agent's id is
recorded in the journal. Similarly, record the systemd service that
called the client, as well.

Related to coreos#1747.
  • Loading branch information
kelvinfan001 committed Jan 15, 2021
1 parent 1f408bd commit 2e417c4
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 7 deletions.
10 changes: 9 additions & 1 deletion src/daemon/rpmostree-sysroot-upgrader.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ struct RpmOstreeSysrootUpgrader {
RpmOstreeSysrootUpgraderFlags flags;
char *command_line;
char *agent;
char *sd_unit;

OstreeDeployment *cfg_merge_deployment;
OstreeDeployment *origin_merge_deployment;
Expand Down Expand Up @@ -215,6 +216,7 @@ rpmostree_sysroot_upgrader_finalize (GObject *object)
g_free (self->osname);
g_free (self->command_line);
g_free (self->agent);
g_free (self->sd_unit);

g_clear_object (&self->cfg_merge_deployment);
g_clear_object (&self->origin_merge_deployment);
Expand Down Expand Up @@ -343,12 +345,17 @@ rpmostree_sysroot_upgrader_new (OstreeSysroot *sysroot,
}

void
rpmostree_sysroot_upgrader_set_caller_info (RpmOstreeSysrootUpgrader *self, const char *initiating_command_line, const char *agent)
rpmostree_sysroot_upgrader_set_caller_info (RpmOstreeSysrootUpgrader *self,
const char *initiating_command_line,
const char *agent,
const char *sd_unit)
{
g_free (self->command_line);
self->command_line = g_strdup (initiating_command_line);
g_free (self->agent);
self->agent = g_strdup (agent);
g_free (self->sd_unit);
self->sd_unit = g_strdup (sd_unit);
}

RpmOstreeOrigin *
Expand Down Expand Up @@ -1366,6 +1373,7 @@ write_history (RpmOstreeSysrootUpgrader *self,
"DEPLOYMENT_VERSION=%s", version ?: "",
"COMMAND_LINE=%s", self->command_line ?: "",
"AGENT=%s", self->agent ?: "",
"AGENT_SD_UNIT=%s", self->sd_unit ?: "",
NULL);

return TRUE;
Expand Down
5 changes: 4 additions & 1 deletion src/daemon/rpmostree-sysroot-upgrader.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ RpmOstreeSysrootUpgrader *rpmostree_sysroot_upgrader_new (OstreeSysroot
GCancellable *cancellable,
GError **error);

void rpmostree_sysroot_upgrader_set_caller_info (RpmOstreeSysrootUpgrader *self, const char *initiating_command_line, const char *agent);
void rpmostree_sysroot_upgrader_set_caller_info (RpmOstreeSysrootUpgrader *self,
const char *initiating_command_line,
const char *agent,
const char *sd_unit);

OstreeDeployment* rpmostree_sysroot_upgrader_get_merge_deployment (RpmOstreeSysrootUpgrader *self);

Expand Down
11 changes: 11 additions & 0 deletions src/daemon/rpmostreed-daemon.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,17 @@ rpmostreed_daemon_client_get_agent_id (RpmostreedDaemon *self, const char *clien
return g_strdup (clientdata->id);
}

/* Returns a string representing the systemd unit for @client, or %NULL if unknown */
char *
rpmostreed_daemon_client_get_sd_unit (RpmostreedDaemon *self, const char *client)
{
auto clientdata = static_cast<struct RpmOstreeClient *>(g_hash_table_lookup (self->bus_clients, client));
if (!clientdata || clientdata->sd_unit == NULL)
return NULL;
else
return g_strdup (clientdata->sd_unit);
}

void
rpmostreed_daemon_remove_client (RpmostreedDaemon *self,
const char *client)
Expand Down
2 changes: 2 additions & 0 deletions src/daemon/rpmostreed-daemon.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ char * rpmostreed_daemon_client_get_string (RpmostreedDaemon *self,
const char *client);
char * rpmostreed_daemon_client_get_agent_id (RpmostreedDaemon *self,
const char *client);
char * rpmostreed_daemon_client_get_sd_unit (RpmostreedDaemon *self,
const char *client);
void rpmostreed_daemon_exit_now (RpmostreedDaemon *self);
void rpmostreed_daemon_run_until_idle_exit (RpmostreedDaemon *self);
void rpmostreed_daemon_publish (RpmostreedDaemon *self,
Expand Down
16 changes: 12 additions & 4 deletions src/daemon/rpmostreed-transaction-types.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1342,7 +1342,9 @@ deploy_transaction_execute (RpmostreedTransaction *transaction,
return FALSE;
}

rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line, rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)));
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line,
rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)),
rpmostreed_transaction_get_sd_unit (RPMOSTREED_TRANSACTION(self)));

/* TODO - better logic for "changed" based on deployments */
if (changed || self->refspec)
Expand Down Expand Up @@ -1751,7 +1753,9 @@ initramfs_etc_transaction_execute (RpmostreedTransaction *transaction,
rpmostree_sysroot_upgrader_new (sysroot, self->osname, static_cast<RpmOstreeSysrootUpgraderFlags>(upgrader_flags), cancellable, error);
if (upgrader == NULL)
return FALSE;
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line, rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)));
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line,
rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)),
rpmostreed_transaction_get_sd_unit (RPMOSTREED_TRANSACTION(self)));

g_autoptr(RpmOstreeOrigin) origin = rpmostree_sysroot_upgrader_dup_origin (upgrader);

Expand Down Expand Up @@ -1925,7 +1929,9 @@ initramfs_state_transaction_execute (RpmostreedTransaction *transaction,

rpmostree_origin_set_regenerate_initramfs (origin, self->regenerate, self->args);
rpmostree_sysroot_upgrader_set_origin (upgrader, origin);
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line, rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)));
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line,
rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)),
rpmostreed_transaction_get_sd_unit (RPMOSTREED_TRANSACTION(self)));

if (!rpmostree_sysroot_upgrader_deploy (upgrader, NULL, cancellable, error))
return FALSE;
Expand Down Expand Up @@ -2601,7 +2607,9 @@ kernel_arg_transaction_execute (RpmostreedTransaction *transaction,
g_autoptr(RpmOstreeSysrootUpgrader) upgrader =
rpmostree_sysroot_upgrader_new (sysroot, self->osname, static_cast<RpmOstreeSysrootUpgraderFlags>(upgrader_flags),
cancellable, error);
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line, rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)));
rpmostree_sysroot_upgrader_set_caller_info (upgrader, command_line,
rpmostreed_transaction_get_agent_id (RPMOSTREED_TRANSACTION(self)),
rpmostreed_transaction_get_sd_unit (RPMOSTREED_TRANSACTION(self)));

/* We need the upgrader to perform the deployment */
if (upgrader == NULL)
Expand Down
14 changes: 13 additions & 1 deletion src/daemon/rpmostreed-transaction.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,10 @@ struct _RpmostreedTransactionPrivate {
char *sysroot_path;
OstreeSysroot *sysroot;
gboolean sysroot_locked;
/* Capture of the client description and agent at txn creation time */
/* Capture of the client description, agent, and systemd unit at txn creation time */
char *client_description;
char *agent_id;
char *sd_unit;

gboolean redirect_output;

Expand Down Expand Up @@ -507,6 +508,7 @@ transaction_finalize (GObject *object)

g_free (priv->client_description);
g_free (priv->agent_id);
g_free (priv->sd_unit);

G_OBJECT_CLASS (rpmostreed_transaction_parent_class)->finalize (object);
}
Expand Down Expand Up @@ -541,6 +543,7 @@ transaction_constructed (GObject *object)

priv->client_description = rpmostreed_daemon_client_get_string (rpmostreed_daemon_get(), sender);
priv->agent_id = rpmostreed_daemon_client_get_agent_id (rpmostreed_daemon_get(), sender);
priv->sd_unit = rpmostreed_daemon_client_get_sd_unit (rpmostreed_daemon_get(), sender);
rpmostree_transaction_set_initiating_client_description ((RPMOSTreeTransaction*)self, priv->client_description);
}
}
Expand Down Expand Up @@ -850,6 +853,15 @@ rpmostreed_transaction_get_agent_id (RpmostreedTransaction *transaction)
return priv->agent_id;
}

const char *
rpmostreed_transaction_get_sd_unit (RpmostreedTransaction *transaction)
{
g_return_val_if_fail (RPMOSTREED_IS_TRANSACTION (transaction), NULL);

RpmostreedTransactionPrivate *priv = rpmostreed_transaction_get_private (transaction);
return priv->sd_unit;
}

GDBusMethodInvocation *
rpmostreed_transaction_get_invocation (RpmostreedTransaction *transaction)
{
Expand Down
1 change: 1 addition & 0 deletions src/daemon/rpmostreed-transaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ gboolean rpmostreed_transaction_get_active (RpmostreedTransactio
OstreeSysroot * rpmostreed_transaction_get_sysroot (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_client (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_agent_id (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_sd_unit (RpmostreedTransaction *transaction);
GDBusMethodInvocation *
rpmostreed_transaction_get_invocation (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_client_address (RpmostreedTransaction *transaction);
Expand Down

0 comments on commit 2e417c4

Please sign in to comment.