[pve-devel] [PATCH manager v3 1/2] add /node/{NODE}/hosts API Call
Dominik Csapak
d.csapak at proxmox.com
Wed Sep 12 10:24:13 CEST 2018
to get and set the content of /etc/hosts
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v2:
* add digest check code
* lock file during write
PVE/API2/Nodes.pm | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index 836dccaf..791e0b40 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -186,6 +186,7 @@ __PACKAGE__->register_method ({
{ name => 'firewall' },
{ name => 'certificates' },
{ name => 'config' },
+ { name => 'hosts' },
];
return $result;
@@ -1815,6 +1816,79 @@ __PACKAGE__->register_method ({
}});
+__PACKAGE__->register_method ({
+ name => 'get_etc_hosts',
+ path => 'hosts',
+ method => 'GET',
+ proxyto => 'node',
+ protected => 1,
+ permissions => {
+ check => ['perm', '/', [ 'Sys.Audit' ]],
+ },
+ description => "Get the content of /etc/hosts.",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node'),
+ },
+ },
+ returns => {
+ type => 'object',
+ properties => {
+ digest => get_standard_option('pve-config-digest'),
+ data => {
+ type => 'string',
+ description => 'The content of /etc/hosts.'
+ },
+ },
+ },
+ code => sub {
+ my ($param) = @_;
+
+ return PVE::INotify::read_file('etchosts');
+
+ }});
+
+__PACKAGE__->register_method ({
+ name => 'write_etc_hosts',
+ path => 'hosts',
+ method => 'POST',
+ proxyto => 'node',
+ protected => 1,
+ permissions => {
+ check => ['perm', '/nodes/{node}', [ 'Sys.Modify' ]],
+ },
+ description => "Write /etc/hosts.",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node'),
+ digest => get_standard_option('pve-config-digest'),
+ data => {
+ type => 'string',
+ description => 'The target content of /etc/hosts.'
+ },
+ },
+ },
+ returns => {
+ type => 'null',
+ },
+ code => sub {
+ my ($param) = @_;
+
+ PVE::Tools::lock_file('/var/lock/pve-etchosts.lck', undef, sub{
+ if ($param->{digest}) {
+ my $hosts = PVE::Tools::file_get_contents('/etc/hosts');
+ my $digest = Digest::SHA::sha1_hex($hosts);
+ PVE::Tools::assert_if_modified($digest, $param->{digest});
+ }
+ PVE::INotify::write_file('etchosts', $param->{data});
+ });
+ die $@ if $@;
+
+ return undef;
+ }});
+
# bash completion helper
sub complete_templet_repo {
--
2.11.0
More information about the pve-devel
mailing list