Add ability to create system vlans
This patch brings possibiltiy to create vlan interfaces, which later can be used with frrouting Change-Id: I7bf49496a9075bc6c9b566f60ff76e4afecf6b29
This commit is contained in:
parent
72aa27b649
commit
b1ed318d22
@ -11,4 +11,18 @@
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# limitations under the License.
|
||||
|
||||
# Set with list of vlans that needs to be configured
|
||||
# frr_vlans:
|
||||
# - vlan-raw-device: eth0
|
||||
# id: 100
|
||||
# address: 192.168.1.100
|
||||
# netmask: 255.255.255.0
|
||||
# network: 192.168.1.0
|
||||
# broadcast: 192.168.1.255
|
||||
# gateway: 192.168.1.1
|
||||
# mtu: 1496
|
||||
# up: route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
|
||||
# down: route del -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
|
||||
frr_vlans: []
|
||||
|
52
tasks/frr_vlans.yml
Normal file
52
tasks/frr_vlans.yml
Normal file
@ -0,0 +1,52 @@
|
||||
---
|
||||
# Copyright 2020, VEXXHOST, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
- name: Add required vlans
|
||||
become: true
|
||||
become_user: root
|
||||
block:
|
||||
- name: Install vlan package
|
||||
package:
|
||||
name: vlan
|
||||
state: present
|
||||
register: install_vlan
|
||||
until: install_vlan is success
|
||||
retries: 5
|
||||
delay: 2
|
||||
|
||||
- name: Load vlan modules
|
||||
modprobe:
|
||||
name: 8021q
|
||||
state: present
|
||||
when: install_vlan is changed
|
||||
|
||||
- name: Copy vlans config
|
||||
template:
|
||||
src: vlans.cfg.j2
|
||||
dest: "/etc/network/interfaces.d/vlan-{{ item.id }}.cfg"
|
||||
with_items: "{{ frr_vlans }}"
|
||||
register: distribute_vlans
|
||||
|
||||
- name: Stop interface
|
||||
command: "ifdown {{ item.item['vlan-raw-device'] }}.{{ item.item.id }}"
|
||||
with_items: "{{ distribute_vlans.results }}"
|
||||
when: item is changed
|
||||
changed_when: false
|
||||
|
||||
- name: Start interface
|
||||
command: "ifup {{ item.item['vlan-raw-device'] }}.{{ item.item.id }}"
|
||||
with_items: "{{ distribute_vlans.results }}"
|
||||
when: item is changed
|
||||
changed_when: false
|
@ -16,5 +16,9 @@
|
||||
- name: Gather variables for each operating system
|
||||
include_vars: "{{ ansible_os_family | lower }}.yml"
|
||||
|
||||
- name: Create required vlan interfaces
|
||||
include_tasks: frr_vlans.yml
|
||||
when: frr_vlans | length > 0
|
||||
|
||||
- name: Install frr
|
||||
include_tasks: frr_install.yml
|
||||
|
7
templates/vlans.cfg.j2
Normal file
7
templates/vlans.cfg.j2
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
auto {{ item['vlan-raw-device'] }}.{{ item.id }}
|
||||
iface {{ item['vlan-raw-device'] }}.{{ item.id }} inet {{ ('address' in item) | ternary('static', 'manual') }}
|
||||
{% set _ = item.pop('id') %}
|
||||
{% for key, value in item.items() %}
|
||||
{{ key }} {{ value }}
|
||||
{% endfor %}
|
@ -15,6 +15,8 @@
|
||||
|
||||
- name: Installing frr
|
||||
hosts: all
|
||||
vars_files:
|
||||
- test_vars.yml
|
||||
roles:
|
||||
- frrouting
|
||||
|
||||
@ -23,6 +25,16 @@
|
||||
pause:
|
||||
seconds: 30
|
||||
|
||||
- name: Ping vlans ip address
|
||||
shell: |
|
||||
set -e
|
||||
ping -c2 "{{ item.address }}"
|
||||
register: _ping_vlan
|
||||
until: _ping_vlan is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
with_items: "{{ frr_vlans }}"
|
||||
|
||||
- name: Check service state
|
||||
service_facts:
|
||||
|
||||
|
22
tests/test_vars.yml
Normal file
22
tests/test_vars.yml
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
# Copyright 2020, VEXXHOST, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
frr_vlans:
|
||||
- vlan-raw-device: eth0
|
||||
id: 100
|
||||
address: 192.168.1.100
|
||||
netmask: 255.255.255.0
|
||||
network: 192.168.1.0
|
||||
broadcast: 192.168.1.255
|
Loading…
Reference in New Issue
Block a user