Simple program to write static config from config-drive
Go to file
Markos Chandras ac8458dac8 glean: Fix SUSE support for bridges and vlan configurations.
We need to check the /etc/sysconfig/network/ifcfg-* files for bridges
and vlans similar to regular interfaces. Moreover, the existing code for
checking whether the host is a SUSE distribution did not work for newer
releases (openSUSE Leap 15 is being reported as 'opensuse-leap' and
Tumbleweed is being reported as 'opensuse-tumbleweed') so we need to
refactor it a bit to actually check whether the string 'suse' exists in
the distro variable to simplify things.

Finally, the systemd service was missing the check for the SUSE network
files so we add that as well. systemd should apply a logical AND in
these conditionals so it should work fine on both Red Hat and SUSE
distros.

Change-Id: Ic5c6745dbe0077089ecaa1dd8f9b4949ac80efae
2018-06-06 12:31:13 +01:00
doc/source Update documentation 2015-12-15 12:57:57 +11:00
glean glean: Fix SUSE support for bridges and vlan configurations. 2018-06-06 12:31:13 +01:00
.coveragerc Change ignore-errors to ignore_errors 2015-09-21 14:23:11 +00:00
.gitignore Add coverage generated files to .gitignore 2016-07-06 10:12:21 -07:00
.gitreview gleam is taken, let's do glean instead 2015-04-12 16:06:41 -04:00
.mailmap Initial Cookiecutter Commit. 2015-03-02 19:05:03 -05:00
.testr.conf Initial Cookiecutter Commit. 2015-03-02 19:05:03 -05:00
CONTRIBUTING.rst Reference storyboard instead of launchpad 2015-04-12 15:56:20 -04:00
HACKING.rst gleam is taken, let's do glean instead 2015-04-12 16:06:41 -04:00
LICENSE Initial Cookiecutter Commit. 2015-03-02 19:05:03 -05:00
MANIFEST.in Initial Cookiecutter Commit. 2015-03-02 19:05:03 -05:00
README.rst Revert "Enable network.service with systemd" 2017-03-28 19:26:34 +11:00
rebuild-test-output.sh Support explicitly configured DHCP interfaces 2015-07-17 19:53:15 +00:00
setup.cfg Remove support for py33/py26 2017-02-07 08:11:32 +07:00
setup.py Import content from project-config patch 2015-03-02 20:12:23 -05:00
test-requirements.txt Remove discover from test-requirements 2016-07-22 04:55:17 +00:00
tox.ini Remove support for py33/py26 2017-02-07 08:11:32 +07:00

README.rst

glean

Glean is a program intended to configure a system based on configuration provided in a configuration drive.

Why would you want glean?

Different cloud providers have different ways of providing networking and other configuration to guest virtual-machines. Many use DHCP but others, notably Rackspace, use configuration provided via a configuration drive.

What does glean do?

Broadly, glean checks for configuration drive based information and, if found, uses that to configure the network. If config-drive is not found, it falls back to configuring any available interfaces with DHCP.

Specifically, it will mount the special block-device with label config-2 and parse the network_info.json and vendor_info.json files within. If appropriate network configuration is found, it will write out network configuration files.

The format of the network_info.json file is documented here. Please note that glean does not implement every feature listed.

If no network info is found there, available interfaces can be probed from /sys/class/net and any that appear to be up will be configured for use with DHCP.

It will also handle authorized_keys and host-name info provided from meta_data.json.

How does glean do this?

systemd environment

glean install will add a udev rules file (99-glean.rules) that triggers on any network device being added. This will run the glean@.service systemd template for the interface specified.

This systemd unit firstly determines if there is already a /etc/sysconfig/network/ configuration for the interface; if so, the interface is considered configured and skipped.

If not, glean is started with the interface specified. The configuration drive is probed to see if network configuration for the interface is available. If so, it will be added, otherwise the interface will configured for DHCP.

glean uses the network init scripts service network.service on RedHat platforms (or the equivalent on other platforms). You should ensure this service is enabled and other tools such as NetworkManager are disabled for correct operation.

How do I use glean?

Glean ships glean-install, a script which install glean into your system startup environment. It should handle sysv, upstart and systemd to cover all major distributions. This should be run once, during install or image build.

The startup environment will be modified as described above to configure any found interfaces.

Differences to cloud-init?

Glean differs to cloud-init mainly in its very reduced dependency footprint. In a dynamic CI environment such as OpenStack, many of the python dependencies for cloud-init can cause conflicts with packages or versions required for testing.

Glean also better supports static IP allocation within config-drive, particuarly important within the Rackspace environment.

More details