arista-eos 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. data/.gitignore +41 -0
  2. data/.rubocop.yml +21 -0
  3. data/Gemfile +57 -0
  4. data/Guardfile +21 -0
  5. data/LICENSE +28 -0
  6. data/README.md +178 -0
  7. data/Rakefile +46 -0
  8. data/eos.gemspec +36 -0
  9. data/guide/.gitignore +2 -0
  10. data/guide/Makefile +177 -0
  11. data/guide/_static/arista_logo_jpg-11.jpg +0 -0
  12. data/guide/_static/favicon.ico +0 -0
  13. data/guide/conf.py +282 -0
  14. data/guide/cookbook.rst +135 -0
  15. data/guide/developing.rst +55 -0
  16. data/guide/faq.rst +30 -0
  17. data/guide/index.rst +25 -0
  18. data/guide/installation.rst +174 -0
  19. data/guide/license.rst +5 -0
  20. data/guide/overview.rst +35 -0
  21. data/guide/quickstart.rst +184 -0
  22. data/guide/release-notes-1.0.rst +37 -0
  23. data/guide/release-notes-1.1.rst +25 -0
  24. data/guide/release-notes.rst +10 -0
  25. data/guide/testing.rst +8 -0
  26. data/guide/troubleshooting.rst +26 -0
  27. data/guide/typedoc.rst +928 -0
  28. data/guide/types.rst +44 -0
  29. data/lib/eos.rb +8 -0
  30. data/lib/eos/version.rb +5 -0
  31. data/lib/puppet/provider/eos_acl_entry/default.rb +122 -0
  32. data/lib/puppet/provider/eos_command/default.rb +61 -0
  33. data/lib/puppet/provider/eos_ethernet/default.rb +96 -0
  34. data/lib/puppet/provider/eos_interface/default.rb +89 -0
  35. data/lib/puppet/provider/eos_ipinterface/default.rb +89 -0
  36. data/lib/puppet/provider/eos_mlag/default.rb +86 -0
  37. data/lib/puppet/provider/eos_mlag_interface/default.rb +90 -0
  38. data/lib/puppet/provider/eos_ntp_config/default.rb +68 -0
  39. data/lib/puppet/provider/eos_ntp_server/default.rb +69 -0
  40. data/lib/puppet/provider/eos_portchannel/default.rb +117 -0
  41. data/lib/puppet/provider/eos_snmp/default.rb +77 -0
  42. data/lib/puppet/provider/eos_stp_interface/default.rb +73 -0
  43. data/lib/puppet/provider/eos_switchport/default.rb +100 -0
  44. data/lib/puppet/provider/eos_system/default.rb +63 -0
  45. data/lib/puppet/provider/eos_vlan/default.rb +93 -0
  46. data/lib/puppet/provider/eos_vxlan/default.rb +104 -0
  47. data/lib/puppet/provider/eos_vxlan_vlan/default.rb +89 -0
  48. data/lib/puppet/provider/eos_vxlan_vtep/default.rb +70 -0
  49. data/lib/puppet/type/eos_acl_entry.rb +126 -0
  50. data/lib/puppet/type/eos_command.rb +75 -0
  51. data/lib/puppet/type/eos_ethernet.rb +101 -0
  52. data/lib/puppet/type/eos_interface.rb +79 -0
  53. data/lib/puppet/type/eos_ipinterface.rb +116 -0
  54. data/lib/puppet/type/eos_mlag.rb +133 -0
  55. data/lib/puppet/type/eos_mlag_interface.rb +85 -0
  56. data/lib/puppet/type/eos_ntp_config.rb +70 -0
  57. data/lib/puppet/type/eos_ntp_server.rb +52 -0
  58. data/lib/puppet/type/eos_portchannel.rb +189 -0
  59. data/lib/puppet/type/eos_snmp.rb +127 -0
  60. data/lib/puppet/type/eos_stp_interface.rb +94 -0
  61. data/lib/puppet/type/eos_switchport.rb +150 -0
  62. data/lib/puppet/type/eos_system.rb +69 -0
  63. data/lib/puppet/type/eos_vlan.rb +130 -0
  64. data/lib/puppet/type/eos_vxlan.rb +150 -0
  65. data/lib/puppet/type/eos_vxlan_vlan.rb +78 -0
  66. data/lib/puppet/type/eos_vxlan_vtep.rb +62 -0
  67. data/lib/puppet_x/eos/provider.rb +86 -0
  68. data/lib/puppet_x/eos/utils/helpers.rb +34 -0
  69. data/metadata.json +20 -0
  70. data/spec/fixtures/README +61 -0
  71. data/spec/fixtures/ethernet.json +9 -0
  72. data/spec/fixtures/fixture_stp.yaml +11 -0
  73. data/spec/fixtures/fixture_vxlan_get.yaml +11 -0
  74. data/spec/fixtures/ospf.json +13 -0
  75. data/spec/fixtures/snmp.json +6 -0
  76. data/spec/fixtures/varp.json +11 -0
  77. data/spec/spec_helper.rb +27 -0
  78. data/spec/support/fixtures.rb +74 -0
  79. data/spec/support/shared_examples_for_providers.rb +7 -0
  80. data/spec/support/shared_examples_for_types.rb +451 -0
  81. data/spec/unit/puppet/provider/eos_acl_entry/default_spec.rb +226 -0
  82. data/spec/unit/puppet/provider/eos_acl_entry/fixture_acl_entry.yaml +20 -0
  83. data/spec/unit/puppet/provider/eos_ethernet/default_spec.rb +226 -0
  84. data/spec/unit/puppet/provider/eos_ethernet/fixture_ethernet.yaml +8 -0
  85. data/spec/unit/puppet/provider/eos_interface/default_spec.rb +176 -0
  86. data/spec/unit/puppet/provider/eos_interface/fixture_interfaces.yaml +5 -0
  87. data/spec/unit/puppet/provider/eos_ipinterface/default_spec.rb +223 -0
  88. data/spec/unit/puppet/provider/eos_ipinterface/fixture_ipinterfaces.yaml +5 -0
  89. data/spec/unit/puppet/provider/eos_mlag/default_spec.rb +203 -0
  90. data/spec/unit/puppet/provider/eos_mlag/fixture_mlag.yaml +11 -0
  91. data/spec/unit/puppet/provider/eos_mlag_interface/default_spec.rb +177 -0
  92. data/spec/unit/puppet/provider/eos_mlag_interface/fixture_mlag.yaml +11 -0
  93. data/spec/unit/puppet/provider/eos_ntp_config/default_spec.rb +150 -0
  94. data/spec/unit/puppet/provider/eos_ntp_config/fixture_ntp.yaml +3 -0
  95. data/spec/unit/puppet/provider/eos_ntp_server/default_spec.rb +152 -0
  96. data/spec/unit/puppet/provider/eos_ntp_server/fixture_ntp.yaml +3 -0
  97. data/spec/unit/puppet/provider/eos_portchannel/default_spec.rb +271 -0
  98. data/spec/unit/puppet/provider/eos_portchannel/fixture_portchannels.yaml +10 -0
  99. data/spec/unit/puppet/provider/eos_snmp/default_spec.rb +193 -0
  100. data/spec/unit/puppet/provider/eos_snmp/fixture_snmp.yaml +6 -0
  101. data/spec/unit/puppet/provider/eos_stp_interface/default_spec.rb +138 -0
  102. data/spec/unit/puppet/provider/eos_switchport/default_spec.rb +250 -0
  103. data/spec/unit/puppet/provider/eos_switchport/fixture_switchports.yaml +7 -0
  104. data/spec/unit/puppet/provider/eos_system/default_spec.rb +129 -0
  105. data/spec/unit/puppet/provider/eos_system/fixture_system.yaml +2 -0
  106. data/spec/unit/puppet/provider/eos_vlan/default_spec.rb +228 -0
  107. data/spec/unit/puppet/provider/eos_vlan/fixture_vlans.yaml +6 -0
  108. data/spec/unit/puppet/provider/eos_vxlan/default_spec.rb +229 -0
  109. data/spec/unit/puppet/provider/eos_vxlan/fixture_vxlan.yaml +9 -0
  110. data/spec/unit/puppet/provider/eos_vxlan_vlan/default_spec.rb +148 -0
  111. data/spec/unit/puppet/provider/eos_vxlan_vtep/default_spec.rb +140 -0
  112. data/spec/unit/puppet/type/eos_acl_entry_spec.rb +103 -0
  113. data/spec/unit/puppet/type/eos_command_spec.rb +67 -0
  114. data/spec/unit/puppet/type/eos_ethernet_spec.rb +87 -0
  115. data/spec/unit/puppet/type/eos_interface_spec.rb +67 -0
  116. data/spec/unit/puppet/type/eos_ipinterface_spec.rb +84 -0
  117. data/spec/unit/puppet/type/eos_mlag_interface_spec.rb +62 -0
  118. data/spec/unit/puppet/type/eos_mlag_spec.rb +98 -0
  119. data/spec/unit/puppet/type/eos_ntp_config_spec.rb +58 -0
  120. data/spec/unit/puppet/type/eos_ntp_server_spec.rb +51 -0
  121. data/spec/unit/puppet/type/eos_portchannel_spec.rb +99 -0
  122. data/spec/unit/puppet/type/eos_snmp_spec.rb +87 -0
  123. data/spec/unit/puppet/type/eos_stp_interface_spec.rb +77 -0
  124. data/spec/unit/puppet/type/eos_switchport_spec.rb +88 -0
  125. data/spec/unit/puppet/type/eos_system_spec.rb +57 -0
  126. data/spec/unit/puppet/type/eos_vlan_spec.rb +86 -0
  127. data/spec/unit/puppet/type/eos_vxlan_spec.rb +100 -0
  128. data/spec/unit/puppet/type/eos_vxlan_vlan_spec.rb +73 -0
  129. data/spec/unit/puppet/type/eos_vxlan_vtep_spec.rb +52 -0
  130. data/tests/init.pp +12 -0
  131. metadata +437 -0
@@ -0,0 +1,189 @@
1
+ #
2
+ # Copyright (c) 2014, Arista Networks, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are
7
+ # met:
8
+ #
9
+ # Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ #
12
+ # Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # Neither the name of Arista Networks nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
24
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30
+ # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ #
32
+
33
+ Puppet::Type.newtype(:eos_portchannel) do
34
+ @doc = <<-EOS
35
+ This type manages Port-Channel interface instances on Arista
36
+ EOS nodes. It provides configuration resources for logical
37
+ Port-Channel instances and settings
38
+ EOS
39
+
40
+ ensurable
41
+
42
+ # Parameters
43
+
44
+ newparam(:name) do
45
+ desc <<-EOS
46
+ The name parameter specifies the name of the Port-Channel
47
+ interface to configure. The value must be the full
48
+ interface name identifier that corresponds to a valid
49
+ interface name in EOS.
50
+ EOS
51
+
52
+ validate do |value|
53
+ unless value =~ /^Port-Channel/
54
+ fail "value #{value.inspect} is invalid, must be a valid " \
55
+ 'Port-Channel interface name'
56
+ end
57
+ end
58
+ end
59
+
60
+ # Properties (state management)
61
+
62
+ newproperty(:description) do
63
+ desc <<-EOS
64
+ The one line description to configure for the interface. The
65
+ description can be any valid alphanumeric string including symbols
66
+ and spaces.
67
+
68
+ The default value for description is ''
69
+ EOS
70
+
71
+ validate do |value|
72
+ case value
73
+ when String then super(value)
74
+ else fail "value #{value.inspect} is invalid, must be a String."
75
+ end
76
+ end
77
+ end
78
+
79
+ newproperty(:enable) do
80
+ desc <<-EOS
81
+ The enable value configures the administrative state of the
82
+ specified interface. Valid values for enable are:
83
+
84
+ * true - Administratively enables the interface
85
+ * false - Administratively disables the interface
86
+
87
+ The default value for enable is :true
88
+ EOS
89
+ newvalues(:true, :false)
90
+ end
91
+
92
+ newproperty(:lacp_mode) do
93
+ desc <<-EOS
94
+ The lacp_mode property configures the LACP operating mode of
95
+ the Port-Channel interface. The LACP mode supports the following
96
+ valid values
97
+
98
+ * active - Interface is an active LACP port that transmits and
99
+ receives LACP negotiation packets.
100
+ * passive - Interface is a passive LACP port that only responds
101
+ to LACP negotiation packets.
102
+ * on - Interface is a static port channel, LACP disabled.
103
+
104
+ The default value for lacp_mode is :on
105
+ EOS
106
+
107
+ newvalues(:active, :passive, :on)
108
+ end
109
+
110
+ newproperty(:members, array_matching: :all) do
111
+ desc <<-EOS
112
+ The members property manages the Array of physical interfaces
113
+ that comprise the logical Port-Channel interface. Each entry
114
+ in the members Array must be the full interface identifer of
115
+ a physical interface name.
116
+
117
+ The default value for members is []
118
+ EOS
119
+
120
+ validate do |value|
121
+ unless value =~ %r{^Ethernet\d(:\/\d+)?}
122
+ fail "value #{value.inspect} is invalid, must be an Ethernet interface"
123
+ end
124
+ end
125
+ end
126
+
127
+ newproperty(:minimum_links) do
128
+ desc <<-EOS
129
+ The minimum links property configures the port-channel min-links
130
+ value. This setting specifies the minimum number of physical
131
+ interfaces that must be operationally up for the Port-Channel
132
+ interface to be considered operationally up.
133
+
134
+ Valid range of values for the minimum_links property are from
135
+ 0 to 16.
136
+
137
+ The default value for minimum_links is 0
138
+ EOS
139
+
140
+ munge { |value| Integer(value) }
141
+
142
+ validate do |value|
143
+ unless value.to_i.between?(0, 16)
144
+ fail "value #{value.inspect} is not between 0 and 16"
145
+ end
146
+ end
147
+ end
148
+
149
+ newproperty(:lacp_fallback) do
150
+ desc <<-EOS
151
+ The lacp_fallback property configures the port-channel lacp
152
+ fallback setting in EOS for the specified interface. This
153
+ setting accepts the following values
154
+
155
+ * static - Fallback to static LAG mode
156
+ * individual - Fallback to individual ports
157
+ * disabled - Disable LACP fallback
158
+
159
+ The default value for lacp_fallback is :disabled
160
+ EOS
161
+
162
+ newvalues(:static, :individual, :disabled)
163
+ end
164
+
165
+ newproperty(:lacp_timeout) do
166
+ desc <<-EOS
167
+ The lacp_timeout property configures the port-channel lacp
168
+ timeout value in EOS for the specified interface. The fallback
169
+ timeout configures the period an interface in fallback mode
170
+ remains in LACP mode without receiving a PDU.
171
+
172
+ The lacp_timeout value is configured in seconds with a valid
173
+ range betwee 1 and 100.
174
+
175
+ The default value is 90
176
+ EOS
177
+
178
+ munge do |value|
179
+ Integer(value)
180
+ end
181
+
182
+ # Validate each value is a valid timeout value
183
+ validate do |value|
184
+ unless value.to_i.between?(1, 100)
185
+ fail "value #{value.inspect} is not between 1 and 100"
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,127 @@
1
+ #
2
+ # Copyright (c) 2014, Arista Networks, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are
7
+ # met:
8
+ #
9
+ # Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ #
12
+ # Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # Neither the name of Arista Networks nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
24
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30
+ # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ #
32
+
33
+ Puppet::Type.newtype(:eos_snmp) do
34
+ @doc = <<-EOS
35
+ This type manages the global SNMP configuration instance on EOS
36
+ nodes. It provides configuration resources for global SNMP
37
+ settings.
38
+ EOS
39
+
40
+ # Parameters
41
+
42
+ newparam(:name) do
43
+ desc <<-EOS
44
+ The name parameter identifis the global SNMP instance for
45
+ configuration and should be configured as 'settings'. All
46
+ other values for name will be silently ignored by the eos_snmp
47
+ provider.
48
+ EOS
49
+ end
50
+
51
+ # Properties (state management)
52
+
53
+ newproperty(:contact) do
54
+ desc <<-EOS
55
+ The contact property provides configuration management of the
56
+ SNMP contact value. This setting provides informative text that
57
+ typically displays the name of a person or organization associated
58
+ with the SNMP agent.
59
+
60
+ The default value for contact is ''
61
+ EOS
62
+
63
+ validate do |value|
64
+ case value
65
+ when String
66
+ super(value)
67
+ validate_features_per_value(value)
68
+ else fail "value #{value.inspect} is invalid, must be a String."
69
+ end
70
+ end
71
+ end
72
+
73
+ newproperty(:location) do
74
+ desc <<-EOS
75
+ The location property provides configuration management of the
76
+ SNMP location value. This setting typcially provides information
77
+ about the physical lcoation of the SNMP agent.
78
+
79
+ The default value for location is ''
80
+ EOS
81
+
82
+ validate do |value|
83
+ case value
84
+ when String
85
+ super(value)
86
+ validate_features_per_value(value)
87
+ else fail "value #{value.inspect} is invalid, must be a string."
88
+ end
89
+ end
90
+ end
91
+
92
+ newproperty(:chassis_id) do
93
+ desc <<-EOS
94
+ The chassis id propperty provides configuration management of
95
+ the SNMP chassis-id value. This setting typically provides
96
+ information to uniquely identify the SNMP agent host.
97
+
98
+ The default value for chassis_id is ''
99
+ EOS
100
+
101
+ validate do |value|
102
+ case value
103
+ when String
104
+ super(value)
105
+ validate_features_per_value(value)
106
+ else fail "value #{value.inspect} is invalid, must be a string."
107
+ end
108
+ end
109
+ end
110
+
111
+ newproperty(:source_interface) do
112
+ desc <<-EOS
113
+ The source interface property provides configuration management
114
+ of the SNMP source-interface value. The source interface value
115
+ configures the interface address to use as the source address
116
+ when sending SNMP packets on the network.
117
+
118
+ The default value for source_interface is ''
119
+ EOS
120
+
121
+ validate do |value|
122
+ unless value =~ /^[EMPLV]/
123
+ fail "value #{value.inspect} is invalid, must be an interface name"
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,94 @@
1
+ #
2
+ # Copyright (c) 2014, Arista Networks, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are
7
+ # met:
8
+ #
9
+ # Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ #
12
+ # Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # Neither the name of Arista Networks nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
24
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30
+ # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ #
32
+ # encoding: utf-8
33
+
34
+ Puppet::Type.newtype(:eos_stp_interface) do
35
+ @doc = <<-EOS
36
+ Manage Spanning Tree Protocol interface configuration.
37
+ EOS
38
+
39
+ # Parameters
40
+
41
+ newparam(:name) do
42
+ @doc = <<-EOS
43
+ The name parameter specifies the full interface identifier of
44
+ the Arista EOS interface to manage. This value must correspond
45
+ to a valid interface identifier in EOS and must be either an
46
+ Ethernet or Port Channel interface.
47
+ EOS
48
+ end
49
+
50
+ # Properties (state management)
51
+
52
+ newproperty(:portfast) do
53
+ @doc = <<-EOS
54
+ The portfast property programs an STP port to immediately enter
55
+ forwarding state when they establish a link. PortFast ports
56
+ are included in spanning tree topology calculations and can
57
+ enter blocking state. Valid portfast values:
58
+
59
+ * true - Enable portfast for the interface
60
+ * false - Disable portfast for the interface (default value)
61
+ EOS
62
+ newvalues(:true, :false)
63
+ end
64
+
65
+ newproperty(:portfast_type) do
66
+ @doc = <<-EOS
67
+ Specifies the STP portfast mode type for the interface. A port
68
+ with edge type connect to hosts and transition to the forwarding
69
+ state when the link is established. An edge port that receives a
70
+ BPDU becomes a normal port. A port with network type connect only
71
+ to switches or bridges and support bridge assurance. Network ports
72
+ that connect to hosts or other edge devices transition ot the
73
+ blocking state. Valid portfast mode types:
74
+
75
+ * edge - Set STP port mode type to edge.
76
+ * network - Set STP port mode type to network.
77
+ * normal - Set STP port mode type to normal (default value)
78
+ EOS
79
+ newvalues(:edge, :network, :normal)
80
+ end
81
+
82
+ newproperty(:bpduguard) do
83
+ @doc = <<-EOS
84
+ Enable or disable the BPDU guard on a port. A BPDU guard-enabled
85
+ port is disabled when it receives a BPDU packet. Disabled ports
86
+ differ from blocked ports in that they are re-enabled only
87
+ through manual intervention. Valid BPDU guard values:
88
+
89
+ * true - Enable the BPDU guard for the interface
90
+ * false - Disable the BPDU guard for the interface (default value)
91
+ EOS
92
+ newvalues(:true, :false)
93
+ end
94
+ end
@@ -0,0 +1,150 @@
1
+ #
2
+ # Copyright (c) 2014, Arista Networks, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are
7
+ # met:
8
+ #
9
+ # Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ #
12
+ # Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # Neither the name of Arista Networks nor the names of its
17
+ # contributors may be used to endorse or promote products derived from
18
+ # this software without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
24
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30
+ # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ #
32
+
33
+ Puppet::Type.newtype(:eos_switchport) do
34
+ @doc = <<-EOS
35
+ This type provides a resource for configuring logical layer 2
36
+ switchports in EOS. The resource provides configuration for both
37
+ access and trunk operating modes.
38
+
39
+ When creating a logical switchport interface, if the specified
40
+ physical interface was previously configured with an IP interface,
41
+ the logical IP interface will be removed.
42
+ EOS
43
+
44
+ ensurable
45
+
46
+ # Parameters
47
+
48
+ newparam(:name) do
49
+ desc <<-EOS
50
+ The name parameter specifies the full interface identifier of
51
+ the Arista EOS interface to manage. This value must correspond
52
+ to a valid interface identifier in EOS.
53
+
54
+ Only Ethernet and Port-Channel interfaces can be configured as
55
+ switchports.
56
+ EOS
57
+
58
+ validate do |value|
59
+ unless value =~ /^[Et|Po]/
60
+ fail 'value #{value.inspect} is invalid, must be of type ' \
61
+ 'Ethernet or Port-Channel'
62
+ end
63
+ end
64
+ end
65
+
66
+ # Properties (state management)
67
+
68
+ newproperty(:mode) do
69
+ desc <<-EOS
70
+ The mode property configures the operating mode of the
71
+ logical switchport. Suppport modes of operation include
72
+ access port or trunk port. The default value for a new
73
+ switchport is access
74
+
75
+ * access - Configures the switchport mode to access
76
+ * trunk - Configures the switchport mode to trunk
77
+
78
+ EOS
79
+ newvalues(:access, :trunk)
80
+ end
81
+
82
+ newproperty(:trunk_allowed_vlans, array_matching: :all) do
83
+ desc <<-EOS
84
+ The trunk_allowed_vlans property configures the list of
85
+ VLAN IDs that are allowed to pass on the switchport operting
86
+ in trunk mode. If the switchport is configured for access
87
+ mode, this property is configured but has no effect.
88
+
89
+ The list of allowed VLANs must be configured as an Array with
90
+ each entry in the valid VLAN range of 1 to 4094.
91
+
92
+ The default value for a new switchport is to allow all valid
93
+ VLAN IDs (1-4094).
94
+ EOS
95
+
96
+ munge do |value|
97
+ Integer(value)
98
+ end
99
+
100
+ validate do |value|
101
+ unless value.to_i.between?(1, 4_094)
102
+ fail "value #{value.inspect} is not between 1 and 4094"
103
+ end
104
+ end
105
+ end
106
+
107
+ newproperty(:trunk_native_vlan) do
108
+ desc <<-EOS
109
+ The trunk_native_vlan property specifies the VLAN ID to
110
+ be used for untagged traffic that enters the switchport
111
+ in trunk mode. If the switchport is configured for access
112
+ mode, this value is configured but has no effect. The value
113
+ must be an integer in the valid VLAN ID range of 1 to 4094.
114
+
115
+ The default value for the trunk_natve_vlan is 1
116
+ EOS
117
+
118
+ munge do |value|
119
+ Integer(value)
120
+ end
121
+
122
+ validate do |value|
123
+ unless value.to_i.between?(1, 4_094)
124
+ fail "value #{value.inspect} is not between 1 and 4094"
125
+ end
126
+ end
127
+ end
128
+
129
+ newproperty(:access_vlan) do
130
+ desc <<-EOS
131
+ The access_vlan property specifies the VLAN ID to be used
132
+ for untagged traffic that enters the switchport when configured
133
+ in access mode. If the switchport is configured for trunk mode,
134
+ this value is configured but has no effect. The value must be
135
+ an integer in the valid VLAN ID range of 1 to 4094.
136
+
137
+ The default value for the access_vlan is 1
138
+ EOS
139
+
140
+ munge do |value|
141
+ Integer(value)
142
+ end
143
+
144
+ validate do |value|
145
+ unless value.to_i.between?(1, 4_094)
146
+ fail "value #{value.inspect} is not between 1 and 4094"
147
+ end
148
+ end
149
+ end
150
+ end