my $api_properties = {
cidr => {
description => "Network/IP specification in CIDR format.",
- type => 'string', format => 'IPv4orCIDR',
+ type => 'string', format => 'IPv4orCIDRorAlias',
},
name => get_standard_option('ipset-name'),
comment => {
}});
}
+my $verify_alias_exists = sub {
+ my ($cluster_conf, $fw_conf, $cidr) = @_;
+
+ if ($cidr !~ m/^\d/) {
+ my $alias = lc($cidr);
+ die "no such alias '$cidr'\n"
+ if !(($cluster_conf && $cluster_conf->{aliases}->{$alias}) ||
+ ($fw_conf && $fw_conf->{aliases}->{$alias}));
+ }
+};
+
sub register_create_ip {
my ($class) = @_;
if $entry->{cidr} eq $cidr;
}
+ &$verify_alias_exists($cluster_conf, $fw_conf, $cidr);
+
my $data = { cidr => $cidr };
+
$data->{nomatch} = 1 if $param->{nomatch};
$data->{comment} = $param->{comment} if $param->{comment};
die "value does not look like a valid IP address or CIDR network\n";
}
+PVE::JSONSchema::register_format('IPv4orCIDRorAlias', \&pve_verify_ipv4_or_cidr_or_alias);
+sub pve_verify_ipv4_or_cidr_or_alias {
+ my ($cidr, $noerr) = @_;
+
+ return if $cidr =~ m/^(?:$ip_alias_pattern)$/;
+
+ if ($cidr =~ m!^(?:$IPV4RE)(/(\d+))?$!) {
+ return $cidr if Net::IP->new($cidr);
+ return undef if $noerr;
+ die Net::IP::Error() . "\n";
+ }
+ return undef if $noerr;
+ die "value does not look like a valid IP address or CIDR network\n";
+}
+
PVE::JSONSchema::register_standard_option('ipset-name', {
description => "IP set name.",
type => 'string',