diff --git a/ansible/baremetal-compute-inspect.yml b/ansible/baremetal-compute-inspect.yml index aa029662a..74734bad1 100644 --- a/ansible/baremetal-compute-inspect.yml +++ b/ansible/baremetal-compute-inspect.yml @@ -15,6 +15,8 @@ - role: stackhpc.os-shade os_shade_venv: "{{ venv }}" os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest + os_shade_upper_constraints_file: "{{ pip_upper_constraints_file }}" - role: activate-virtualenv activate_virtualenv_path: "{{ venv }}" diff --git a/ansible/baremetal-compute-manage.yml b/ansible/baremetal-compute-manage.yml index 279079381..a17636923 100644 --- a/ansible/baremetal-compute-manage.yml +++ b/ansible/baremetal-compute-manage.yml @@ -15,6 +15,8 @@ - role: stackhpc.os-shade os_shade_venv: "{{ venv }}" os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest + os_shade_upper_constraints_file: "{{ pip_upper_constraints_file }}" - role: activate-virtualenv activate_virtualenv_path: "{{ venv }}" diff --git a/ansible/baremetal-compute-provide.yml b/ansible/baremetal-compute-provide.yml index bd5330944..d8937203f 100644 --- a/ansible/baremetal-compute-provide.yml +++ b/ansible/baremetal-compute-provide.yml @@ -15,6 +15,8 @@ - role: stackhpc.os-shade os_shade_venv: "{{ venv }}" os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest + os_shade_upper_constraints_file: "{{ pip_upper_constraints_file }}" - role: activate-virtualenv activate_virtualenv_path: "{{ venv }}" diff --git a/ansible/baremetal-compute-rename.yml b/ansible/baremetal-compute-rename.yml index 049cba620..3184fa257 100644 --- a/ansible/baremetal-compute-rename.yml +++ b/ansible/baremetal-compute-rename.yml @@ -15,6 +15,8 @@ name: - python-openstackclient - python-ironicclient + state: latest + extra_args: "{% if pip_upper_constraints_file %}-c {{ pip_upper_constraints_file }}{% endif %}" - name: Rename baremetal compute nodes hosts: baremetal-compute diff --git a/ansible/baremetal-compute-serial-console.yml b/ansible/baremetal-compute-serial-console.yml index b4783b728..d741ae17f 100644 --- a/ansible/baremetal-compute-serial-console.yml +++ b/ansible/baremetal-compute-serial-console.yml @@ -15,6 +15,8 @@ name: - python-openstackclient - python-ironicclient + state: latest + extra_args: "{% if pip_upper_constraints_file %}-c {{ pip_upper_constraints_file }}{% endif %}" - block: - name: Fail if allocation pool start not defined diff --git a/ansible/docker.yml b/ansible/docker.yml index 76b179b70..712fda784 100644 --- a/ansible/docker.yml +++ b/ansible/docker.yml @@ -4,7 +4,7 @@ tags: - docker vars: - - docker_upper_constraints_file: "{{ kolla_upper_constraints_file }}" + - docker_upper_constraints_file: "{{ pip_upper_constraints_file }}" roles: - role: docker docker_daemon_mtu: "{{ public_net_name | net_mtu | default }}" diff --git a/ansible/external-net.yml b/ansible/external-net.yml index e3ba15874..30753679c 100644 --- a/ansible/external-net.yml +++ b/ansible/external-net.yml @@ -5,6 +5,8 @@ roles: - role: stackhpc.os-networks os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest + os_shade_upper_constraints_file: "{{ pip_upper_constraints_file }}" os_networks_venv: "{{ virtualenv_path }}/shade" os_networks_openstack_auth_type: "{{ openstack_auth_type }}" os_networks_openstack_auth: "{{ openstack_auth }}" diff --git a/ansible/group_vars/all/kolla b/ansible/group_vars/all/kolla index e15b4d144..ef3a04954 100644 --- a/ansible/group_vars/all/kolla +++ b/ansible/group_vars/all/kolla @@ -316,7 +316,7 @@ kolla_enable_tls_external: "no" kolla_openstack_logging_debug: "False" # Upper constraints file for installation of Kolla. -kolla_upper_constraints_file: "https://opendev.org/openstack/requirements/raw/branch/{{ openstack_branch }}/upper-constraints.txt" +kolla_upper_constraints_file: "{{ pip_upper_constraints_file }}" # User account to use for Kolla SSH access. kolla_ansible_user: kolla diff --git a/ansible/group_vars/all/pip b/ansible/group_vars/all/pip new file mode 100644 index 000000000..8a9c90562 --- /dev/null +++ b/ansible/group_vars/all/pip @@ -0,0 +1,3 @@ +--- +# Upper constraints file for installation of python packages. +pip_upper_constraints_file: "https://releases.openstack.org/constraints/upper/{{ openstack_release }}" diff --git a/ansible/overcloud-docker-sdk-upgrade.yml b/ansible/overcloud-docker-sdk-upgrade.yml index 046a11af1..6d295928e 100644 --- a/ansible/overcloud-docker-sdk-upgrade.yml +++ b/ansible/overcloud-docker-sdk-upgrade.yml @@ -26,6 +26,6 @@ pip: name: docker state: latest - extra_args: "{% if kolla_upper_constraints_file %}-c {{ kolla_upper_constraints_file }}{% endif %}" + extra_args: "{% if pip_upper_constraints_file %}-c {{ pip_upper_constraints_file }}{% endif %}" virtualenv: "{{ virtualenv is defined | ternary(virtualenv, omit) }}" become: "{{ virtualenv is not defined }}" diff --git a/ansible/overcloud-grafana-configure.yml b/ansible/overcloud-grafana-configure.yml index efdb9a4f8..8008c1e6f 100644 --- a/ansible/overcloud-grafana-configure.yml +++ b/ansible/overcloud-grafana-configure.yml @@ -19,6 +19,8 @@ - role: stackhpc.os-openstackclient os_openstackclient_venv: "{{ venv }}" os_openstackclient_install_epel: "{{ yum_install_epel }}" + os_openstackclient_state: latest + os_openstackclient_upper_constraints_file: "{{ pip_upper_constraints_file }}" when: kolla_enable_monasca | bool tasks: diff --git a/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml b/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml index 0cd0ca9ea..e86fb38aa 100644 --- a/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml +++ b/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml @@ -124,7 +124,9 @@ roles: - role: ironic-inspector-rules os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest ironic_inspector_venv: "{{ virtualenv_path }}/shade" + ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}" ironic_inspector_auth_type: "{{ openstack_auth_type }}" ironic_inspector_auth: "{{ openstack_auth }}" ironic_inspector_cacert: "{{ openstack_cacert }}" diff --git a/ansible/overcloud-introspection-rules.yml b/ansible/overcloud-introspection-rules.yml index 2fcf4d59a..20ee45bdd 100644 --- a/ansible/overcloud-introspection-rules.yml +++ b/ansible/overcloud-introspection-rules.yml @@ -36,6 +36,8 @@ vars: os_openstackclient_venv: "{{ venv }}" os_openstackclient_install_epel: "{{ yum_install_epel }}" + os_openstackclient_state: latest + os_openstackclient_upper_constraints_file: "{{ pip_upper_constraints_file }}" - name: Retrieve the IPA kernel Glance image UUID shell: > @@ -56,7 +58,9 @@ roles: - role: ironic-inspector-rules os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest ironic_inspector_venv: "{{ venv }}" + ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}" ironic_inspector_auth_type: "{{ openstack_auth_type }}" ironic_inspector_auth: "{{ openstack_auth }}" ironic_inspector_cacert: "{{ openstack_cacert }}" diff --git a/ansible/overcloud-ipa-build.yml b/ansible/overcloud-ipa-build.yml index 53f2da7e8..3b7a51399 100644 --- a/ansible/overcloud-ipa-build.yml +++ b/ansible/overcloud-ipa-build.yml @@ -28,6 +28,8 @@ name: stackhpc.os-images vars: os_images_venv: "{{ virtualenv_path }}/ipa-build-dib" + os_images_package_state: latest + os_images_upper_constraints_file: "{{ pip_upper_constraints_file }}" os_images_cache: "{{ image_cache_path }}" os_images_common: "" os_images_list: diff --git a/ansible/overcloud-ipa-images.yml b/ansible/overcloud-ipa-images.yml index 2ff8d20fe..2f29a639b 100644 --- a/ansible/overcloud-ipa-images.yml +++ b/ansible/overcloud-ipa-images.yml @@ -100,7 +100,9 @@ roles: - role: ipa-images os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest ipa_images_venv: "{{ virtualenv_path }}/shade" + ipa_images_upper_constraints_file: "{{ pip_upper_constraints_file }}" ipa_images_openstack_auth_type: "{{ openstack_auth_type }}" ipa_images_openstack_auth: "{{ openstack_auth }}" ipa_images_openstack_auth_env: "{{ openstack_auth_env }}" diff --git a/ansible/provision-net.yml b/ansible/provision-net.yml index 2294676e0..59b46e407 100644 --- a/ansible/provision-net.yml +++ b/ansible/provision-net.yml @@ -59,6 +59,9 @@ roles: - role: stackhpc.os-networks + os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest + os_shade_upper_constraints_file: "{{ pip_upper_constraints_file }}" os_networks_venv: "{{ virtualenv_path }}/shade" os_networks_auth_type: "{{ openstack_auth_type }}" os_networks_auth: "{{ openstack_auth }}" diff --git a/ansible/roles/ipa-images/defaults/main.yml b/ansible/roles/ipa-images/defaults/main.yml index cd5c6dbe9..390a0903d 100644 --- a/ansible/roles/ipa-images/defaults/main.yml +++ b/ansible/roles/ipa-images/defaults/main.yml @@ -2,6 +2,9 @@ # Path to virtualenv in which to install shade and its dependencies. ipa_images_venv: +# Upper constraints file for installation of python-ironicclient. +ipa_images_upper_constraints_file: + # Authentication type compatible with the 'os_image' Ansible module's # auth_type argument. ipa_images_openstack_auth_type: diff --git a/ansible/roles/ipa-images/meta/main.yml b/ansible/roles/ipa-images/meta/main.yml index 5f4dd8d3b..eb9d26582 100644 --- a/ansible/roles/ipa-images/meta/main.yml +++ b/ansible/roles/ipa-images/meta/main.yml @@ -2,5 +2,7 @@ dependencies: - role: stackhpc.os-shade os_shade_venv: "{{ ipa_images_venv }}" + os_shade_upper_constraints_file: "{{ ipa_images_upper_constraints_file }}" - role: stackhpc.os-openstackclient os_openstackclient_venv: "{{ ipa_images_venv }}" + os_openstackclient_upper_constraints_file: "{{ ipa_images_upper_constraints_file }}" diff --git a/ansible/roles/ipa-images/tasks/main.yml b/ansible/roles/ipa-images/tasks/main.yml index a6cbe7f8a..09de04046 100644 --- a/ansible/roles/ipa-images/tasks/main.yml +++ b/ansible/roles/ipa-images/tasks/main.yml @@ -59,7 +59,9 @@ - name: Ensure we have python-ironicclient installed pip: name: python-ironicclient + state: latest virtualenv: "{{ ipa_images_venv }}" + extra_args: "{% if ipa_images_upper_constraints_file %}-c {{ ipa_images_upper_constraints_file }}{% endif %}" # To support updating the IPA image, we check the MD5 sum of the cached image # files, and compare with the images in Glance (if there are any). diff --git a/ansible/roles/ironic-inspector-rules/defaults/main.yml b/ansible/roles/ironic-inspector-rules/defaults/main.yml index 2944208a7..39f5a56bc 100644 --- a/ansible/roles/ironic-inspector-rules/defaults/main.yml +++ b/ansible/roles/ironic-inspector-rules/defaults/main.yml @@ -2,6 +2,9 @@ # Path to a directory in which to create a virtualenv. ironic_inspector_venv: +# Upper constraints file for installation of python-ironic-inspector-client. +ironic_inspector_upper_constraints_file: + # Authentication type. ironic_inspector_auth_type: diff --git a/ansible/roles/ironic-inspector-rules/meta/main.yml b/ansible/roles/ironic-inspector-rules/meta/main.yml index 9dbaa448b..c775134e5 100644 --- a/ansible/roles/ironic-inspector-rules/meta/main.yml +++ b/ansible/roles/ironic-inspector-rules/meta/main.yml @@ -2,3 +2,4 @@ dependencies: - role: stackhpc.os-shade os_shade_venv: "{{ ironic_inspector_venv }}" + os_shade_upper_constraints_file: "{{ ironic_inspector_upper_constraints_file }}" diff --git a/ansible/roles/ironic-inspector-rules/tasks/main.yml b/ansible/roles/ironic-inspector-rules/tasks/main.yml index 1f6e405ef..1ca8d2dd8 100644 --- a/ansible/roles/ironic-inspector-rules/tasks/main.yml +++ b/ansible/roles/ironic-inspector-rules/tasks/main.yml @@ -3,8 +3,9 @@ pip: name: "{{ item.name }}" version: "{{ item.version | default(omit) }}" - state: present + state: latest virtualenv: "{{ ironic_inspector_venv }}" + extra_args: "{% if ironic_inspector_upper_constraints_file %}-c {{ ironic_inspector_upper_constraints_file }}{% endif %}" with_items: - name: python-ironic-inspector-client diff --git a/ansible/seed-introspection-rules.yml b/ansible/seed-introspection-rules.yml index 538ccafc8..fca7eb08d 100644 --- a/ansible/seed-introspection-rules.yml +++ b/ansible/seed-introspection-rules.yml @@ -6,7 +6,9 @@ roles: - role: ironic-inspector-rules os_shade_install_epel: "{{ yum_install_epel }}" + os_shade_state: latest ironic_inspector_venv: "{{ virtualenv_path }}/shade" + ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}" # No auth required for Bifrost. ironic_inspector_auth_type: None ironic_inspector_auth: {} diff --git a/ansible/seed-ipa-build.yml b/ansible/seed-ipa-build.yml index 69e53b6de..f1afb808e 100644 --- a/ansible/seed-ipa-build.yml +++ b/ansible/seed-ipa-build.yml @@ -19,6 +19,8 @@ name: stackhpc.os-images vars: os_images_venv: "{{ virtualenv_path }}/ipa-build-dib" + os_images_package_state: latest + os_images_upper_constraints_file: "{{ pip_upper_constraints_file }}" os_images_cache: "{{ image_cache_path }}" os_images_common: "" os_images_list: diff --git a/etc/kayobe/kolla.yml b/etc/kayobe/kolla.yml index 9669f0d22..c11c5a1e2 100644 --- a/etc/kayobe/kolla.yml +++ b/etc/kayobe/kolla.yml @@ -146,6 +146,7 @@ #kolla_openstack_logging_debug: # Upper constraints file for installation of Kolla. +# Default value is {{ pip_upper_constraints_file }}. #kolla_upper_constraints_file: # User account to use for Kolla SSH access. diff --git a/etc/kayobe/pip.yml b/etc/kayobe/pip.yml index 29a84f099..5b62fcf54 100644 --- a/etc/kayobe/pip.yml +++ b/etc/kayobe/pip.yml @@ -1,5 +1,10 @@ --- +# Upper constraints file for installation of python packages. +# Default value is +# "https://releases.openstack.org/constraints/upper/{{ openstack_branch }}" +#pip_upper_constraints_file: + # Use a local PyPi mirror for installing Pip packages #pip_local_mirror: false diff --git a/playbooks/kayobe-overcloud-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-base/overrides.yml.j2 index 9f6e905a6..c5f1689bf 100644 --- a/playbooks/kayobe-overcloud-base/overrides.yml.j2 +++ b/playbooks/kayobe-overcloud-base/overrides.yml.j2 @@ -11,8 +11,8 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}" kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}" kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}" -kolla_upper_constraints_file: "/tmp/upper-constraints.txt" kolla_openstack_logging_debug: True +pip_upper_constraints_file: "/tmp/upper-constraints.txt" # Use the CI infra's PyPI mirror. pip_local_mirror: true diff --git a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 index 519915797..0d9a25b44 100644 --- a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 +++ b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 @@ -12,7 +12,7 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}" kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}" kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}" -kolla_upper_constraints_file: "/tmp/upper-constraints.txt" +pip_upper_constraints_file: "/tmp/upper-constraints.txt" {% endif %} kolla_openstack_logging_debug: true diff --git a/playbooks/kayobe-seed-base/overrides.yml.j2 b/playbooks/kayobe-seed-base/overrides.yml.j2 index 347437882..d0290d1ee 100644 --- a/playbooks/kayobe-seed-base/overrides.yml.j2 +++ b/playbooks/kayobe-seed-base/overrides.yml.j2 @@ -11,8 +11,8 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}" kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}" kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}" -kolla_upper_constraints_file: "/tmp/upper-constraints.txt" kolla_openstack_logging_debug: True +pip_upper_constraints_file: "/tmp/upper-constraints.txt" # NOTE(mgoddard): We're using a cirros image, which doesn't require the # resolv.conf work around used for CentOS. diff --git a/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2 b/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2 index 3339336cb..f501782c5 100644 --- a/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2 +++ b/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2 @@ -12,7 +12,7 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}" kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}" kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}" -kolla_upper_constraints_file: "/tmp/upper-constraints.txt" +pip_upper_constraints_file: "/tmp/upper-constraints.txt" {% endif %} # NOTE(mgoddard): We're using a cirros image, which doesn't require the diff --git a/releasenotes/notes/stale-virtualenvs-125c513af3de9396.yaml b/releasenotes/notes/stale-virtualenvs-125c513af3de9396.yaml new file mode 100644 index 000000000..677b182f6 --- /dev/null +++ b/releasenotes/notes/stale-virtualenvs-125c513af3de9396.yaml @@ -0,0 +1,18 @@ +--- +features: + - | + Adds a new configuration variable, ``pip_upper_constraints_file``, which is + used to configure the file or URL containing the python upper version + contraints. Its default value is + ``https://releases.openstack.org/constraints/upper/{{ openstack_branch }}``. +fixes: + - | + Fixes an issue with virtual environments on remote hosts, which may over + the course of time become stale and incompatible with Kayobe or other + software. This was fixed by installing the latest version of packages + allowed by OpenStack upper constraints. See `story 2005923 + `__ for details. +upgrade: + - | + The default value of ``kolla_upper_constraints_file`` has been changed to + ``{{ pip_upper_constraints_file }}``. diff --git a/requirements.yml b/requirements.yml index 87202993e..315c13fc4 100644 --- a/requirements.yml +++ b/requirements.yml @@ -30,15 +30,15 @@ - src: stackhpc.mellanox-switch version: v1.0.0 - src: stackhpc.os-images - version: v1.2.0 + version: v1.4.0 - src: stackhpc.os-ironic-state version: v1.1.0 - src: stackhpc.os-networks version: v1.1.0 - src: stackhpc.os-openstackclient - version: v1.2.0 + version: v1.3.0 - src: stackhpc.os-shade - version: v1.2.0 + version: v1.3.0 # We are currently using a fork of this role since the upstream yatesr.timezone # role includes symlinks which do not play nicely with PBR. Once that issue has # been resolved in PBR, we can revert to using the upstream yatesr.timezone