[pve-devel] [PATCH qemu-server 8/8] implement file-write via guest-agent in the api
Thomas Lamprecht
t.lamprecht at proxmox.com
Mon Jun 11 14:28:50 CEST 2018
On 6/7/18 1:16 PM, Dominik Csapak wrote:
> writes the given content to the file
>
> the size is at the moment limited by the max post size of the
> pveproxy/daemon
>
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
> PVE/API2/Qemu/Agent.pm | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/PVE/API2/Qemu/Agent.pm b/PVE/API2/Qemu/Agent.pm
> index dad135c..a206050 100644
> --- a/PVE/API2/Qemu/Agent.pm
> +++ b/PVE/API2/Qemu/Agent.pm
> @@ -118,6 +118,7 @@ __PACKAGE__->register_method({
> exec
> exec-status
> file-read
> + file-write
> set-user-password
> );
>
> @@ -417,4 +418,54 @@ __PACKAGE__->register_method({
> return $result;
> }});
>
> +__PACKAGE__->register_method({
> + name => 'file-write',
> + path => 'file-write',
> + method => 'POST',
> + protected => 1,
> + proxyto => 'node',
> + description => "Writes the given file via guest agent.",
> + permissions => { check => [ 'perm', '/vms/{vmid}', [ 'VM.Monitor' ]]},
> + parameters => {
> + additionalProperties => 0,
> + properties => {
> + node => get_standard_option('pve-node'),
> + vmid => get_standard_option('pve-vmid', {
> + completion => \&PVE::QemuServer::complete_vmid_running }),
> + file => {
> + type => 'string',
> + description => 'The path to the file.'
> + },
> + content => {
> + type => 'string',
> + description => "The content to write into the file."
maybe a note about our post size limit (currently 64KB)
could be helpful
> + }
> + },
> + },
> + returns => { type => 'null' },
> + code => sub {
> + my ($param) = @_;
> +
> + my $vmid = $param->{vmid};
> +
> + my $conf = PVE::QemuConfig->load_config ($vmid); # check if VM exists
> +
> + check_agent_available($vmid, $conf);
> +
> + my $qgafh = PVE::QemuServer::vm_mon_cmd($vmid, "guest-file-open", path => $param->{file}, mode => 'wb');
> +
please stick this error handling call (which should get another
name or be wrapped, as stated in another reply here) below to
it's pardner above, else this gets a bit hard to read.
If every line has an extra newline in between it's almost
like none had.
> + raise_agent_error($qgafh, "can't open file");
> +
> + my $buf = encode_base64($param->{content});
> +
> + my $write = PVE::QemuServer::vm_mon_cmd($vmid, "guest-file-write", handle => $qgafh, 'buf-b64' => $buf);
> +
see above
> + raise_agent_error($write, "can't write to file");
> +
> + my $res = PVE::QemuServer::vm_mon_cmd($vmid, "guest-file-close", handle => $qgafh);
> + raise_agent_error($res, "can't close file");
the more often I read this the more I'd like to see an
(exportable) agent_cmd() helper int PVE::QS::Agent alá:
qga_cmd($vmid, $cmd, [$params], [$emsg])
all in all cool features in this series!
> +
> + return undef;
> + }});
> +
> 1;
>
More information about the pve-devel
mailing list