diff --git a/baremetal/files/apcupsd/killpower/portal b/baremetal/files/apcupsd/killpower/portal new file mode 100755 index 0000000000000000000000000000000000000000..c9f23e0f92fb29b4cb1affe65753140413f155b6 --- /dev/null +++ b/baremetal/files/apcupsd/killpower/portal @@ -0,0 +1,18 @@ +#!/bin/sh +# +# This shell script if placed in /etc/apcupsd +# will be called by /etc/apcupsd/apccontrol before +# apcupsd kills the power in the UPS. You probably +# need to edit this to mount read-only /usr and /var, +# otherwise apcupsd will not run. + +wall "portal shutdown imminent. processes using ENCRYPTED will be killed in 10 seconds." +service subsonic stop & +service samba stop & +kill -TERM `lsof -R -t /ENCRYPTED` || true +sleep 10 +pkill -9 java +kill -9 `lsof -R -t /ENCRYPTED` || true +zpool export ENCRYPTED + +exit 0 diff --git a/baremetal/files/apcupsd/killpower/rumo b/baremetal/files/apcupsd/killpower/rumo new file mode 100755 index 0000000000000000000000000000000000000000..a521a02a72f3d73c295f39f824235b681323e046 --- /dev/null +++ b/baremetal/files/apcupsd/killpower/rumo @@ -0,0 +1,28 @@ +#!/bin/sh +# +# This shell script if placed in /etc/apcupsd +# will be called by /etc/apcupsd/apccontrol before +# apcupsd kills the power in the UPS. You probably +# need to edit this to mount read-only /usr and /var, +# otherwise apcupsd will not run. + +wall "rumo shutdown imminent. storage services will be terminated within 20 seconds." +service nfs-kernel-server stop +service nfs-common stop +sleep 10 +kill -TERM `lsof -R -t /DATA` || true +kill -TERM `lsof -R -t /DATA/eschrank` || true +kill -TERM `lsof -R -t /DATA/home` || true +kill -TERM `lsof -R -t /DATA/isos` || true +kill -TERM `lsof -R -t /DATA/pub` || true +kill -TERM `lsof -R -t /DATA/www` || true +sleep 10 +kill -9 `lsof -R -t /DATA` || true +kill -9 `lsof -R -t /DATA/eschrank` || true +kill -9 `lsof -R -t /DATA/home` || true +kill -9 `lsof -R -t /DATA/isos` || true +kill -9 `lsof -R -t /DATA/pub` || true +kill -9 `lsof -R -t /DATA/www` || true +zpool export DATA + +exit 0 diff --git a/baremetal/files/apcupsd/killpower/video-main b/baremetal/files/apcupsd/killpower/video-main new file mode 100755 index 0000000000000000000000000000000000000000..cfdcf36d7e9f8c22ff2af43660a0abaea6085d6a --- /dev/null +++ b/baremetal/files/apcupsd/killpower/video-main @@ -0,0 +1,12 @@ +#!/bin/sh +# +# This shell script if placed in /etc/apcupsd +# will be called by /etc/apcupsd/apccontrol before +# apcupsd kills the power in the UPS. You probably +# need to edit this to mount read-only /usr and /var, +# otherwise apcupsd will not run. + +service apache stop +zpool export VIDEOAG + +exit 0 diff --git a/baremetal/files/apcupsd/onbattery/vm01 b/baremetal/files/apcupsd/onbattery/vm01 new file mode 100755 index 0000000000000000000000000000000000000000..6efd9db713658b3348ec9100362e98eeaeee59bb --- /dev/null +++ b/baremetal/files/apcupsd/onbattery/vm01 @@ -0,0 +1,22 @@ +#!/bin/sh +# +# This shell script if placed in /etc/apcupsd +# will be called by /etc/apcupsd/apccontrol when the UPS +# goes on batteries. +# We send an email message to root to notify him. +# +SYSADMIN=root +APCUPSD_MAIL="mail" + +HOSTNAME=`hostname` +MSG="$HOSTNAME Power Failure !!!" +# +( + echo "Subject: $MSG" + echo " " + echo "$MSG" + echo " " + /sbin/apcaccess status +) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN +/usr/bin/python2.7 /etc/apcupsd/onbattery.py +exit 0 diff --git a/baremetal/files/apcupsd/onbattery/vm02 b/baremetal/files/apcupsd/onbattery/vm02 new file mode 100755 index 0000000000000000000000000000000000000000..6efd9db713658b3348ec9100362e98eeaeee59bb --- /dev/null +++ b/baremetal/files/apcupsd/onbattery/vm02 @@ -0,0 +1,22 @@ +#!/bin/sh +# +# This shell script if placed in /etc/apcupsd +# will be called by /etc/apcupsd/apccontrol when the UPS +# goes on batteries. +# We send an email message to root to notify him. +# +SYSADMIN=root +APCUPSD_MAIL="mail" + +HOSTNAME=`hostname` +MSG="$HOSTNAME Power Failure !!!" +# +( + echo "Subject: $MSG" + echo " " + echo "$MSG" + echo " " + /sbin/apcaccess status +) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN +/usr/bin/python2.7 /etc/apcupsd/onbattery.py +exit 0 diff --git a/baremetal/files/apcupsd/vm-onbattery.py b/baremetal/files/apcupsd/vm-onbattery.py new file mode 100755 index 0000000000000000000000000000000000000000..4612aae94f3141587f7482661e139f988ebf8c16 --- /dev/null +++ b/baremetal/files/apcupsd/vm-onbattery.py @@ -0,0 +1,96 @@ +#!/usr/bin/python + + +import logging, time, sys, socket, os +import subprocess + +sys.path.append("/root/pyproxmox/src/") +from pyproxmox import * +logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) + +critical_infra = set([104, 105, 106, 108, 112]) # mail, admin, fsmuw, lists, vpn +hostname = socket.gethostname() + +proxmox_auth = prox_auth(hostname+'.fsmpi.rwth-aachen.de', 'apc@pve', '') + +pr = pyproxmox(proxmox_auth) + + +def shutdown( host, vmid ): + pr.shutdownVirtualMachine(host, vmid) + return + +def migrate( host, vmid, target ): + pr.migrateVirtualMachine(host, vmid, target, True) + return + +def stop( host, vmid ): + pr.stopVirtualMachine(host, vmid) + return + +def start( vmid ): + pr.startVirtualMachine(host, vmid) + return + +def getVMs( host ): + virt_index_list = pr.getNodeVirtualIndex(host)["data"] + return virt_index_list + +def getHostStatus( host ): + cluster = pr.getClusterStatus() + for i in cluster: + for j in cluster[i]: + if j["type"] == "node": + if j["name"] == host: + return bool(j["state"]) + else: + return False + return False + +def migrateCriticalVMs(dest_host, force=False): + vms = getVMs(hostname) + call_again = False + for vm in vms: + if vm['status'] == 'running': + if vm['vmid'] in critical_infra: + if hostname == dest_host: + logging.info("let vm {0} ({1}) run on {2}".format(vm['vmid'], vm['name'], hostname)) + else: + call_again = True + logging.info("migrate vm {0} ({1}) from {2} to {3}".format(vm['vmid'], vm['name'], hostname, dest_host)) + migrate(hostname, vm['vmid'], dest_host) + else: + call_again = True + if force: + logging.info("stop vm {0} ({1}) running on {2}".format(vm['vmid'], vm['name'], hostname)) + stop(hostname, vm['vmid']) + else: + logging.info("shutdown vm {0} ({1}) running on {2}".format(vm['vmid'], vm['name'], hostname)) + shutdown(hostname, vm['vmid']) + return call_again + +# issue vm migration and shutdown +other_hostname = "vm01" if hostname == "vm02" else "vm01" +#if getHostStatus(other_hostname): +for i in range(0, 3): + time.sleep(120*i) + force = True if i > 1 else False + logging.info("migrating critical vms from {0} to {1} (force: {2}).".format(hostname, "vm02", str(force))) + call_again = migrateCriticalVMs("vm02", force) + if not call_again: + break +#else: +# logging.warn("{0} is offline. vm migration is impossible".format(other_hostname)) + +vmsonhost = getVMs(hostname) +setvms = set() +for i in vmsonhost: + setvms.add(i['vmid']) + +# issue shutdown +if not len(setvms & critical_infra): + logging.info("no critical infra left. {0} may shutdown now.".format(hostname)) + subprocess.call(["shutdown", "-h", "now"]) +else: + logging.info("this host serves critical infra. {0} shall not halt.".format(hostname)) + diff --git a/baremetal/handlers/main.yml b/baremetal/handlers/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..ca1e9689930e59513c2c3b41211d58f910938f03 --- /dev/null +++ b/baremetal/handlers/main.yml @@ -0,0 +1,9 @@ +--- +# file: roles/baremetal/handlers/main.yml + +- name: restart lldpd + service: name=lldpd state=restarted + +- name: restart apcupsd + service: name=apcupsd state=restarted + diff --git a/baremetal/tasks/apcupsd.yml b/baremetal/tasks/apcupsd.yml new file mode 100644 index 0000000000000000000000000000000000000000..c289f7f5d8292579120d5b50a69301ea2a6a2f7a --- /dev/null +++ b/baremetal/tasks/apcupsd.yml @@ -0,0 +1,54 @@ +--- +# file: roles/baremetal/tasks/apcupsd.yml + +- name: ensure apcupsd is installed + apt: state=latest name=apcupsd + notify: + - restart apcupsd + tags: + - usv + - packages + +- name: ensure apcupsd is configured + template: src=apcupsd.conf.j2 dest=/etc/apcupsd/apcupsd.conf owner=root group=root mode=0644 + notify: + - restart apcupsd + tags: + - usv + - config + +- name: gather apcupsd killpower files + local_action: stat path=apcupsd/killpower/{{ ansible_hostname }} + register: killpower + +- name: ensure apcupsd killpower is configured + copy: src=apcupsd/killpower/{{ ansible_hostname }} dest=/etc/apcupsd/killpower owner=root group=root mode=0755 + when: killpower.stat.exists + tags: + - usv + - config + +- name: gather apcupsd onbattery files + local_action: stat path=apcupsd/onbattery/{{ ansible_hostname }} + register: onbattery + +- name: ensure apcupsd onbattery is configured + copy: src=apcupsd/onbattery/{{ ansible_hostname }} dest=/etc/apcupsd/onbattery owner=root group=root mode=0755 + when: onbattery.stat.exists + tags: + - usv + - config + +- name: ensure on vm hosts there is our fancy onbattery script + copy: src=apcupsd/vm-onbattery.py dest=/etc/apcupsd/onbattery.py owner=root group=root mode=0755 + when: "'vm' in ansible_hostname" + tags: + - usv + - config + +- name: ensure apcupsd is enabled and running + service: name=apcupsd state=running enabled=yes + tags: + - usv + - service + diff --git a/baremetal/tasks/bond.yml b/baremetal/tasks/bond.yml new file mode 100644 index 0000000000000000000000000000000000000000..8a3737ee3870aefa9b926c1dcbffd0653410a72d --- /dev/null +++ b/baremetal/tasks/bond.yml @@ -0,0 +1,16 @@ +--- +# file: roles/baremetal/tasks/bond.yml + +- name: ensure ifenslave is installed + apt: state=latest name=ifenslave + tags: + - bond + - packages + +- name: ensure bonding is configured + template: src=interfaces.j2 dest=/etc/network/interfaces owner=root group=root mode=0644 + when: "not 'vm' in ansible_hostname" + tags: + - bond + - config + diff --git a/baremetal/tasks/lldpd.yml b/baremetal/tasks/lldpd.yml index d00ef784f19de7abc4ff9f24e264f4f97a9830bf..8fc3c6f64fb68fe92d647bf64a925d94a763716f 100644 --- a/baremetal/tasks/lldpd.yml +++ b/baremetal/tasks/lldpd.yml @@ -1,8 +1,10 @@ --- -# file: roles/baremetal/tasks/software.yml +# file: roles/baremetal/tasks/lldpd.yml - name: ensure lldpd is installed apt: state=latest name=lldpd + notify: + - restart lldpd tags: - lldpd - packages diff --git a/baremetal/tasks/main.yml b/baremetal/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..36064f1de2b3dada131de17d55f188208afc0fa9 --- /dev/null +++ b/baremetal/tasks/main.yml @@ -0,0 +1,9 @@ +--- +# file: roles/baremetal/tasks/main.yml + +- include: apcupsd.yml +- meta: flush_handlers +- include: bond.yml +- meta: flush_handlers +- include: lldpd.yml +- meta: flush_handlers diff --git a/baremetal/templates/apcupsd.conf.j2 b/baremetal/templates/apcupsd.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..da24a4278d7a10724306a03748684c4cd425a5fc --- /dev/null +++ b/baremetal/templates/apcupsd.conf.j2 @@ -0,0 +1,329 @@ +## apcupsd.conf v1.1 ## +# +# for apcupsd release 3.14.10 (13 September 2011) - debian +# +# "apcupsd" POSIX config file + +# +# ========= General configuration parameters ============ +# + +# UPSNAME xxx +# Use this to give your UPS a name in log files and such. This +# is particulary useful if you have multiple UPSes. This does not +# set the EEPROM. It should be 8 characters or less. +UPSNAME {{ ups_name }} + +# UPSCABLE <cable> +# Defines the type of cable connecting the UPS to your computer. +# +# Possible generic choices for <cable> are: +# simple, smart, ether, usb +# +# Or a specific cable model number may be used: +# 940-0119A, 940-0127A, 940-0128A, 940-0020B, +# 940-0020C, 940-0023A, 940-0024B, 940-0024C, +# 940-1524C, 940-0024G, 940-0095A, 940-0095B, +# 940-0095C, M-04-02-2000 +# +UPSCABLE {{ ups_cable }} + +# To get apcupsd to work, in addition to defining the cable +# above, you must also define a UPSTYPE, which corresponds to +# the type of UPS you have (see the Description for more details). +# You must also specify a DEVICE, sometimes referred to as a port. +# For USB UPSes, please leave the DEVICE directive blank. For +# other UPS types, you must specify an appropriate port or address. +# +# UPSTYPE DEVICE Description +# apcsmart /dev/tty** Newer serial character device, appropriate for +# SmartUPS models using a serial cable (not USB). +# +# usb <BLANK> Most new UPSes are USB. A blank DEVICE +# setting enables autodetection, which is +# the best choice for most installations. +# +# net hostname:port Network link to a master apcupsd through apcupsd's +# Network Information Server. This is used if the +# UPS powering your computer is connected to a +# different computer for monitoring. +# +# snmp hostname:port:vendor:community +# SNMP network link to an SNMP-enabled UPS device. +# Hostname is the ip address or hostname of the UPS +# on the network. Vendor can be can be "APC" or +# "APC_NOTRAP". "APC_NOTRAP" will disable SNMP trap +# catching; you usually want "APC". Port is usually +# 161. Community is usually "private". +# +# netsnmp hostname:port:vendor:community +# OBSOLETE +# Same as SNMP above but requires use of the +# net-snmp library. Unless you have a specific need +# for this old driver, you should use 'snmp' instead. +# +# dumb /dev/tty** Old serial character device for use with +# simple-signaling UPSes. +# +# pcnet ipaddr:username:passphrase:port +# PowerChute Network Shutdown protocol which can be +# used as an alternative to SNMP with the AP9617 +# family of smart slot cards. ipaddr is the IP +# address of the UPS management card. username and +# passphrase are the credentials for which the card +# has been configured. port is the port number on +# which to listen for messages from the UPS, normally +# 3052. If this parameter is empty or missing, the +# default of 3052 will be used. +# +UPSTYPE {{ ups_type }} +DEVICE {{ ups_device }} + +# POLLTIME <int> +# Interval (in seconds) at which apcupsd polls the UPS for status. This +# setting applies both to directly-attached UPSes (UPSTYPE apcsmart, usb, +# dumb) and networked UPSes (UPSTYPE net, snmp). Lowering this setting +# will improve apcupsd's responsiveness to certain events at the cost of +# higher CPU utilization. The default of 60 is appropriate for most +# situations. +#POLLTIME 60 + +# LOCKFILE <path to lockfile> +# Path for device lock file. Not used on Win32. +LOCKFILE /var/lock + +# SCRIPTDIR <path to script directory> +# Directory in which apccontrol and event scripts are located. +SCRIPTDIR /etc/apcupsd + +# PWRFAILDIR <path to powerfail directory> +# Directory in which to write the powerfail flag file. This file +# is created when apcupsd initiates a system shutdown and is +# checked in the OS halt scripts to determine if a killpower +# (turning off UPS output power) is required. +PWRFAILDIR /etc/apcupsd + +# NOLOGINDIR <path to nologin directory> +# Directory in which to write the nologin file. The existence +# of this flag file tells the OS to disallow new logins. +NOLOGINDIR /etc + + +# +# ======== Configuration parameters used during power failures ========== +# + +# The ONBATTERYDELAY is the time in seconds from when a power failure +# is detected until we react to it with an onbattery event. +# +# This means that, apccontrol will be called with the powerout argument +# immediately when a power failure is detected. However, the +# onbattery argument is passed to apccontrol only after the +# ONBATTERYDELAY time. If you don't want to be annoyed by short +# powerfailures, make sure that apccontrol powerout does nothing +# i.e. comment out the wall. +ONBATTERYDELAY {{ ups_onbatdelay }} + +# +# Note: BATTERYLEVEL, MINUTES, and TIMEOUT work in conjunction, so +# the first that occurs will cause the initation of a shutdown. +# + +# If during a power failure, the remaining battery percentage +# (as reported by the UPS) is below or equal to BATTERYLEVEL, +# apcupsd will initiate a system shutdown. +BATTERYLEVEL {{ ups_batlevel }} + +# If during a power failure, the remaining runtime in minutes +# (as calculated internally by the UPS) is below or equal to MINUTES, +# apcupsd, will initiate a system shutdown. +MINUTES {{ ups_minutes }} + +# If during a power failure, the UPS has run on batteries for TIMEOUT +# many seconds or longer, apcupsd will initiate a system shutdown. +# A value of 0 disables this timer. +# +# Note, if you have a Smart UPS, you will most likely want to disable +# this timer by setting it to zero. That way, you UPS will continue +# on batteries until either the % charge remaing drops to or below BATTERYLEVEL, +# or the remaining battery runtime drops to or below MINUTES. Of course, +# if you are testing, setting this to 60 causes a quick system shutdown +# if you pull the power plug. +# If you have an older dumb UPS, you will want to set this to less than +# the time you know you can run on batteries. +TIMEOUT {{ ups_timeout }} + +# Time in seconds between annoying users to signoff prior to +# system shutdown. 0 disables. +ANNOY {{ ups_annoy }} + +# Initial delay after power failure before warning users to get +# off the system. +ANNOYDELAY {{ ups_annoydelay }} + +# The condition which determines when users are prevented from +# logging in during a power failure. +# NOLOGON <string> [ disable | timeout | percent | minutes | always ] +NOLOGON {{ ups_nologon }} + +# If KILLDELAY is non-zero, apcupsd will continue running after a +# shutdown has been requested, and after the specified time in +# seconds attempt to kill the power. This is for use on systems +# where apcupsd cannot regain control after a shutdown. +# KILLDELAY <seconds> 0 disables +KILLDELAY {{ ups_killdelay }} + +# +# ==== Configuration statements for Network Information Server ==== +# + +# NETSERVER [ on | off ] on enables, off disables the network +# information server. If netstatus is on, a network information +# server process will be started for serving the STATUS and +# EVENT data over the network (used by CGI programs). +NETSERVER on + +# NISIP <dotted notation ip address> +# IP address on which NIS server will listen for incoming connections. +# This is useful if your server is multi-homed (has more than one +# network interface and IP address). Default value is 0.0.0.0 which +# means any incoming request will be serviced. Alternatively, you can +# configure this setting to any specific IP address of your server and +# NIS will listen for connections only on that interface. Use the +# loopback address (127.0.0.1) to accept connections only from the +# local machine. +NISIP 127.0.0.1 + +# NISPORT <port> default is 3551 as registered with the IANA +# port to use for sending STATUS and EVENTS data over the network. +# It is not used unless NETSERVER is on. If you change this port, +# you will need to change the corresponding value in the cgi directory +# and rebuild the cgi programs. +NISPORT 3551 + +# If you want the last few EVENTS to be available over the network +# by the network information server, you must define an EVENTSFILE. +EVENTSFILE /var/log/apcupsd.events + +# EVENTSFILEMAX <kilobytes> +# By default, the size of the EVENTSFILE will be not be allowed to exceed +# 10 kilobytes. When the file grows beyond this limit, older EVENTS will +# be removed from the beginning of the file (first in first out). The +# parameter EVENTSFILEMAX can be set to a different kilobyte value, or set +# to zero to allow the EVENTSFILE to grow without limit. +EVENTSFILEMAX 10 + +# +# ========== Configuration statements used if sharing ============= +# a UPS with more than one machine + +# +# Remaining items are for ShareUPS (APC expansion card) ONLY +# + +# UPSCLASS [ standalone | shareslave | sharemaster ] +# Normally standalone unless you share an UPS using an APC ShareUPS +# card. +UPSCLASS standalone + +# UPSMODE [ disable | share ] +# Normally disable unless you share an UPS using an APC ShareUPS card. +UPSMODE disable + +# +# ===== Configuration statements to control apcupsd system logging ======== +# + +# Time interval in seconds between writing the STATUS file; 0 disables +STATTIME 0 + +# Location of STATUS file (written to only if STATTIME is non-zero) +STATFILE /var/log/apcupsd.status + +# LOGSTATS [ on | off ] on enables, off disables +# Note! This generates a lot of output, so if +# you turn this on, be sure that the +# file defined in syslog.conf for LOG_NOTICE is a named pipe. +# You probably do not want this on. +LOGSTATS off + +# Time interval in seconds between writing the DATA records to +# the log file. 0 disables. +DATATIME 0 + +# FACILITY defines the logging facility (class) for logging to syslog. +# If not specified, it defaults to "daemon". This is useful +# if you want to separate the data logged by apcupsd from other +# programs. +#FACILITY DAEMON + +# +# ========== Configuration statements used in updating the UPS EPROM ========= +# + +# +# These statements are used only by apctest when choosing "Set EEPROM with conf +# file values" from the EEPROM menu. THESE STATEMENTS HAVE NO EFFECT ON APCUPSD. +# + +# UPS name, max 8 characters +#UPSNAME UPS_IDEN + +# Battery date - 8 characters +#BATTDATE mm/dd/yy + +# Sensitivity to line voltage quality (H cause faster transfer to batteries) +# SENSITIVITY H M L (default = H) +#SENSITIVITY H + +# UPS delay after power return (seconds) +# WAKEUP 000 060 180 300 (default = 0) +#WAKEUP 60 + +# UPS Grace period after request to power off (seconds) +# SLEEP 020 180 300 600 (default = 20) +#SLEEP 180 + +# Low line voltage causing transfer to batteries +# The permitted values depend on your model as defined by last letter +# of FIRMWARE or APCMODEL. Some representative values are: +# D 106 103 100 097 +# M 177 172 168 182 +# A 092 090 088 086 +# I 208 204 200 196 (default = 0 => not valid) +#LOTRANSFER 208 + +# High line voltage causing transfer to batteries +# The permitted values depend on your model as defined by last letter +# of FIRMWARE or APCMODEL. Some representative values are: +# D 127 130 133 136 +# M 229 234 239 224 +# A 108 110 112 114 +# I 253 257 261 265 (default = 0 => not valid) +#HITRANSFER 253 + +# Battery charge needed to restore power +# RETURNCHARGE 00 15 50 90 (default = 15) +#RETURNCHARGE 15 + +# Alarm delay +# 0 = zero delay after pwr fail, T = power fail + 30 sec, L = low battery, N = never +# BEEPSTATE 0 T L N (default = 0) +#BEEPSTATE T + +# Low battery warning delay in minutes +# LOWBATT 02 05 07 10 (default = 02) +#LOWBATT 2 + +# UPS Output voltage when running on batteries +# The permitted values depend on your model as defined by last letter +# of FIRMWARE or APCMODEL. Some representative values are: +# D 115 +# M 208 +# A 100 +# I 230 240 220 225 (default = 0 => not valid) +#OUTPUTVOLTS 230 + +# Self test interval in hours 336=2 weeks, 168=1 week, ON=at power on +# SELFTEST 336 168 ON OFF (default = 336) +#SELFTEST 336 diff --git a/baremetal/templates/interfaces.j2 b/baremetal/templates/interfaces.j2 new file mode 100644 index 0000000000000000000000000000000000000000..b6b2451d2b08862c116650c7e460e948c0718ebb --- /dev/null +++ b/baremetal/templates/interfaces.j2 @@ -0,0 +1,19 @@ +# This file describes the network interfaces available on your system +# and how to activate them. For more information, see interfaces(5). + +source /etc/network/interfaces.d/* + +# The loopback network interface +auto lo +iface lo inet loopback + +# The bond0 +auto lo bond0 +iface bond0 inet static + address {{ ipaddr }} + netmask {{ netmask }} + gateway {{ gateway }} + slaves eth0 eth1 + bond_mode 802.3ad + bond_xmit_hash_policy layer2+3 +