Remove support for nspawn containers.

Support for nspawn was previously deprecated, and is now removed.

Change-Id: I37811d66eedf7aa781d4365024b7181ba44081bc
This commit is contained in:
Jonathan Rosser 2021-03-23 17:15:30 +00:00 committed by Dmitriy Rabotyagov
parent 07b9550f15
commit 24b8ea0ba6
27 changed files with 20 additions and 762 deletions

View File

@ -293,16 +293,6 @@
src: https://github.com/noonedeadpunk/ansible-pacemaker-corosync
trackbranch: master
version: master
- name: nspawn_container_create
src: https://opendev.org/openstack/openstack-ansible-nspawn_container_create
scm: git
version: master
trackbranch: master
- name: nspawn_hosts
src: https://opendev.org/openstack/openstack-ansible-nspawn_hosts
scm: git
version: master
trackbranch: master
- name: systemd_service
src: https://opendev.org/openstack/ansible-role-systemd_service
scm: git

View File

@ -39,6 +39,3 @@ The following are some useful commands to manage LXC:
# lxc-stop --name container_name
Systemd nspawn commands
=======================

View File

@ -218,40 +218,3 @@ To omit a component from a deployment, you can use one of several options:
you specify the component to run directly on a host by using the ``is_metal``
property, a container is created for this component.
Deploying using a different container technology
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. warning::
While nspawn is an available containerization technology it should be
considered unmaintained and it's support will be removed in the upcoming
release.
OpenStack-Ansible presently supports two different container technologies, LXC
and nspawn. These two container technologies can be used separately or together
within the same cluster but has a limitation of only one setting per host.
Using ``shared-infra_hosts`` as an example, consider this
``openstack_user_config.yml`` configuration:
.. code-block:: yaml
shared-infra_hosts:
infra1:
ip: 172.29.236.101
container_vars:
container_tech: lxc
infra2:
ip: 172.29.236.102
container_vars:
container_tech: nspawn
infra3:
ip: 172.29.236.103
In this example the three hosts are assigned to the `shared-infra_hosts` group,
and will deploy containerized workloads using ``lxc`` on **infra1**, ``nspawn``
on **infra2**, and ``lxc`` on **infra3**. Notice **infra3** does not define the
``container_tech`` option because it not required. If this option is undefined
the value will automatically be set to ``lxc`` within the generated inventory.
The two supported options for the ``container_tech`` configuration variable are
``lxc`` or ``nspawn``.

View File

@ -231,7 +231,7 @@ It is possible to also do this (and change other defaults) during the bootstrap
script initial execution by changing the SCENARIO environment variable before
running the script. The key word 'aio' will ensure that a basic set of
OpenStack services (cinder, glance, horizon, neutron, nova) will be deployed.
The key words 'lxc' and 'nspawn' can be used to set the container back-end,
The key words 'lxc' can be used to set the container back-end,
while the key word 'metal' will deploy all services without containers. In
order to implement any other services, add the name of the conf.d file name
without the `.yml.aio` extension into the SCENARIO environment variable. Each

View File

@ -1,140 +0,0 @@
---
cidr_networks:
container: "172.29.236.0/22"
flat: 172.29.240.0/22
storage: "172.29.244.0/22"
vxlan: "172.29.248.0/22"
used_ips:
- 172.29.236.100,172.29.236.200
- 172.29.240.110,172.29.240.200
- 172.29.241.0,172.29.241.254
- 172.29.242.100,172.29.242.200
- 172.29.244.100,172.29.244.200
- 172.29.248.100,172.29.248.200
global_overrides:
internal_lb_vip_address: 172.29.236.100
external_lb_vip_address: "{{ bootstrap_host_public_address | default(ansible_facts['default_ipv4']['address']) }}"
tunnel_bridge: "mv-vxlan"
management_bridge: "mv-{{ ansible_facts['default_ipv4']['alias'] }}"
provider_networks:
- network:
container_bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
container_interface: "mv-container"
ip_from_q: "container"
type: "raw"
is_container_address: true
group_binds:
- all_containers
- hosts
- network:
container_bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
container_interface: "mv-flat"
host_bind_override: "mv-flat"
ip_from_q: "flat"
type: "flat"
net_name: "flat"
group_binds:
- neutron_linuxbridge_agent
- octavia-worker
- octavia-housekeeping
- octavia-health-manager
- rabbitmq
- utility_all
- network:
container_bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
container_interface: "mv-storage"
ip_from_q: "storage"
type: "raw"
is_container_address: true
group_binds:
- glance_api
- cinder_api
- cinder_volume
- nova_compute
- swift_proxy
- network:
container_bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
container_interface: "mv-vxlan"
ip_from_q: "vxlan"
type: "vxlan"
net_name: "vxlan"
range: "1:1000"
group_binds:
- neutron_linuxbridge_agent
###
### Anchors
###
# NOTE(cloudull): This section and is only present as a way to show how blocks
# can be used to to simplify config when hosts serve multiple
# roles. In this case the AIO block is defined once and used
# for all other components without needing to duplicate config.
aio_block: &aio_info_block
aio1:
ip: 172.29.236.100
host_vars:
# NOTE(cloudnull): local connection is used in the gate because of the
# current gate scripts are structured. Once inline fact
# gathering is moved/removed this option can be removed.
ansible_connection: local
#
# NOTE(cloudnull): Currently set to false to speed up the test, set this
# true at a later date, when confidence is higher.
apply_security_hardening: false
#
# NOTE(cloudull): This is an example of an extra network that will be
# created on the host. This is used to setup a local host
# for testing with tempest and not something that is used
# in production.
#
# + The flat network configuration option provided here
# was created so a user can interact with a local flat
# network without any manual intervention. In a
# poduction setup with VLAN tagged interfaces or
# multiple nics this would not be required.
#
# + The "vxlan" network configuration option is provided
# so test instances can be built using l3 networks. In a
# normal production environment this would not be needed
# as a physical device (or vlan tagged interface) would
# be used and should already have an IP address assigned
# to it.
container_extra_networks:
container_network:
bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
interface: mv-container
address: 172.29.236.100
netmask: 255.255.252.0
flat_network:
bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
interface: mv-flat
address: 172.29.240.100
netmask: 255.255.252.0
storage_network:
bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
interface: mv-storage
address: 172.29.244.100
netmask: 255.255.252.0
vxlan_network:
bridge: "{{ ansible_facts['default_ipv4']['alias'] }}"
interface: mv-vxlan
address: 172.29.248.100
netmask: 255.255.252.0
container_vars:
# Optional | container_tech for a target host, default is "lxc".
container_tech: "nspawn"
###
### Infrastructure
###
# galera, memcache, rabbitmq, utility
shared-infra_hosts: *aio_info_block
# repository (apt cache, python packages, etc)
repo-infra_hosts: *aio_info_block

View File

@ -54,9 +54,6 @@ global_overrides:
# neutron public addresses, LXC
- cidr: 172.29.248.0/22
gateway: 172.29.236.100
# neutron public networks, nspawn
- cidr: 172.29.240.0/22
gateway: 172.29.236.100
{% if 'ovn' in bootstrap_host_scenarios_expanded %}
- network:
container_bridge: "br-vxlan"
@ -193,9 +190,6 @@ global_overrides:
shared-infra_hosts:
aio1:
ip: 172.29.236.100
container_vars:
# Optional | container_tech for a target host, default is "lxc".
container_tech: "{{ bootstrap_host_container_tech }}"
{% if 'infra' in bootstrap_host_scenarios_expanded %}
affinity:
galera_container: 3

View File

@ -318,38 +318,6 @@
# infra3:
# ip: 172.29.236.103
#
# List of target hosts on which to deploy shared infrastructure services
# and define the container_tech for a specific infra node. If this setting
# is omitted the inventory generation system will default to "lxc". Accpetable
# options are "lxc" and "nspawn". Please note, that nspawn is unmaintained
# and will be removed in the upcoming release
#
# Level: <value> (required, string)
# Hostname of a target host.
#
# Option: ip (required, string)
# IP address of this target host, typically the IP address assigned to
# the management bridge.
#
# Level: container_vars (required)
# Contains storage options for this target host.
#
# Example:
#
# Define three shared infrastructure hosts with different "container_tech":
#
# shared-infra_hosts:
# infra1:
# ip: 172.29.236.101
# container_vars:
# container_tech: nspawn
# infra2:
# ip: 172.29.236.102
# container_vars:
# container_tech: lxc
# infra3:
# ip: 172.29.236.103
#
# --------
#
# Level: repo-infra_hosts (required)

View File

@ -115,7 +115,7 @@ class MissingStaticRouteInfo(Exception):
class LxcHostsDefined(Exception):
def __init__(self):
self.message = ("The group 'lxc_hosts' or 'nspawn_hosts' must not"
self.message = ("The group 'lxc_hosts' must not"
" be defined in config; it will be dynamically "
" generated.")
@ -637,7 +637,7 @@ def _add_additional_networks(key, inventory, ip_q, q_name, netmask, interface,
is_metal = properties.get('is_metal', False)
_network = network_entry(
is_metal and (container.get('container_tech') != 'nspawn'),
is_metal,
interface,
bridge,
net_type,
@ -786,10 +786,9 @@ def populate_lxc_hosts(inventory):
:param inventory: The dictionary containing the Ansible inventory
"""
lxc_host_nodes, nspawn_host_nodes = _find_lxc_hosts(inventory)
inventory['nspawn_hosts'] = {'hosts': nspawn_host_nodes}
lxc_host_nodes = _find_lxc_hosts(inventory)
inventory['lxc_hosts'] = {'hosts': lxc_host_nodes}
logger.debug("Created lxc_hosts and nspawn_hosts group.")
logger.debug("Created lxc_hosts group.")
def _find_lxc_hosts(inventory):
@ -807,7 +806,6 @@ def _find_lxc_hosts(inventory):
:rtype: list
"""
lxc_host_nodes = []
nspawn_host_nodes = []
for host, hostvars in inventory['_meta']['hostvars'].items():
physical_host = hostvars.get('physical_host', None)
container_tech = hostvars.get('container_tech', 'lxc')
@ -820,19 +818,14 @@ def _find_lxc_hosts(inventory):
array=lxc_host_nodes,
item=physical_host
)
elif container_tech == 'nspawn':
appended = du.append_if(
array=nspawn_host_nodes,
item=physical_host
)
else:
appended = None
if appended:
logger.debug("%s added to lxc_hosts and nspawn_hosts group",
logger.debug("%s added to lxc_hosts group",
physical_host)
return lxc_host_nodes, nspawn_host_nodes
return lxc_host_nodes
def _ensure_inventory_uptodate(inventory, container_skel):
@ -958,9 +951,7 @@ def _check_multiple_ips_to_host(config):
def _check_lxc_hosts(config):
if 'lxc_hosts' in config.keys():
raise LxcHostsDefined()
elif 'nspawn_hosts' in config.keys():
raise LxcHostsDefined()
logger.debug("lxc_hosts or nspawn_hosts group not defined")
logger.debug("lxc_hosts group not defined")
def _check_group_branches(config, physical_skel):

View File

@ -1,129 +0,0 @@
---
# Copyright 2017, Rackspace US, 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: Pull systemd version
command: "systemctl --version"
changed_when: false
register: systemd_version
delegate_to: "{{ physical_host }}"
tags:
- skip_ansible_lint
- always
- name: Set facts
set_fact:
nspawn_systemd_version: "{{ systemd_version.stdout_lines[0].split()[-1] }}"
tags:
- always
- name: Escape quote container name
command: "systemd-escape {{ inventory_hostname }}"
changed_when: false
register: systemd_escape
delegate_to: "{{ physical_host }}"
tags:
- skip_ansible_lint
- always
- name: Ensure mount directories exists (physical host)
file:
path: "{{ item['mount_path'] }}"
state: "directory"
with_items:
- "{{ list_of_bind_mounts | default([]) }}"
delegate_to: "{{ physical_host }}"
tags:
- common-nspawn
- name: Ensure mount directories exists (container)
file:
path: "{{ item['bind_dir_path'] }}"
state: "directory"
with_items:
- "{{ list_of_bind_mounts | default([]) }}"
tags:
- common-nspawn
- name: Create container bind mount config
lineinfile:
dest: "/etc/systemd/nspawn/{{ inventory_hostname }}.nspawn"
line: "Bind={{ item['mount_path'] }}:{{ item['bind_dir_path'] }}"
insertafter: "^Bind"
backup: "true"
with_items:
- "{{ list_of_bind_mounts | default([]) }}"
delegate_to: "{{ physical_host }}"
register: add_bind
when:
- nspawn_systemd_version | int > 219
tags:
- common-nspawn
- name: Create container bind mount config (old)
block:
- name: Get ExecStart from config
shell: >-
grep -w '^ExecStart=/usr/bin/systemd-nspawn'
/etc/systemd/system/systemd-nspawn@$(/usr/bin/systemd-escape {{ inventory_hostname }}).service
delegate_to: "{{ physical_host }}"
register: _ec_old_start
changed_when: false
- name: set flag fact
set_fact:
nspawn_flags: "{{ _ec_old_start.stdout.split('ExecStart=/usr/bin/systemd-nspawn')[-1] }}"
nspawn_extra_flags: "{% for item in list_of_bind_mounts %} --bind={{ item['mount_path'] }}:{{ item['bind_dir_path'] }}{% endfor %}"
- name: set flag list
set_fact:
nspawn_flag_list: "{{ nspawn_flags.split() | union(nspawn_extra_flags.split()) | unique }}"
- name: Add line in container start config
lineinfile:
dest: "/etc/systemd/system/systemd-nspawn@{{ systemd_escape.stdout }}.service"
line: "ExecStart=/usr/bin/systemd-nspawn {{ nspawn_flag_list | join(' ') }}"
regexp: "^ExecStart"
backup: "true"
delegate_to: "{{ physical_host }}"
register: _ec
when:
- list_of_bind_mounts | default([])
- nspawn_systemd_version | int < 220
tags:
- common-nspawn
- name: Restart container
systemd:
name: "systemd-nspawn@{{ systemd_escape.stdout }}"
state: restarted
register: _container_restart
until: _container_restart is success
retries: 3
delay: 5
delegate_to: "{{ physical_host }}"
when:
- (_ec is defined and _ec is changed) or
(add_bind is defined and add_bind is changed)
tags:
- common-nspawn
- name: Wait for container connectivity
wait_for_connection:
delay: 3
timeout: 60
when:
- _container_restart is changed
tags:
- common-nspawn

View File

@ -15,5 +15,3 @@
- import_playbook: "containers-lxc-host.yml"
- import_playbook: "containers-lxc-create.yml"
- import_playbook: "containers-nspawn-host.yml"
- import_playbook: "containers-nspawn-create.yml"

View File

@ -1,120 +0,0 @@
---
# Copyright 2017, Rackspace US, 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: Gather nspawn host facts
hosts: "{{ nspawn_host_group | default('nspawn_hosts') }}"
gather_facts: true
tags:
- always
- name: Set nspawn containers group
hosts: "{{ container_group | default('all_containers') }}"
gather_facts: false
tags:
- always
- nspawn-containers-create
tasks:
- name: Add hosts to dynamic inventory group
group_by:
key: nspawn_containers
parents: all_nspawn_containers
when:
- container_tech == 'nspawn'
- name: Create container(s)
hosts: all_nspawn_containers
gather_facts: false
user: root
environment: "{{ deployment_environment_variables | default({}) }}"
tags:
- nspawn-containers-create
roles:
- role: "nspawn_container_create"
post_tasks:
- name: Wait for container connectivity
wait_for_connection:
connect_timeout: "{{ lxc_container_wait_params.connect_timeout | default(omit) }}"
delay: "{{ lxc_container_wait_params.delay | default(omit) }}"
sleep: "{{ lxc_container_wait_params.sleep | default(omit) }}"
timeout: "{{ lxc_container_wait_params.timeout | default(omit) }}"
- name: Rescan storage quotas
hosts: "{{ nspawn_host_group | default('nspawn_hosts') }}"
gather_facts: false
tags:
- nspawn-containers-create
tasks:
- name: Rescan quotas
command: "btrfs quota rescan -w /var/lib/machines"
changed_when: false
- name: Gather nspawn containers facts
hosts: all_nspawn_containers
gather_facts: true
tags:
- always
- name: Configure containers default software
hosts: all_nspawn_containers
gather_facts: false
user: root
vars_files:
- defaults/repo_packages/openstack_services.yml
- "defaults/{{ install_method }}_install.yml"
environment: "{{ deployment_environment_variables | default({}) }}"
tags:
- nspawn-containers-create
pre_tasks:
- name: Update package cache (apt)
package:
update_cache: yes
force_apt_get: yes
force: yes
register: cache_update
until: cache_update is success
retries: 5
delay: 15
when:
- ansible_facts['pkg_mgr'] == 'apt'
- name: Update package cache (zypper)
zypper_repository:
repo: '*'
runrefresh: yes
register: cache_update
until: cache_update is success
retries: 5
delay: 15
when:
- ansible_facts['pkg_mgr'] == 'zypper'
# When using gather_facts with smart gathering,
# the facts aren't fully updated unless they
# are old. Using the setup module in a task
# does a more thorough collection.
# Given we've just created the container, it is
# best that we do a full collection of facts -
# otherwise we end up with a stale set which
# has stuff like the hostname = localhost.
- name: Gather facts for new container(s)
setup:
gather_subset: "network,hardware,virtual"
roles:
- role: "openstack_hosts"
is_container: true

View File

@ -1,110 +0,0 @@
---
# Copyright 2017, Rackspace US, 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: Set nspawn containers group
hosts: "{{ container_group | default('all_containers') }}"
gather_facts: false
tasks:
- name: Add hosts to dynamic inventory group
group_by:
key: nspawn_containers
parents: all_nspawn_containers
when:
- container_tech == 'nspawn'
tags:
- always
- nspawn-containers-destroy
- name: Destroy nspawn containers
hosts: all_nspawn_containers
gather_facts: false
user: root
tasks:
- name: Get container status
command: machinectl status "{{ inventory_hostname }}"
register: machinectl_status
failed_when: false
delegate_to: "{{ physical_host }}"
- name: Get container image status
command: machinectl image-status "{{ inventory_hostname }}"
register: machinectl_image_status
failed_when: false
delegate_to: "{{ physical_host }}"
- name: Escape quote container name
command: "systemd-escape {{ inventory_hostname }}"
changed_when: false
register: systemd_escape
delegate_to: "{{ physical_host }}"
- name: Get machine-id
shell: >-
hostnamectl --machine="{{ inventory_hostname }}" status | awk '/Machine ID/ {print $3}'
register: _container_machine_id
delegate_to: "{{ physical_host }}"
- name: Disable container
systemd:
name: "systemd-nspawn@{{ systemd_escape.stdout }}"
state: stopped
enabled: false
failed_when: false
delegate_to: "{{ physical_host }}"
when:
- force_containers_destroy | bool
- name: Halt container
command: "machinectl poweroff {{ inventory_hostname }}"
failed_when: false
delegate_to: "{{ physical_host }}"
when:
- machinectl_status.rc == 0
- force_containers_destroy | bool
- name: Remove container
command: "machinectl remove {{ inventory_hostname }}"
delegate_to: "{{ physical_host }}"
when:
- machinectl_image_status.rc == 0
- force_containers_destroy | bool
- include_tasks: "common-tasks/remove_container_journal.yml"
vars:
container_machine_id: "{{ (_container_machine_id.stdout).strip() }}"
- name: Destroy container data
file:
path: "{{ item }}"
state: "absent"
with_items:
- "/openstack/{{ container_name }}"
- "/openstack/backup/{{ container_name }}"
- "/openstack/log/{{ container_name }}"
delegate_to: "{{ physical_host }}"
when:
- force_containers_destroy | bool
- force_containers_data_destroy | bool
vars_prompt:
- name: "force_containers_destroy"
prompt: "Are you sure you want to destroy the nspawn containers?"
default: "no"
private: no
- name: "force_containers_data_destroy"
prompt: "Are you sure you want to destroy the nspawn container data?"
default: "no"
private: no
tags:
- nspawn-containers-destroy

View File

@ -1,32 +0,0 @@
---
# Copyright 2017, Rackspace US, 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: Gather nspawn hosts facts
hosts: "{{ nspawn_host_group | default('nspawn_hosts') }}"
gather_facts: true
tags:
- always
- name: Additional nspawn host setup
hosts: "{{ nspawn_host_group | default('nspawn_hosts') }}"
gather_facts: false
vars_files:
- "defaults/{{ install_method }}_install.yml"
user: root
roles:
- role: "nspawn_hosts"
environment: "{{ deployment_environment_variables | default({}) }}"
tags:
- nspawn-hosts

View File

@ -32,13 +32,6 @@
command: pgrep dnsmasq
changed_when: false
- name: Ensuring hosts good behavior
hosts: nspawn_hosts
gather_facts: yes
tasks:
- debug:
msg: "To be implemented. Please help."
- name: Ensuring containers creation, connection and good behavior
hosts: all_containers
gather_facts: yes

View File

@ -0,0 +1,5 @@
---
upgrade:
- |
The Wallaby release of openstack-ansible does not support deployment of
the control plane in nspawn containers.

View File

@ -311,12 +311,6 @@ function get_instance_info {
lxc-checkconfig > \
"/openstack/log/instance-info/host_lxc_config_info_${TS}.log" || true
fi
if [ "$(which machinectl)" ]; then
machinectl list > \
"/openstack/log/instance-info/host_nspawn_container_info_${TS}.log" || true
machinectl list-images > \
"/openstack/log/instance-info/host_nspawn_container_image_info_${TS}.log" || true
fi
if [ "$(which networkctl)" ]; then
networkctl list > \
"/openstack/log/instance-info/host_networkd_list_${TS}.log" || true
@ -337,13 +331,6 @@ function get_instance_info {
get_repos_info > \
"/openstack/log/instance-info/host_repo_info_${TS}.log" || true
for i in nspawn-macvlan.service nspawn-networking.slice nspawn.slice; do
if [ "$(systemctl is-active --quiet ${i})" ]; then
systemctl status ${i} > "/openstack/log/instance-info/${i}_${TS}.log" || true
journalctl -u ${i} >> "/openstack/log/instance-info/${i}_${TS}.log" || true
fi
done
ip route get 1 > "/openstack/log/instance-info/routes_${TS}.log" || true
ip link show > "/openstack/log/instance-info/links_${TS}.log" || true

View File

@ -84,7 +84,5 @@
- ansible_facts['eth12']['active'] | bool
- ansible_facts['eth13']['active'] | bool
- ansible_facts['eth14']['active'] | bool
when:
- (bootstrap_host_container_tech | default('unknown')) != 'nspawn'
- name: Clear facts
meta: clear_facts

View File

@ -163,7 +163,6 @@ bootstrap_host_data_disk_min_size: "{{ (bootstrap_host_scenario is search('metal
# Set the data disk formats table. If the backing store is set to lvm the option
# the partition will not actually be formatted however for parted, ext2 is used.
bootstrap_host_data_disk2_formats:
machinectl: btrfs
zfs: zfs
btrfs: btrfs
xfs: xfs
@ -171,7 +170,6 @@ bootstrap_host_data_disk2_formats:
lvm: ext2
bootstrap_host_format_options:
machinectl: '--metadata single --data single --mixed'
btrfs: '--metadata single --data single --mixed'
xfs: '-K -d agcount=64 -l size=128m'
ext4: '-O dir_index'
@ -179,7 +177,6 @@ bootstrap_host_format_options:
#
# Set the data disk mount options.
bootstrap_host_data_mount_options:
machinectl: "noatime,nodiratime,compress=lzo,commit=120,{{ (ansible_facts['kernel'] is version('4.5', '>=')) | ternary('space_cache=v2', 'space_cache') }}"
zfs: "defaults"
btrfs: "noatime,nodiratime,compress=lzo,commit=120,{{ (ansible_facts['kernel'] is version('4.5', '>=')) | ternary('space_cache=v2', 'space_cache') }}"
xfs: "noatime,nodiratime,logbufs=8,logbsize=256k"
@ -188,9 +185,9 @@ bootstrap_host_data_mount_options:
lvm: "defaults"
swap: "%%"
bootstrap_host_data_disk2_fs: "{{ bootstrap_host_data_disk2_formats[((bootstrap_host_container_tech == 'nspawn') | ternary('btrfs', lxc_container_backing_store))] }}"
bootstrap_host_data_disk2_fs_mount_options: "{{ bootstrap_host_data_mount_options[((bootstrap_host_container_tech == 'nspawn') | ternary('btrfs', lxc_container_backing_store))] }}"
bootstrap_host_data_disk2_path: "{{ (lxc_container_backing_store == 'machinectl' or bootstrap_host_container_tech == 'nspawn') | ternary('/var/lib/machines', '/var/lib/lxc') }}"
bootstrap_host_data_disk2_fs: "{{ bootstrap_host_data_disk2_formats[lxc_container_backing_store] }}"
bootstrap_host_data_disk2_fs_mount_options: "{{ bootstrap_host_data_mount_options[lxc_container_backing_store] }}"
bootstrap_host_data_disk2_path: '/var/lib/lxc'
### Optional Settings ###
@ -202,8 +199,5 @@ bootstrap_host_data_disk2_path: "{{ (lxc_container_backing_store == 'machinectl'
# Set the install method for the deployment. Options are ['source', 'distro']
bootstrap_host_install_method: "{{ lookup('env', 'INSTALL_METHOD') | default('source', true) }}"
# Set the container technology in service. Options are nspawn and lxc.
bootstrap_host_container_tech: "{{ (bootstrap_host_scenario is search('nspawn')) | ternary('nspawn', 'lxc') }}"
# Set the lxc backing store for the job
lxc_container_backing_store: dir

View File

@ -35,12 +35,8 @@
with_items:
- conditional: "{{ (bootstrap_host_scenario is search('distro')) and (bootstrap_host_scenario is search('source')) }}"
msg: "The scenario key words 'distro' and 'source' are mutually exclusive."
- conditional: "{{ (bootstrap_host_scenario is search('lxc')) and (bootstrap_host_scenario is search('nspawn')) }}"
msg: "The scenario key words 'lxc' and 'nspawn' are mutually exclusive."
- conditional: "{{ (bootstrap_host_scenario is search('lxc')) and (bootstrap_host_scenario is search('metal')) }}"
msg: "The scenario key words 'lxc' and 'metal' are mutually exclusive."
- conditional: "{{ (bootstrap_host_scenario is search('metal')) and (bootstrap_host_scenario is search('nspawn')) }}"
msg: "The scenario key words 'metal' and 'nspawn' are mutually exclusive."
- name: Identify the space available in /
# NOTE(hwoarang): df does not work reliably on btrfs filesystems

View File

@ -83,15 +83,6 @@
tags:
- prepare-loopback
# Prepare the Machines storage loopback disk
- include: prepare_loopback_machines.yml
when:
- bootstrap_host_loopback_machines | bool
- bootstrap_host_data_disk_device == None
- lxc_container_backing_store == 'machinectl' or bootstrap_host_container_tech == 'nspawn'
tags:
- prepare-loopback
# Prepare the zfs storage loopback disk
- include: prepare_loopback_zfs.yml
when:
@ -153,8 +144,6 @@
# Prepare the network interfaces
- include: prepare_networking.yml
when:
- bootstrap_host_container_tech != 'nspawn'
tags:
- prepare-networking

View File

@ -43,7 +43,7 @@
- name: Deploy openstack_user_config
config_template:
src: "{{ bootstrap_host_aio_config_path }}/openstack_user_config.yml.{{ (bootstrap_host_container_tech == 'nspawn') | ternary('aio-nspawn', 'aio') }}.j2"
src: "{{ bootstrap_host_aio_config_path }}/openstack_user_config.yml.aio.j2"
dest: "/etc/openstack_deploy/openstack_user_config.yml"
config_overrides: "{{ openstack_user_config_overrides | default({}) }}"
config_type: "yaml"

View File

@ -1,43 +0,0 @@
---
# Copyright 2018, Rackspace US, 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: Create sparse machines file
command: "truncate -s {{ bootstrap_host_loopback_machines_size }}G /openstack/machines.img"
args:
creates: /openstack/machines.img
tags:
- machines-file-create
- name: Format the machines file
filesystem:
fstype: btrfs
opts: "{{ bootstrap_host_format_options['btrfs'] | default(omit) }}"
dev: /openstack/machines.img
tags:
- machines-format-file
- name: Run the systemd mount role
include_role:
name: systemd_mount
vars:
systemd_mounts:
- what: "/openstack/machines.img"
where: "/var/lib/machines"
options: "loop,{{ bootstrap_host_data_mount_options['btrfs'] }}"
type: "btrfs"
state: 'started'
enabled: true
tags:
- machines-config

View File

@ -25,13 +25,8 @@ debug: True
install_method: "{{ bootstrap_host_install_method }}"
## Tempest settings
{% if bootstrap_host_container_tech == 'nspawn' %}
tempest_public_subnet_cidr: "172.29.240.0/22"
tempest_public_subnet_allocation_pools: "172.29.243.110-172.29.243.200"
{% else %}
tempest_public_subnet_cidr: "172.29.248.0/22"
tempest_public_subnet_allocation_pools: "172.29.249.110-172.29.249.200"
{% endif %}
## Galera settings
galera_monitoring_allowed_source: "0.0.0.0/0"
@ -274,7 +269,7 @@ openstack_hosts_package_state: latest
octavia_v2: True
# Disable Octavia V1 API
octavia_v1: False
octavia_management_net_subnet_cidr: "{{ (bootstrap_host_container_tech == 'nspawn') | ternary('172.29.240.0/22', '172.29.232.0/22') }}"
octavia_management_net_subnet_cidr: '172.29.232.0/22'
tempest_run_concurrency: 0
{% endif %}

View File

@ -18,12 +18,6 @@ trove_provider_net_name: dbaas-mgmt
trove_service_net_phys_net: dbaas-mgmt
trove_service_net_setup: True
{% if bootstrap_host_container_tech == 'nspawn' %}
trove_service_net_subnet_cidr: "172.29.236.0/22"
trove_service_net_allocation_pool_start: "172.29.237.110"
trove_service_net_allocation_pool_end: "172.29.237.200"
{% else %}
trove_service_net_subnet_cidr: "172.29.252.0/22"
trove_service_net_allocation_pool_start: "172.29.252.50"
trove_service_net_allocation_pool_end: "172.29.255.254"
{% endif %}

View File

@ -334,7 +334,6 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase):
'mano_all',
'mano_containers',
'mano_hosts',
'nspawn_hosts',
'octavia-infra_hosts',
'octavia_all',
'octavia-api',

View File

@ -93,8 +93,6 @@
- name: openstack/openstack-ansible-repo_server
- name: openstack/openstack-ansible-rsyslog_client
- name: openstack/openstack-ansible-rsyslog_server
- name: openstack/openstack-ansible-nspawn_container_create
- name: openstack/openstack-ansible-nspawn_hosts
- name: openstack/ansible-role-systemd_service
- name: openstack/ansible-role-systemd_mount
- name: openstack/ansible-role-systemd_networkd
@ -162,8 +160,6 @@
- name: openstack/openstack-ansible-repo_server
- name: openstack/openstack-ansible-rsyslog_client
- name: openstack/openstack-ansible-rsyslog_server
- name: openstack/openstack-ansible-nspawn_container_create
- name: openstack/openstack-ansible-nspawn_hosts
- name: openstack/ansible-role-systemd_service
- name: openstack/ansible-role-systemd_mount
- name: openstack/ansible-role-systemd_networkd
@ -375,11 +371,6 @@
nodeset: ubuntu-bionic
timeout: 10800
- job:
name: openstack-ansible-deploy-aio_nspawn-ubuntu-bionic
parent: openstack-ansible-deploy-aio
nodeset: ubuntu-bionic
- job:
name: openstack-ansible-upgrade-aio_ceph-ubuntu-bionic
parent: openstack-ansible-deploy-aio
@ -471,8 +462,8 @@
nodeset: centos-8
- job:
name: openstack-ansible-deploy-aio_nspawn-centos-8
parent: openstack-ansible-deploy-aio
name: openstack-ansible-deploy-aio_distro_metal-centos-8
parent: openstack-ansible-deploy-aio-distro
nodeset: centos-8
- job:

View File

@ -29,7 +29,6 @@
- openstack-ansible-deploy-translations-ubuntu-bionic
experimental:
jobs:
- openstack-ansible-deploy-aio_nspawn-ubuntu-bionic
- openstack-ansible-deploy-aio_qdrouterd-ubuntu-bionic
- openstack-ansible-deploy_with_ansible_devel-aio-ubuntu-bionic
- openstack-ansible-deploy_with_ansible_next-aio-ubuntu-bionic
@ -180,15 +179,6 @@
jobs:
- openstack-ansible-deploy-aio_distro_metal-debian-buster
- project-template:
name: openstack-ansible-deploy-aio_nspawn-jobs
check:
jobs:
- openstack-ansible-deploy-aio_nspawn-ubuntu-bionic:
voting: false
gate:
jobs: []
- project-template:
name: openstack-ansible-deploy-ceph-jobs
check: