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
@ -12,3 +12,17 @@
|
|||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# 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
|
- name: Gather variables for each operating system
|
||||||
include_vars: "{{ ansible_os_family | lower }}.yml"
|
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
|
- name: Install frr
|
||||||
include_tasks: frr_install.yml
|
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
|
- name: Installing frr
|
||||||
hosts: all
|
hosts: all
|
||||||
|
vars_files:
|
||||||
|
- test_vars.yml
|
||||||
roles:
|
roles:
|
||||||
- frrouting
|
- frrouting
|
||||||
|
|
||||||
@ -23,6 +25,16 @@
|
|||||||
pause:
|
pause:
|
||||||
seconds: 30
|
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
|
- name: Check service state
|
||||||
service_facts:
|
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