Blame man/nm-cloud-setup.8

Packit Service 8f75d2
'\" t
Packit Service 8f75d2
.\"     Title: nm-cloud-setup
Packit Service 8f75d2
.\"    Author: 
Packit Service 8f75d2
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
Packit Service d0b836
.\"      Date: 12/23/2020
Packit Service 8f75d2
.\"    Manual: Automatic Network Configuration in Cloud with NetworkManager
Packit Service d0b836
.\"    Source: NetworkManager 1.29.7
Packit Service 8f75d2
.\"  Language: English
Packit Service 8f75d2
.\"
Packit Service d0b836
.TH "NM\-CLOUD\-SETUP" "8" "" "NetworkManager 1\&.29\&.7" "Automatic Network Configuratio"
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.\" * Define some portability stuff
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service 8f75d2
.\" http://bugs.debian.org/507673
Packit Service 8f75d2
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
Packit Service 8f75d2
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service 8f75d2
.ie \n(.g .ds Aq \(aq
Packit Service 8f75d2
.el       .ds Aq '
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.\" * set default formatting
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.\" disable hyphenation
Packit Service 8f75d2
.nh
Packit Service 8f75d2
.\" disable justification (adjust text to left margin only)
Packit Service 8f75d2
.ad l
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.\" * MAIN CONTENT STARTS HERE *
Packit Service 8f75d2
.\" -----------------------------------------------------------------
Packit Service 8f75d2
.SH "NAME"
Packit Service 8f75d2
nm-cloud-setup \- Overview of Automatic Network Configuration in Cloud
Packit Service 8f75d2
.SH "OVERVIEW"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
When running a virtual machine in a public cloud environment, it is desirable to automatically configure the network of that VM\&. In simple setups, the VM only has one network interface and the public cloud supports automatic configuration via DHCP, DHCP6 or IPv6 autoconf\&. However, on the virtual machine might have multiple network interfaces, or multiple IP addresses and IP subnets on one interface\&. Also, the administrator can reconfigure those settings while the machine is running\&. NetworkManager\*(Aqs nm\-cloud\-setup is a tool that automatically picks up such configuration and updates the network configuration of the host\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
Multiple cloud providers are supported\&. See
Packit Service 8f75d2
the section called \(lqSUPPORTED CLOUD PROVIDERS\(rq\&.
Packit Service 8f75d2
.SH "USE"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The goal of nm\-cloud\-setup is to be configuration\-less and work automatically\&. All you need is to opt\-in to the desired cloud providers (see
Packit Service 8f75d2
the section called \(lqENVIRONMENT VARIABLES\(rq) and run
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
Usually this is done by enabling the nm\-cloud\-setup\&.service systemd service and let it run periodically\&. For that there is both a nm\-cloud\-setup\&.timer systemd timer and a NetworkManager dispatcher script\&.
Packit Service 8f75d2
.SH "DETAILS"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
nm\-cloud\-setup configures the network by fetching the configuration from the well\-known meta data server of the cloud provider\&. That means, it already needs the network configured to the point where it can reach the meta data server\&. Commonly that means, that a simple connection profile is activated that possibly uses DHCP to get the primary IP address\&. NetworkManager will create such a profile for ethernet devices automatically if it is not configured otherwise via
Packit Service 8f75d2
"no\-auto\-default"
Packit Service 8f75d2
setting in NetworkManager\&.conf\&. One possible alternative may be to create such an initial profile with
Packit Service 8f75d2
\fBnmcli device connect "$DEVICE"\fR
Packit Service 8f75d2
or
Packit Service 8f75d2
\fBnmcli connection add type ethernet \&.\&.\&.\fR\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
nm\-cloud\-setup modifies the run time configuration akin to
Packit Service 8f75d2
\fBnmcli device modify\fR\&. With this approach, the configuration is not persisted and only preserved until the device disconnects\&.
Packit Service 8f75d2
.SS "/usr/libexec/nm\-cloud\-setup"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The binary
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR
Packit Service 8f75d2
does most of the work\&. It supports no command line arguments but can be configured via environment variables\&. See
Packit Service 8f75d2
the section called \(lqENVIRONMENT VARIABLES\(rq
Packit Service 8f75d2
for the supported environment variables\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
By default, all cloud providers are disabled unless you opt\-in by enabling one or several providers\&. If cloud providers are enabled, the program tries to fetch the host\*(Aqs configuration from a meta data server of the cloud via HTTP\&. If configuration could be not fetched, no cloud provider are detected and the program quits\&. If host configuration is obtained, the corresponding cloud provider is successfully detected\&. Then the network of the host will be configured\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
It is intended to re\-run nm\-cloud\-setup every time when the configuration (maybe) changes\&. The tool is idempotent, so it should be OK to also run it more often than necessary\&. You could run
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR
Packit Service 8f75d2
directly\&. However it may be preferable to restart the nm\-cloud\-setup systemd service instead or use the timer or dispatcher script to run it periodically (see below)\&.
Packit Service 8f75d2
.SS "nm\-cloud\-setup\&.service systemd unit"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
Usually
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR
Packit Service 8f75d2
is not run directly, but only by
Packit Service 8f75d2
\fBsystemctl restart nm\-cloud\-setup\&.service\fR\&. This ensures that the tool only runs once at any time\&. It also allows to integrate use the nm\-cloud\-setup systemd timer, and to enable/disable the service via systemd\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
As you need to set environment variable to configure nm\-cloud\-setup binary, you can do so via systemd override files\&. Try
Packit Service 8f75d2
\fBsystemctl edit nm\-cloud\-setup\&.service\fR\&.
Packit Service 8f75d2
.SS "nm\-cloud\-setup\&.timer systemd timer"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR
Packit Service 8f75d2
is intended to run whenever an update is necessary\&. For example, during boot when when changing the network configuration of the virtual machine via the cloud provider\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
One way to do this, is by enabling the nm\-cloud\-setup\&.timer systemd timer with
Packit Service 8f75d2
\fBsystemctl enable \-\-now nm\-cloud\-setup\&.timer\fR\&.
Packit Service 8f75d2
.SS "/usr/lib/NetworkManager/dispatcher\&.d/90\-nm\-cloud\-setup\&.sh"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
There is also a NetworkManager dispatcher script that will run for example when an interface is activated by NetworkManager\&. Together with the nm\-cloud\-setup\&.timer systemd timer this script is to automatically pick up changes to the network\&.
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The dispatcher script will do nothing, unless the systemd service is enabled\&. To use the dispatcher script you should therefor run
Packit Service 8f75d2
\fBsystemctl enable nm\-cloud\-setup\&.service\fR
Packit Service 8f75d2
once\&.
Packit Service 8f75d2
.SH "ENVIRONMENT VARIABLES"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The environment variables are used to configure
Packit Service 8f75d2
\fB/usr/libexec/nm\-cloud\-setup\fR\&. You may want to configure them in the systemd service with
Packit Service 8f75d2
\fBsystemctl edit nm\-cloud\-setup\&.service\fR\&.
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
NM_CLOUD_SETUP_LOG: control the logging verbosity\&. Set it one of
Packit Service 8f75d2
TRACE,
Packit Service 8f75d2
DEBUG,
Packit Service 8f75d2
INFO,
Packit Service 8f75d2
WARN,
Packit Service 8f75d2
ERR
Packit Service 8f75d2
or
Packit Service 8f75d2
OFF\&. The program will print message on stdout and the default level is
Packit Service 8f75d2
WARN\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
NM_CLOUD_SETUP_AZURE: boolean, whether Microsoft Azure support is enabled\&. Defaults to
Packit Service 8f75d2
no\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
NM_CLOUD_SETUP_EC2: boolean, whether Amazon EC2 (AWS) support is enabled\&. Defaults to
Packit Service 8f75d2
no\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
NM_CLOUD_SETUP_GCP: boolean, whether Google GCP support is enabled\&. Defaults to
Packit Service 8f75d2
no\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.SH "SUPPORTED CLOUD PROVIDERS"
Packit Service 8f75d2
.SS "Amazon EC2 (AWS)"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The tools tries to fetch configuration from
Packit Service 8f75d2
http://169\&.254\&.169\&.254/\&. Currently, it only configures IPv4 and does nothing about IPv6\&. It will do the following\&.
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
First fetch
Packit Service 8f75d2
http://169\&.254\&.169\&.254/latest/meta\-data/
Packit Service 8f75d2
to determine whether the expected API is present\&. This determines whether EC2 environment is detected and whether to proceed to configure the host using EC2 meta data\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Fetch
Packit Service 8f75d2
http://169\&.254\&.169\&.254/2018\-09\-24/meta\-data/network/interfaces/macs/
Packit Service 8f75d2
to get the list of available interface\&. Interfaces are identified by their MAC address\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Then for each interface fetch
Packit Service 8f75d2
http://169\&.254\&.169\&.254/2018\-09\-24/meta\-data/network/interfaces/macs/$MAC/subnet\-ipv4\-cidr\-block
Packit Service 8f75d2
and
Packit Service 8f75d2
http://169\&.254\&.169\&.254/2018\-09\-24/meta\-data/network/interfaces/macs/$MAC/local\-ipv4s\&. Thereby we get a list of local IPv4 addresses and one CIDR subnet block\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Then nm\-cloud\-setup iterates over all interfaces for which it could fetch IP configuration\&. If no ethernet device for the respective MAC address is found, it is skipped\&. Also, if the device is currently not activated in NetworkManager or if the currently activated profile has a user\-data
Packit Service 8f75d2
org\&.freedesktop\&.nm\-cloud\-setup\&.skip=yes, it is skipped\&.
Packit Service 8f75d2
.sp
Packit Service 8f75d2
Then, the tool will change the runtime configuration of the device\&.
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Add static IPv4 addresses for all the configured addresses from
Packit Service 8f75d2
local\-ipv4s
Packit Service 8f75d2
with prefix length according to
Packit Service 8f75d2
subnet\-ipv4\-cidr\-block\&. For example, we might have here 2 IP addresses like
Packit Service 8f75d2
"172\&.16\&.5\&.3/24,172\&.16\&.5\&.4/24"\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Choose a route table 30400 + the index of the interface and add a default route
Packit Service 8f75d2
0\&.0\&.0\&.0/0\&. The gateway is the first IP address in the CIDR subnet block\&. For example, we might get a route
Packit Service 8f75d2
"0\&.0\&.0\&.0/0 172\&.16\&.5\&.1 10 table=30401"\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
.RS 4
Packit Service 8f75d2
.ie n \{\
Packit Service 8f75d2
\h'-04'\(bu\h'+03'\c
Packit Service 8f75d2
.\}
Packit Service 8f75d2
.el \{\
Packit Service 8f75d2
.sp -1
Packit Service 8f75d2
.IP \(bu 2.3
Packit Service 8f75d2
.\}
Packit Service 8f75d2
Finally, add a policy routing rule for each address\&. For example
Packit Service 8f75d2
"priority 30401 from 172\&.16\&.5\&.3/32 table 30401, priority 30401 from 172\&.16\&.5\&.4/32 table 30401"\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.sp
Packit Service 8f75d2
With above example, this roughly corresponds for interface
Packit Service 8f75d2
eth0
Packit Service 8f75d2
to
Packit Service 8f75d2
\fBnmcli device modify "eth0" ipv4\&.addresses "172\&.16\&.5\&.3/24,172\&.16\&.5\&.4/24" ipv4\&.routes "0\&.0\&.0\&.0/0 172\&.16\&.5\&.1 10 table=30401" ipv4\&.routing\-rules "priority 30401 from 172\&.16\&.5\&.3/32 table 30401, priority 30401 from 172\&.16\&.5\&.4/32 table 30401"\fR\&. Note that this replaces the previous addresses, routes and rules with the new information\&. But also note that this only changes the run time configuration of the device\&. The connection profile is not affected by that\&.
Packit Service 8f75d2
.RE
Packit Service 8f75d2
.SS "Google Cloud Platform (GCP)"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The tools tries to fetch configuration from
Packit Service 8f75d2
http://metadata\&.google\&.internal/\&.
Packit Service 8f75d2
.SS "Microsoft Azure"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
The tools tries to fetch configuration from
Packit Service 8f75d2
http://169\&.254\&.169\&.254/\&.
Packit Service 8f75d2
.SH "SEE ALSO"
Packit Service 8f75d2
.PP
Packit Service 8f75d2
\fBNetworkManager\fR(8)
Packit Service 8f75d2
\fBnmcli\fR(1)