]> git.proxmox.com Git - pve-network.git/blame - PVE/Network/SDN/Controllers/FaucetPlugin.pm
cleanup old transport/router/sdn_cfg references
[pve-network.git] / PVE / Network / SDN / Controllers / FaucetPlugin.pm
CommitLineData
f5eabba0 1package PVE::Network::SDN::Controllers::FaucetPlugin;
0193ebe5
AD
2
3use strict;
4use warnings;
f5eabba0 5use PVE::Network::SDN::Controllers::Plugin;
0193ebe5
AD
6use PVE::Tools;
7use PVE::INotify;
8use PVE::JSONSchema qw(get_standard_option);
9use CPAN::Meta::YAML;
10use Encode;
11
f5eabba0 12use base('PVE::Network::SDN::Controllers::Plugin');
0193ebe5
AD
13
14sub type {
f5eabba0 15 return 'faucet';
0193ebe5
AD
16}
17
18sub properties {
19 return {
20 };
21}
22
23# Plugin implementation
24sub generate_controller_config {
56cdcac9 25 my ($class, $plugin_config, $controller, $id, $uplinks, $config) = @_;
0193ebe5
AD
26
27}
28
56cdcac9
AD
29sub generate_controller_zone_config {
30 my ($class, $plugin_config, $controller, $id, $uplinks, $config) = @_;
0193ebe5
AD
31
32 my $dpid = $plugin_config->{'dp-id'};
33 my $dphex = printf("%x",$dpid);
34
56cdcac9 35 my $zone_config = {
0193ebe5
AD
36 dp_id => $dphex,
37 hardware => "Open vSwitch",
38 };
39
56cdcac9 40 $config->{faucet}->{dps}->{$id} = $zone_config;
0193ebe5
AD
41
42}
43
44
45sub generate_controller_vnet_config {
56cdcac9 46 my ($class, $plugin_config, $controller, $zoneid, $vnetid, $config) = @_;
0193ebe5
AD
47
48 my $mac = $plugin_config->{mac};
49 my $ipv4 = $plugin_config->{ipv4};
50 my $ipv6 = $plugin_config->{ipv6};
51 my $tag = $plugin_config->{tag};
52 my $alias = $plugin_config->{alias};
53
54 my @ips = ();
55 push @ips, $ipv4 if $ipv4;
56 push @ips, $ipv6 if $ipv6;
57
58 my $vlan_config = { vid => $tag };
59
60 $vlan_config->{description} = $alias if $alias;
61 $vlan_config->{faucet_mac} = $mac if $mac;
62 $vlan_config->{faucet_vips} = \@ips if scalar @ips > 0;
63
64 $config->{faucet}->{vlans}->{$vnetid} = $vlan_config;
65
56cdcac9 66 push(@{$config->{faucet}->{routers}->{$zoneid}->{vlans}} , $vnetid);
0193ebe5
AD
67
68}
69
70sub write_controller_config {
71 my ($class, $plugin_config, $config) = @_;
72
73 my $rawconfig = encode('UTF-8', CPAN::Meta::YAML::Dump($config->{faucet}));
74
75 return if !$rawconfig;
76 return if !-d "/etc/faucet";
77
78 my $frr_config_file = "/etc/faucet/faucet.yaml";
79
80 my $writefh = IO::File->new($frr_config_file,">");
81 print $writefh $rawconfig;
82 $writefh->close();
83}
84
85sub reload_controller {
86 my ($class) = @_;
87
88 my $conf_file = "/etc/faucet/faucet.yaml";
89 my $bin_path = "/usr/bin/faucet";
90
91 if (-e $conf_file && -e $bin_path) {
92 PVE::Tools::run_command(['systemctl', 'reload', 'faucet']);
93 }
94}
95
961;
97