Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

daemon: Record the agent ID in the journal #2395

Merged
merged 1 commit into from
Dec 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions src/daemon/rpmostree-sysroot-upgrader.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ struct RpmOstreeSysrootUpgrader {
char *osname;
RpmOstreeSysrootUpgraderFlags flags;
char *command_line;
char *agent;

OstreeDeployment *cfg_merge_deployment;
OstreeDeployment *origin_merge_deployment;
Expand Down Expand Up @@ -211,6 +212,7 @@ rpmostree_sysroot_upgrader_finalize (GObject *object)
g_clear_object (&self->repo);
g_free (self->osname);
g_free (self->command_line);
g_free (self->agent);

g_clear_object (&self->cfg_merge_deployment);
g_clear_object (&self->origin_merge_deployment);
Expand Down Expand Up @@ -338,6 +340,15 @@ rpmostree_sysroot_upgrader_new (OstreeSysroot *sysroot,
"sysroot", sysroot, "osname", osname, "flags", flags, NULL);
}

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

RpmOstreeOrigin *
rpmostree_sysroot_upgrader_dup_origin (RpmOstreeSysrootUpgrader *self)
{
Expand Down Expand Up @@ -1298,7 +1309,6 @@ rpmostree_sysroot_upgrader_set_kargs (RpmOstreeSysrootUpgrader *self,
static gboolean
write_history (RpmOstreeSysrootUpgrader *self,
OstreeDeployment *new_deployment,
const char *initiating_command_line,
GCancellable *cancellable,
GError **error)
{
Expand Down Expand Up @@ -1355,7 +1365,8 @@ write_history (RpmOstreeSysrootUpgrader *self,
/* we could use iovecs here and sd_journal_sendv to make these truly
* conditional, but meh, empty field works fine too */
"DEPLOYMENT_VERSION=%s", version ?: "",
"COMMAND_LINE=%s", initiating_command_line ?: "",
"COMMAND_LINE=%s", self->command_line ?: "",
"AGENT=%s", self->agent ?: "",
NULL);

return TRUE;
Expand All @@ -1374,7 +1385,6 @@ write_history (RpmOstreeSysrootUpgrader *self,
*/
gboolean
rpmostree_sysroot_upgrader_deploy (RpmOstreeSysrootUpgrader *self,
const char *initiating_command_line,
OstreeDeployment **out_deployment,
GCancellable *cancellable,
GError **error)
Expand Down Expand Up @@ -1484,7 +1494,7 @@ rpmostree_sysroot_upgrader_deploy (RpmOstreeSysrootUpgrader *self,
return FALSE;
}

if (!write_history (self, new_deployment, initiating_command_line, cancellable, error))
if (!write_history (self, new_deployment, cancellable, error))
return FALSE;

/* Also do a sanitycheck even if there's no local mutation; it's basically free
Expand Down
3 changes: 2 additions & 1 deletion src/daemon/rpmostree-sysroot-upgrader.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ 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);

OstreeDeployment* rpmostree_sysroot_upgrader_get_merge_deployment (RpmOstreeSysrootUpgrader *self);

RpmOstreeOrigin *
Expand Down Expand Up @@ -128,7 +130,6 @@ rpmostree_sysroot_upgrader_pull_repos (RpmOstreeSysrootUpgrader *self,

gboolean
rpmostree_sysroot_upgrader_deploy (RpmOstreeSysrootUpgrader *self,
const char *initiating_command_line,
OstreeDeployment **out_deployment,
GCancellable *cancellable,
GError **error);
Expand Down
11 changes: 11 additions & 0 deletions src/daemon/rpmostreed-daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,17 @@ rpmostreed_daemon_client_get_string (RpmostreedDaemon *self, const char *client)
return rpmostree_client_to_string (clientdata);
}

/* Returns the caller's agent ID string; may be NULL if it's unset or the default */
char *
rpmostreed_daemon_client_get_agent_id (RpmostreedDaemon *self, const char *client)
{
struct RpmOstreeClient *clientdata = g_hash_table_lookup (self->bus_clients, client);
if (!clientdata || clientdata->id == NULL || g_str_equal (clientdata->id, "cli"))
return NULL;
else
return g_strdup (clientdata->id);
}

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 @@ -42,6 +42,8 @@ void rpmostreed_daemon_remove_client (RpmostreedDaemon *self,
const char *client);
char * rpmostreed_daemon_client_get_string (RpmostreedDaemon *self,
const char *client);
char * rpmostreed_daemon_client_get_agent_id (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
13 changes: 9 additions & 4 deletions src/daemon/rpmostreed-transaction-types.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1344,6 +1344,8 @@ deploy_transaction_execute (RpmostreedTransaction *transaction,
return FALSE;
}

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

/* TODO - better logic for "changed" based on deployments */
if (changed || self->refspec)
{
Expand All @@ -1359,7 +1361,7 @@ deploy_transaction_execute (RpmostreedTransaction *transaction,
}

g_autoptr(OstreeDeployment) new_deployment = NULL;
if (!rpmostree_sysroot_upgrader_deploy (upgrader, command_line, &new_deployment,
if (!rpmostree_sysroot_upgrader_deploy (upgrader, &new_deployment,
cancellable, error))
return FALSE;

Expand Down Expand Up @@ -1751,6 +1753,7 @@ 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)));

g_autoptr(RpmOstreeOrigin) origin = rpmostree_sysroot_upgrader_dup_origin (upgrader);

Expand Down Expand Up @@ -1790,7 +1793,7 @@ initramfs_etc_transaction_execute (RpmostreedTransaction *transaction,
}

rpmostree_sysroot_upgrader_set_origin (upgrader, origin);
if (!rpmostree_sysroot_upgrader_deploy (upgrader, command_line, NULL, cancellable, error))
if (!rpmostree_sysroot_upgrader_deploy (upgrader, NULL, cancellable, error))
return FALSE;

if (vardict_lookup_bool (self->options, "reboot", FALSE))
Expand Down Expand Up @@ -1924,8 +1927,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)));

if (!rpmostree_sysroot_upgrader_deploy (upgrader, command_line, NULL, cancellable, error))
if (!rpmostree_sysroot_upgrader_deploy (upgrader, NULL, cancellable, error))
return FALSE;

if (vardict_lookup_bool (self->options, "reboot", FALSE))
Expand Down Expand Up @@ -2599,6 +2603,7 @@ 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)));

/* We need the upgrader to perform the deployment */
if (upgrader == NULL)
Expand Down Expand Up @@ -2634,7 +2639,7 @@ kernel_arg_transaction_execute (RpmostreedTransaction *transaction,
g_auto(GStrv) kargs_strv = ostree_kernel_args_to_strv (kargs);
rpmostree_sysroot_upgrader_set_kargs (upgrader, kargs_strv);

if (!rpmostree_sysroot_upgrader_deploy (upgrader, command_line, NULL, cancellable, error))
if (!rpmostree_sysroot_upgrader_deploy (upgrader, NULL, cancellable, error))
return FALSE;

if (vardict_lookup_bool (self->options, "reboot", FALSE))
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,8 +41,9 @@ struct _RpmostreedTransactionPrivate {
char *sysroot_path;
OstreeSysroot *sysroot;
gboolean sysroot_locked;
/* Capture of the client description at txn creation time */
/* Capture of the client description and agent at txn creation time */
char *client_description;
char *agent_id;

gboolean redirect_output;

Expand Down Expand Up @@ -505,6 +506,7 @@ transaction_finalize (GObject *object)
g_hash_table_destroy (priv->peer_connections);

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

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

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);
rpmostree_transaction_set_initiating_client_description ((RPMOSTreeTransaction*)self, priv->client_description);
}
}
Expand Down Expand Up @@ -838,6 +841,15 @@ rpmostreed_transaction_get_client (RpmostreedTransaction *transaction)
return priv->client_description;
}

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

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

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 @@ -48,6 +48,7 @@ GType rpmostreed_transaction_get_type (void) G_GNUC_CONST;
gboolean rpmostreed_transaction_get_active (RpmostreedTransaction *transaction);
OstreeSysroot * rpmostreed_transaction_get_sysroot (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_client (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_agent_id (RpmostreedTransaction *transaction);
GDBusMethodInvocation *
rpmostreed_transaction_get_invocation (RpmostreedTransaction *transaction);
const char * rpmostreed_transaction_get_client_address (RpmostreedTransaction *transaction);
Expand Down
6 changes: 5 additions & 1 deletion tests/vmcheck/test-misc-2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,17 @@ assert_streq "$(vm_get_booted_csum)" "${booted_csum}"
vm_assert_journal_has_content $cursor 'Not finalizing; found /run/ostree/staged-deployment-locked'
echo "ok locked rebase staging"

vm_rpmostree deploy revision="${commit}" --lock-finalization
# This also now tests custom client IDs in the journal
cursor=$(vm_get_journal_cursor)
vm_cmd env RPMOSTREE_CLIENT_ID=testing-agent-id rpm-ostree deploy revision="${commit}" --lock-finalization
vm_cmd test -f /run/ostree/staged-deployment-locked
if vm_rpmostree finalize-deployment; then
assert_not_reached "finalized without expected checksum"
elif vm_rpmostree finalize-deployment WRONG_CHECKSUM; then
assert_not_reached "finalized with wrong checksum"
fi
vm_cmd journalctl --after-cursor "'$from_cursor'" -u rpm-ostreed -o json | jq -r '.AGENT//""' > agent.txt
assert_file_has_content agent.txt testing-agent-id
cursor=$(vm_get_journal_cursor)
vm_reboot_cmd rpm-ostree finalize-deployment "${commit}"
assert_streq "$(vm_get_booted_csum)" "${commit}"
Expand Down