@@ -32,6 +32,9 @@ def get_proxmox_args():
3232 vmid = dict (type = "int" , required = False ),
3333 vnet = dict (type = "str" , required = False ),
3434 pos = dict (type = "int" , required = False ),
35+ group_conf = dict (type = "bool" , default = False ),
36+ group = dict (type = "str" , required = False ),
37+ comment = dict (type = "str" , required = False ),
3538 rules = dict (
3639 type = "list" ,
3740 elements = "dict" ,
@@ -107,19 +110,49 @@ def run(self):
107110 rules_obj = firewall_obj ().rules
108111
109112 if state == "present" :
113+ if self .params .get ('group_conf' ):
114+ self .create_group (group = self .params .get ('group' ), comment = self .params .get ('comment' ))
110115 if rules is not None :
111116 self .create_fw_rules (rules_obj = rules_obj , rules = rules )
112117 elif state == "update" :
118+ if self .params .get ('group_conf' ):
119+ self .create_group (group = self .params .get ('group' ), comment = self .params .get ('comment' ))
113120 if rules is not None :
114121 self .update_fw_rules (rules_obj = rules_obj , rules = rules )
115122 elif state == "absent" :
116- self .delete_fw_rule (rules_obj = rules_obj , pos = self .params .get ('pos' ))
123+ if self .params .get ('pos' ):
124+ self .delete_fw_rule (rules_obj = rules_obj , pos = self .params .get ('pos' ))
125+ if self .params .get ('group_conf' ):
126+ self .delete_group (group_name = self .params .get ('group' ))
117127 else :
118- rules = self .get_fw_rules (rules_obj )
128+ rules = self .get_fw_rules (rules_obj , pos = self . params . get ( 'pos' ) )
119129 self .module .exit_json (
120130 changed = False , firewall_rules = rules , msg = f'successfully retrieved firewall rules'
121131 )
122132
133+ def create_group (self , group , comment = None ):
134+ try :
135+ self .proxmox_api .cluster ().firewall ().groups .post (group = group , comment = comment )
136+ self .module .exit_json (
137+ changed = True , group = group , msg = f'successfully created security group { group } '
138+ )
139+ except Exception as e :
140+ self .module .fail_json (
141+ msg = f'Failed to create security group: { e } '
142+ )
143+
144+ def delete_group (self , group_name ):
145+ try :
146+ group = getattr (self .proxmox_api .cluster ().firewall ().groups (), group_name )
147+ group .delete ()
148+ self .module .exit_json (
149+ changed = True , group = group_name , msg = f'successfully deleted security group { group_name } '
150+ )
151+ except Exception as e :
152+ self .module .fail_json (
153+ msg = f'Failed to delete security group { group_name } : { e } '
154+ )
155+
123156 def get_fw_rules (self , rules_obj , pos = None ):
124157 if pos is not None :
125158 rules_obj = getattr (rules_obj (), str (pos ))
0 commit comments