Add gentoo support

Required to support Gentoo is the ability to bind mount a new shared
directory.  In order to support this, _lxc_container_bind_mounts has
been created for use in per-distro variables.  For Gentoo the new bind
mounts allows the sharing of package data, shrinking both the container
size and the time needed to install packages.

Also needed was the creation of the `sysctl_path` variable as Gentoo
installs sysctl to an alternate location.

Change-Id: I8c20631aff9ee30289ef2f7f862ba0d4e1bb4569
This commit is contained in:
Matthew Thode 2019-01-24 18:48:03 -06:00
parent f067343085
commit c84d4924ef
No known key found for this signature in database
GPG Key ID: 64A37BEAAE19A4E8
5 changed files with 52 additions and 4 deletions

View File

@ -38,7 +38,7 @@
file:
path: "{{ item['host_directory'] }}"
state: "directory"
with_items: "{{ lxc_container_default_bind_mounts | union(lxc_container_bind_mounts) }}"
with_items: "{{ lxc_container_default_bind_mounts | union(_lxc_container_bind_mounts) | union(lxc_container_bind_mounts) }}"
delegate_to: "{{ physical_host }}"
- name: Add bind mount configuration to container
@ -46,7 +46,7 @@
dest: "/var/lib/lxc/{{ inventory_hostname }}/config"
line: "lxc.mount.entry = {{ item['host_directory'] }} {{ item['container_directory'].lstrip('/') }} none bind,create=dir 0 0"
backup: "true"
with_items: "{{ lxc_container_default_bind_mounts | union(lxc_container_bind_mounts) }}"
with_items: "{{ lxc_container_default_bind_mounts | union(_lxc_container_bind_mounts) | union(lxc_container_bind_mounts) }}"
delegate_to: "{{ physical_host }}"
register: bind_configuration_container
notify:

View File

@ -4,7 +4,7 @@ set -ev
# Generate the lxc container create prep commands
{{ lxc_container_commands }}
{% for item in lxc_container_default_bind_mounts | union(lxc_container_bind_mounts) %}
{% for item in lxc_container_default_bind_mounts | union(_lxc_container_bind_mounts) | union(lxc_container_bind_mounts) %}
{% if item['container_directory'] is defined %}
# Create dir "{{ item['container_directory'] }}"
mkdir -p "{{ item['container_directory'] }}"

View File

@ -10,7 +10,7 @@ Before=sysinit.target shutdown.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/sysctl -p
ExecStart={{ sysctl_path }}/sysctl -p
TimeoutSec=90s
[Install]

46
vars/gentoo.yml Normal file
View File

@ -0,0 +1,46 @@
---
# Copyright 2018, Matthew Thode
#
# 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.
# TODO: COnfigure with networkd or the other system.
# These seem to be unused placeholder items
lxc_container_default_route_interfaces: "/etc/network/interfaces.d/{{ item.value.interface }}.cfg"
lxc_container_interface_target: "/etc/network/interfaces.d/{{ item.value.interface }}.cfg"
lxc_container_default_interface: "/etc/network/interfaces"
# no official systemd image is published, but machinectl seems to work
lxc_container_backing_store: machinectl
lxc_container_map:
distro: gentoo
arch: "{{ lxc_architecture_mapping.get( hostvars[physical_host]['ansible_architecture'] | lower ) }}"
release: 17.0-systemd
lxc_container_default_config_list:
- "lxc.start.auto=1"
- "lxc.start.delay=15"
- "lxc.group=onboot"
- "lxc.group=openstack"
- "lxc.autodev=1"
- "lxc.pty.max=1024"
- "lxc.hook.autodev=/var/lib/lxc/{{ inventory_hostname }}/autodev"
sysctl_path: "/usr/sbin"
# shared binpkgs and distfiles
_lxc_container_bind_mounts:
- host_directory: "/openstack/portage/packages"
container_directory: "/usr/portage/packages"
- host_directory: "/openstack/portage/distfiles"
container_directory: "/usr/portage/distfiles"

View File

@ -18,3 +18,5 @@
# and "lxc_container_networks" variables and combined into a single
# immutable hash.
lxc_container_networks_combined: "{{ container_networks | default({}) | combine(container_extra_networks | default({})) | combine(lxc_container_networks) }}"
sysctl_path: "/sbin"
_lxc_container_bind_mounts: []