use strict;
use warnings;
use IO::File;
+use Net::IP;
use PVE::Tools qw(run_command trim);
use PVE::Storage::Plugin;
use PVE::JSONSchema qw(get_standard_option);
return "$pool/$disk";
};
+my $hostlist = sub {
+ my ($list_text, $separator) = @_;
+ my @monhostlist = PVE::Tools::split_list($list_text);
+ return join($separator, map {
+ my ($host, $port) = PVE::Tools::parse_host_and_port($_);
+ $port = defined($port) ? ":$port" : '';
+ $host = "[$host]" if Net::IP::ip_is_ipv6($host);
+ "${host}${port}"
+ } @monhostlist);
+};
+
my $rbd_cmd = sub {
my ($scfg, $storeid, $op, @options) = @_;
- my $monhost = $scfg->{monhost};
- $monhost =~ s/;/,/g;
+ my $monhost = &$hostlist($scfg->{monhost}, ',');
my $keyring = "/etc/pve/priv/ceph/${storeid}.keyring";
my $pool = $scfg->{pool} ? $scfg->{pool} : 'rbd';
my $rados_cmd = sub {
my ($scfg, $storeid, $op, @options) = @_;
- my $monhost = $scfg->{monhost};
- $monhost =~ s/;/,/g;
+ my $monhost = &$hostlist($scfg->{monhost}, ',');
my $keyring = "/etc/pve/priv/ceph/${storeid}.keyring";
my $pool = $scfg->{pool} ? $scfg->{pool} : 'rbd';
return {
monhost => {
description => "Monitors daemon ips.",
- type => 'string',
+ type => 'string', format => 'pve-storage-portal-dns-list',
},
pool => {
description => "Pool.",
my $pool = $scfg->{pool} ? $scfg->{pool} : 'rbd';
return ("/dev/rbd/$pool/$name", $vmid, $vtype) if $scfg->{krbd};
- my $monhost = $scfg->{monhost};
+ my $monhost = &$hostlist($scfg->{monhost}, ';');
$monhost =~ s/:/\\:/g;
my $username = $scfg->{username} ? $scfg->{username} : 'admin';