[pve-devel] [RFC manager 3/7] api: APT: add call to list repositories

Fabian Ebner f.ebner at proxmox.com
Wed Jan 20 11:01:39 CET 2021


Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---

There is both metadata (path, number, enabled) and actual data (Suites,
Components, etc.) for a repository. The actual data parts are capitalized.
This makes parsing from the DEB-822 format a bit easier, and as a side effect
distinguishes metadata and actual data. An alternative would be to introduce
nesting in the result like

    {
	path =>
	number =>
	enabled =>
	repodata => {
	    suites =>
	    types =>
	}
    }

but having a flat result makes handling in the UI code easier. Is the current
approach fine or does it need to be uniform or should there be nesting?
Since the UI code should be reused for PBS, this question also affects the
not-yet-written Rust code.

 PVE/API2/APT.pm | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/PVE/API2/APT.pm b/PVE/API2/APT.pm
index fb4954e7..e92770ca 100644
--- a/PVE/API2/APT.pm
+++ b/PVE/API2/APT.pm
@@ -12,6 +12,7 @@ use LWP::UserAgent;
 
 use PVE::pvecfg;
 use PVE::Tools qw(extract_param);
+use PVE::APT;
 use PVE::Cluster;
 use PVE::DataCenterConfig;
 use PVE::SafeSyslog;
@@ -67,6 +68,7 @@ __PACKAGE__->register_method({
 	my $res = [ 
 	    { id => 'changelog' },
 	    { id => 'update' },
+	    { id => 'repositories' },
 	    { id => 'versions' },
 	];
 
@@ -478,6 +480,73 @@ __PACKAGE__->register_method({
 	return $data;
     }});
 
+__PACKAGE__->register_method({
+    name => 'repositories',
+    path => 'repositories',
+    method => 'GET',
+    proxyto => 'node',
+    description => "Get APT repository information.",
+    permissions => {
+	check => ['perm', '/nodes/{node}', [ 'Sys.Audit' ]],
+    },
+    parameters => {
+	additionalProperties => 0,
+	properties => {
+	    node => get_standard_option('pve-node'),
+	},
+    },
+    returns => {
+	type => "array",
+	description => "List of configured repositories.",
+	items => {
+	    type => "object",
+	    properties => {
+		path => {
+		    type => 'string',
+		    description => "Path to the file that defines the repository.",
+		},
+		number => {
+		    type => 'integer',
+		    description => "Line or stanza number.",
+		},
+		enabled => {
+		    type => 'boolean',
+		},
+		comment => {
+		    type => 'string',
+		    optional => 1,
+		},
+		Types => {
+		    type => 'string',
+		    description => "List of repository types.",
+		},
+		URIs => {
+		    type => 'string',
+		    description => "List of repository URIs.",
+		},
+		Suites => {
+		    type => 'string',
+		    description => "List of repository suites.",
+		},
+		Components => {
+		    type => 'string',
+		    description => "List of repository components. Needs to " .
+			"be empty when the suite is absolute.",
+		    optional => 1,
+		},
+		Options => {
+		    type => 'object',
+		    description => "Further options for APT.",
+		},
+	    },
+	},
+    },
+    code => sub {
+	my ($param) = @_;
+
+	return PVE::APT::list_repositories();
+    }});
+
 __PACKAGE__->register_method({
     name => 'versions', 
     path => 'versions', 
-- 
2.20.1





More information about the pve-devel mailing list