]>
git.proxmox.com Git - pve-client.git/blob - PVE/APIClient/Commands/remote.pm
e8c876a7259921cff5f83452537f828e66985063
1 package PVE
::APIClient
::Commands
::remote
;
6 use PVE
::JSONSchema
qw(get_standard_option);
7 use PVE
::Tools
qw(extract_param);
8 use PVE
::APIClient
::Config
;
12 use PVE
::APIClient
::LWP
;
15 use base
qw(PVE::CLIHandler);
18 return PVE
::PTY
::read_password
("Remote password: ")
21 __PACKAGE__-
>register_method ({
25 description
=> "List remotes from your config file.",
27 additionalProperties
=> 0,
29 returns
=> { type
=> 'null' },
31 my $config = PVE
::APIClient
::Config-
>load();
33 printf("%10s %10s %10s %10s %100s\n", "Name", "Host", "Port", "Username", "Fingerprint");
34 for my $name (keys %{$config->{ids
}}) {
35 my $remote = $config->{ids
}->{$name};
36 printf("%10s %10s %10s %10s %100s\n", $name, $remote->{'host'},
37 $remote->{'port'} // '-', $remote->{'username'}, $remote->{'fingerprint'} // '-');
43 __PACKAGE__-
>register_method ({
47 description
=> "Add a remote to your config file.",
48 parameters
=> PVE
::APIClient
::Config-
>createSchema(1),
49 returns
=> { type
=> 'null'},
53 # fixme: lock config file
55 my $remote = $param->{name
};
57 my $config = PVE
::APIClient
::Config-
>load();
59 die "Remote '$remote' already exists\n"
60 if $config->{ids
}->{$remote};
65 username
=> $param->{username
},
66 password
=> $param->{password
},
67 host
=> $param->{host
},
68 port
=> $param->{port
} // 8006,
71 if ($param->{fingerprint
}) {
72 $setup->{cached_fingerprints
} = {
73 $param->{fingerprint
} => 1,
76 $setup->{manual_verification
} = 1;
77 $setup->{register_fingerprint_cb
} = sub {
83 my $api = PVE
::APIClient
::LWP-
>new(%$setup);
86 $param->{fingerprint
} = $last_fp if !defined($param->{fingerprint
});
87 my $plugin = PVE
::APIClient
::Config-
>lookup('remote');
88 my $opts = $plugin->check_config($remote, $param, 1, 1);
89 $config->{ids
}->{$remote} = $opts;
91 PVE
::APIClient
::Config-
>save($config);
96 __PACKAGE__-
>register_method ({
100 description
=> "Update a remote configuration.",
101 parameters
=> PVE
::APIClient
::Config-
>updateSchema(1),
102 returns
=> { type
=> 'null'},
106 # fixme: lock config file
108 my $name = extract_param
($param, 'name');
109 my $digest = extract_param
($param, 'digest');
110 my $delete = extract_param
($param, 'delete');
112 my $config = PVE
::APIClient
::Config-
>load();
113 my $remote = PVE
::APIClient
::Config-
>lookup_remote($config, $name);
115 my $plugin = PVE
::APIClient
::Config-
>lookup('remote');
116 my $opts = $plugin->check_config($name, $param, 0, 1);
118 foreach my $k (%$opts) {
119 $remote->{$k} = $opts->{$k};
123 my $options = $plugin->private()->{options
}->{'remote'};
124 foreach my $k (PVE
::Tools
::split_list
($delete)) {
125 my $d = $options->{$k} ||
126 die "no such option '$k'\n";
127 die "unable to delete required option '$k'\n"
129 die "unable to delete fixed option '$k'\n"
131 delete $remote->{$k};
135 PVE
::APIClient
::Config-
>save($config);
140 __PACKAGE__-
>register_method ({
144 description
=> "Removes a remote from your config file.",
146 additionalProperties
=> 0,
148 name
=> get_standard_option
('pveclient-remote-name'),
151 returns
=> { type
=> 'null'},
157 my $config = PVE
::APIClient
::Config-
>load();
158 delete $config->{ids
}->{$param->{name
}};
159 PVE
::APIClient
::Config-
>save($config);
165 add
=> [ __PACKAGE__
, 'add', ['name', 'host', 'username']],
166 update
=> [ __PACKAGE__
, 'update', ['name']],
167 remove
=> [ __PACKAGE__
, 'remove', ['name']],
168 list
=> [__PACKAGE__
, 'list'],