]>
git.proxmox.com Git - pve-firewall.git/blob - src/PVE/API2/Firewall/Groups.pm
1 package PVE
:: API2
:: Firewall
:: Groups
;
5 use PVE
:: JSONSchema
qw(get_standard_option) ;
6 use PVE
:: Exception
qw(raise raise_param_exc) ;
9 use PVE
:: API2
:: Firewall
:: Rules
;
11 use Data
:: Dumper
; # fixme: remove
13 use base
qw(PVE::RESTHandler) ;
15 my $get_security_group_list = sub {
16 my ( $cluster_conf ) = @_ ;
19 foreach my $group ( keys %{ $cluster_conf ->{ groups
}}) {
23 if ( my $comment = $cluster_conf ->{ group_comments
}->{ $group }) {
24 $data ->{ comment
} = $comment ;
29 my ( $list, $digest ) = PVE
:: Firewall
:: copy_list_with_digest
( $res );
31 return wantarray ?
( $list, $digest ) : $list ;
34 __PACKAGE__-
> register_method ({
35 name
=> 'list_security_groups' ,
38 description
=> "List security groups." ,
40 additionalProperties
=> 0 ,
48 group
=> get_standard_option
( 'pve-security-group-name' ),
49 digest
=> get_standard_option
( 'pve-config-digest' , { optional
=> 0 } ),
56 links
=> [ { rel
=> 'child' , href
=> "{group}" } ],
61 my $cluster_conf = PVE
:: Firewall
:: load_clusterfw_conf
();
63 return & $get_security_group_list ( $cluster_conf );
66 __PACKAGE__-
> register_method ({
67 name
=> 'create_security_group' ,
70 description
=> "Create new security group." ,
73 additionalProperties
=> 0 ,
75 group
=> get_standard_option
( 'pve-security-group-name' ),
80 rename => get_standard_option
( 'pve-security-group-name' , {
81 description
=> "Rename/update an existing security group. You can set 'rename' to the same value as 'name' to update the 'comment' of an existing group." ,
84 digest
=> get_standard_option
( 'pve-config-digest' ),
87 returns
=> { type
=> 'null' },
91 my $cluster_conf = PVE
:: Firewall
:: load_clusterfw_conf
();
93 if ( $param ->{ rename }) {
94 my ( undef , $digest ) = & $get_security_group_list ( $cluster_conf );
95 PVE
:: Tools
:: assert_if_modified
( $digest, $param ->{ digest
});
97 raise_param_exc
({ group
=> "Security group ' $param ->{rename}' does not exists" })
98 if ! $cluster_conf ->{ groups
}->{ $param ->{ rename }};
100 my $data = delete $cluster_conf ->{ groups
}->{ $param ->{ rename }};
101 $cluster_conf ->{ groups
}->{ $param ->{ group
}} = $data ;
102 if ( my $comment = delete $cluster_conf ->{ group_comments
}->{ $param ->{ rename }}) {
103 $cluster_conf ->{ group_comments
}->{ $param ->{ group
}} = $comment ;
105 $cluster_conf ->{ group_comments
}->{ $param ->{ group
}} = $param ->{ comment
} if defined ( $param ->{ comment
});
107 foreach my $name ( keys %{ $cluster_conf ->{ groups
}}) {
108 raise_param_exc
({ group
=> "Security group ' $name ' already exists" })
109 if $name eq $param ->{ group
};
112 $cluster_conf ->{ groups
}->{ $param ->{ group
}} = [];
113 $cluster_conf ->{ group_comments
}->{ $param ->{ group
}} = $param ->{ comment
} if defined ( $param ->{ comment
});
116 PVE
:: Firewall
:: save_clusterfw_conf
( $cluster_conf );
121 __PACKAGE__-
> register_method ({
122 name
=> 'delete_security_group' ,
125 description
=> "Delete security group." ,
128 additionalProperties
=> 0 ,
130 group
=> get_standard_option
( 'pve-security-group-name' ),
131 digest
=> get_standard_option
( 'pve-config-digest' ),
134 returns
=> { type
=> 'null' },
138 my $cluster_conf = PVE
:: Firewall
:: load_clusterfw_conf
();
140 return undef if ! $cluster_conf ->{ groups
}->{ $param ->{ group
}};
142 my ( undef , $digest ) = & $get_security_group_list ( $cluster_conf );
143 PVE
:: Tools
:: assert_if_modified
( $digest, $param ->{ digest
});
145 die "Security group ' $param ->{group}' is not empty \n "
146 if scalar (@{ $cluster_conf ->{ groups
}->{ $param ->{ group
}}});
148 delete $cluster_conf ->{ groups
}->{ $param ->{ group
}};
150 PVE
:: Firewall
:: save_clusterfw_conf
( $cluster_conf );
155 __PACKAGE__-
> register_method ({
156 subclass
=> "PVE::API2::Firewall::GroupRules" ,