arista-eos 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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