diff --git a/ansible-role-requirements.yml b/ansible-role-requirements.yml index 5eb65117c2..d77fa40697 100644 --- a/ansible-role-requirements.yml +++ b/ansible-role-requirements.yml @@ -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 diff --git a/doc/source/reference/commands/reference.rst b/doc/source/reference/commands/reference.rst index 7909cb6927..cbd6046376 100644 --- a/doc/source/reference/commands/reference.rst +++ b/doc/source/reference/commands/reference.rst @@ -39,6 +39,3 @@ The following are some useful commands to manage LXC: # lxc-stop --name container_name -Systemd nspawn commands -======================= - diff --git a/doc/source/reference/inventory/configure-inventory.rst b/doc/source/reference/inventory/configure-inventory.rst index fd39e32296..f6221762a3 100644 --- a/doc/source/reference/inventory/configure-inventory.rst +++ b/doc/source/reference/inventory/configure-inventory.rst @@ -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``. diff --git a/doc/source/user/aio/quickstart.rst b/doc/source/user/aio/quickstart.rst index bfd0efd737..703c06e2e6 100644 --- a/doc/source/user/aio/quickstart.rst +++ b/doc/source/user/aio/quickstart.rst @@ -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 diff --git a/etc/openstack_deploy/openstack_user_config.yml.aio-nspawn.j2 b/etc/openstack_deploy/openstack_user_config.yml.aio-nspawn.j2 deleted file mode 100644 index d8618b9494..0000000000 --- a/etc/openstack_deploy/openstack_user_config.yml.aio-nspawn.j2 +++ /dev/null @@ -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 diff --git a/etc/openstack_deploy/openstack_user_config.yml.aio.j2 b/etc/openstack_deploy/openstack_user_config.yml.aio.j2 index c65da4236e..1bce096616 100644 --- a/etc/openstack_deploy/openstack_user_config.yml.aio.j2 +++ b/etc/openstack_deploy/openstack_user_config.yml.aio.j2 @@ -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 diff --git a/etc/openstack_deploy/openstack_user_config.yml.example b/etc/openstack_deploy/openstack_user_config.yml.example index 09f75ae520..a099f25ec5 100644 --- a/etc/openstack_deploy/openstack_user_config.yml.example +++ b/etc/openstack_deploy/openstack_user_config.yml.example @@ -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: (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) diff --git a/osa_toolkit/generate.py b/osa_toolkit/generate.py index d17d9c91be..c578f59d4c 100755 --- a/osa_toolkit/generate.py +++ b/osa_toolkit/generate.py @@ -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): diff --git a/playbooks/common-tasks/os-nspawn-container-setup.yml b/playbooks/common-tasks/os-nspawn-container-setup.yml deleted file mode 100644 index c68e190dac..0000000000 --- a/playbooks/common-tasks/os-nspawn-container-setup.yml +++ /dev/null @@ -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 diff --git a/playbooks/containers-deploy.yml b/playbooks/containers-deploy.yml index c41180b3de..6b6014beef 100644 --- a/playbooks/containers-deploy.yml +++ b/playbooks/containers-deploy.yml @@ -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" diff --git a/playbooks/containers-nspawn-create.yml b/playbooks/containers-nspawn-create.yml deleted file mode 100644 index d16fa5acc6..0000000000 --- a/playbooks/containers-nspawn-create.yml +++ /dev/null @@ -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 - diff --git a/playbooks/containers-nspawn-destroy.yml b/playbooks/containers-nspawn-destroy.yml deleted file mode 100644 index 70a7ddf58a..0000000000 --- a/playbooks/containers-nspawn-destroy.yml +++ /dev/null @@ -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 diff --git a/playbooks/containers-nspawn-host.yml b/playbooks/containers-nspawn-host.yml deleted file mode 100644 index 6e2eaa739d..0000000000 --- a/playbooks/containers-nspawn-host.yml +++ /dev/null @@ -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 diff --git a/playbooks/healthcheck-hosts.yml b/playbooks/healthcheck-hosts.yml index d762f1590b..fcfd9ca58e 100644 --- a/playbooks/healthcheck-hosts.yml +++ b/playbooks/healthcheck-hosts.yml @@ -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 diff --git a/releasenotes/notes/remove-nspawn-c92939b8c20f096b.yaml b/releasenotes/notes/remove-nspawn-c92939b8c20f096b.yaml new file mode 100644 index 0000000000..f4cae52209 --- /dev/null +++ b/releasenotes/notes/remove-nspawn-c92939b8c20f096b.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The Wallaby release of openstack-ansible does not support deployment of + the control plane in nspawn containers. diff --git a/scripts/scripts-library.sh b/scripts/scripts-library.sh index ff443a46ac..f78295fa4c 100755 --- a/scripts/scripts-library.sh +++ b/scripts/scripts-library.sh @@ -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 diff --git a/tests/bootstrap-aio.yml b/tests/bootstrap-aio.yml index 5bee5b7c8e..94c1afafed 100644 --- a/tests/bootstrap-aio.yml +++ b/tests/bootstrap-aio.yml @@ -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 diff --git a/tests/roles/bootstrap-host/defaults/main.yml b/tests/roles/bootstrap-host/defaults/main.yml index 2fdb6de4bd..17b917f4f9 100644 --- a/tests/roles/bootstrap-host/defaults/main.yml +++ b/tests/roles/bootstrap-host/defaults/main.yml @@ -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 diff --git a/tests/roles/bootstrap-host/tasks/check-requirements.yml b/tests/roles/bootstrap-host/tasks/check-requirements.yml index ed414177a7..373abd4ed6 100644 --- a/tests/roles/bootstrap-host/tasks/check-requirements.yml +++ b/tests/roles/bootstrap-host/tasks/check-requirements.yml @@ -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 diff --git a/tests/roles/bootstrap-host/tasks/main.yml b/tests/roles/bootstrap-host/tasks/main.yml index 1a3972c34d..a3003f0a2e 100644 --- a/tests/roles/bootstrap-host/tasks/main.yml +++ b/tests/roles/bootstrap-host/tasks/main.yml @@ -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 diff --git a/tests/roles/bootstrap-host/tasks/prepare_aio_config.yml b/tests/roles/bootstrap-host/tasks/prepare_aio_config.yml index f24c272c17..fda81a7a80 100644 --- a/tests/roles/bootstrap-host/tasks/prepare_aio_config.yml +++ b/tests/roles/bootstrap-host/tasks/prepare_aio_config.yml @@ -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" diff --git a/tests/roles/bootstrap-host/tasks/prepare_loopback_machines.yml b/tests/roles/bootstrap-host/tasks/prepare_loopback_machines.yml deleted file mode 100644 index 5fbdfdc98b..0000000000 --- a/tests/roles/bootstrap-host/tasks/prepare_loopback_machines.yml +++ /dev/null @@ -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 diff --git a/tests/roles/bootstrap-host/templates/user_variables.aio.yml.j2 b/tests/roles/bootstrap-host/templates/user_variables.aio.yml.j2 index 6a45593fd5..1c4d405133 100644 --- a/tests/roles/bootstrap-host/templates/user_variables.aio.yml.j2 +++ b/tests/roles/bootstrap-host/templates/user_variables.aio.yml.j2 @@ -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 %} diff --git a/tests/roles/bootstrap-host/templates/user_variables_translations.yml.j2 b/tests/roles/bootstrap-host/templates/user_variables_translations.yml.j2 index 4b5fb981c5..bd841c1572 100644 --- a/tests/roles/bootstrap-host/templates/user_variables_translations.yml.j2 +++ b/tests/roles/bootstrap-host/templates/user_variables_translations.yml.j2 @@ -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 %} diff --git a/tests/test_inventory.py b/tests/test_inventory.py index cc2f22c43a..a83893acd3 100644 --- a/tests/test_inventory.py +++ b/tests/test_inventory.py @@ -334,7 +334,6 @@ class TestAnsibleInventoryFormatConstraints(unittest.TestCase): 'mano_all', 'mano_containers', 'mano_hosts', - 'nspawn_hosts', 'octavia-infra_hosts', 'octavia_all', 'octavia-api', diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 841b7b510e..8f373cd7c4 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -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: diff --git a/zuul.d/project-templates.yaml b/zuul.d/project-templates.yaml index 862bad83b6..92000a64c8 100644 --- a/zuul.d/project-templates.yaml +++ b/zuul.d/project-templates.yaml @@ -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: