switch.pp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # create a tinc vpn switch
  2. define tinc::switch(
  3. $ensure = 'present',
  4. $connect_on_boot = true,
  5. $tinc_interface = 'eth0',
  6. $tinc_address = undef,
  7. $port = '655',
  8. $tinc_address_to_export = undef,
  9. $port_to_export = '655',
  10. $tinc_internal_interface = 'eth1',
  11. $tinc_internal_ip = 'absent',
  12. $tinc_internal_netmask = 'absent',
  13. $tinc_bridge_interface = 'absent',
  14. $compression = '10',
  15. $options = {},
  16. $shorewall_zone = 'absent'
  17. ){
  18. tinc::instance{$name:
  19. ensure => $ensure,
  20. connect_on_boot => $connect_on_boot,
  21. tinc_interface => $tinc_interface,
  22. tinc_address => $tinc_address,
  23. tinc_address_to_export => $tinc_address_to_export,
  24. port => $port,
  25. port_to_export => $port_to_export,
  26. compression => $compression,
  27. mode => 'switch',
  28. options => $options,
  29. }
  30. if $ensure == 'present' {
  31. include ::tinc
  32. require bridge_utils
  33. $real_tinc_bridge_interface = $tinc_bridge_interface ? {
  34. 'absent' => "br${name}",
  35. default => $tinc_bridge_interface
  36. }
  37. if $tinc_internal_ip == 'absent' {
  38. $tinc_br_ifaddr = "::ipaddress_${real_tinc_bridge_interface}"
  39. $tinc_br_ip = inline_template('<%= scope.lookupvar(@tinc_br_ifaddr) %>')
  40. case $tinc_br_ip {
  41. '',undef: {
  42. $tinc_orig_ifaddr = "::ipaddress_${tinc_internal_interface}"
  43. $real_tinc_internal_ip = inline_template('<%= scope.lookupvar(@tinc_orig_ifaddr) %>')
  44. }
  45. default: { $real_tinc_internal_ip = $tinc_br_ip }
  46. }
  47. } else {
  48. $real_tinc_internal_ip = $tinc_internal_ip
  49. }
  50. if $tinc_internal_netmask == 'absent' {
  51. $tinc_br_netmask_fact = "::netmask_${real_tinc_bridge_interface}"
  52. $tinc_br_netmask = inline_template('<%= n=scope.lookupvar(@tinc_br_netmask_fact); n.nil? ? n : n.split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").to_s %>')
  53. case $tinc_br_netmask {
  54. '',undef: {
  55. $tinc_orig_netmask = "::netmask_${tinc_internal_interface}"
  56. $real_tinc_internal_netmask = inline_template('<%= n=scope.lookupvar(@tinc_orig_netmask); n.nil? ? n : n.split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").to_s %>')
  57. }
  58. default: { $real_tinc_internal_netmask = $tinc_br_netmask }
  59. }
  60. } else {
  61. $real_tinc_internal_netmask = $tinc_internal_netmask
  62. }
  63. Tinc::Instance[$name]{
  64. tinc_up_content => template('tinc/switch/tinc-up.erb'),
  65. tinc_down_content => template('tinc/switch/tinc-down.erb'),
  66. }
  67. if $tinc::use_shorewall {
  68. $zone = $shorewall_zone ? {
  69. 'absent' => 'loc',
  70. default => $shorewall_zone
  71. }
  72. shorewall::interface { $real_tinc_bridge_interface:
  73. zone => $zone,
  74. rfc1918 => true,
  75. options => 'routeback,logmartians';
  76. }
  77. }
  78. } else {
  79. File["/etc/tinc/${name}"]{
  80. ensure => absent,
  81. recurse => true,
  82. purge => true,
  83. force => true
  84. }
  85. }
  86. }