This commit is contained in:
pika 2025-03-30 21:52:20 +02:00
parent f939933a7c
commit be6f7cfcbb
35 changed files with 1897 additions and 733 deletions

View file

@ -192,4 +192,69 @@ def subnet_scan(subnet_id):
db.session.rollback()
flash(f'Error scanning subnet: {str(e)}', 'danger')
return redirect(url_for('ipam.subnet_view', subnet_id=subnet_id))
return redirect(url_for('ipam.subnet_view', subnet_id=subnet_id))
@bp.route('/subnet/<int:subnet_id>/force-delete', methods=['POST'])
@login_required
def subnet_force_delete(subnet_id):
"""Force delete a subnet and all its related servers and applications"""
subnet = Subnet.query.get_or_404(subnet_id)
try:
# Get all servers to be deleted for reporting
servers = Server.query.filter_by(subnet_id=subnet_id).all()
server_count = len(servers)
# This will cascade delete all related servers and their applications
db.session.delete(subnet)
db.session.commit()
flash(f'Subnet {subnet.cidr} and {server_count} related servers were deleted successfully', 'success')
return redirect(url_for('dashboard.ipam_home'))
except Exception as e:
db.session.rollback()
flash(f'Error deleting subnet: {str(e)}', 'danger')
return redirect(url_for('dashboard.subnet_view', subnet_id=subnet_id))
@bp.route('/subnet/create-ajax', methods=['POST'])
@login_required
def subnet_create_ajax():
"""Create a subnet via AJAX"""
data = request.json
if not data:
return jsonify({'success': False, 'error': 'No data provided'})
cidr = data.get('cidr')
location = data.get('location')
auto_scan = data.get('auto_scan', False)
if not cidr or not location:
return jsonify({'success': False, 'error': 'CIDR and location are required'})
# Validate CIDR
try:
network = ipaddress.ip_network(cidr, strict=False)
except ValueError as e:
return jsonify({'success': False, 'error': f'Invalid CIDR: {str(e)}'})
# Create subnet
subnet = Subnet(
cidr=cidr,
location=location,
auto_scan=auto_scan,
active_hosts=json.dumps([])
)
try:
db.session.add(subnet)
db.session.commit()
return jsonify({
'success': True,
'subnet_id': subnet.id,
'cidr': subnet.cidr,
'location': subnet.location
})
except Exception as e:
db.session.rollback()
return jsonify({'success': False, 'error': str(e)})