-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The package-upgrade action performs package upgrades for the current OpenStack release. The code path used is similar to the openstack-upgrade action, with the difference being that package-upgrade will not execute if an openstack upgrade is available (based on the openstack-origin setting). This change includes a charm-helpers sync. Change-Id: I0c7184bba29731354e52dc28e3a4dd6f282fa843
- Loading branch information
1 parent
93a1214
commit 3a5b587
Showing
10 changed files
with
160 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
package_upgrade.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#!/usr/bin/python3 | ||
# | ||
# Copyright 2022 Canonical Ltd | ||
# | ||
# 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. | ||
|
||
import os | ||
import sys | ||
|
||
_path = os.path.dirname(os.path.realpath(__file__)) | ||
_root = os.path.abspath(os.path.join(_path, '..')) | ||
|
||
|
||
def _add_path(path): | ||
if path not in sys.path: | ||
sys.path.insert(1, path) | ||
|
||
|
||
_add_path(_root) | ||
|
||
|
||
from charmhelpers.contrib.openstack.utils import ( | ||
do_action_package_upgrade, | ||
) | ||
|
||
from hooks.swift_storage_hooks import ( | ||
config_changed, | ||
CONFIGS, | ||
) | ||
|
||
from lib.swift_storage_utils import ( | ||
do_openstack_upgrade, | ||
) | ||
|
||
|
||
def package_upgrade(): | ||
"""Perform package upgrade within the current OpenStack release. | ||
In order to prevent this action from upgrading to a new release of | ||
OpenStack, package upgrades are not run if a new OpenStack release is | ||
available. See source of do_action_package_upgrade() for this check. | ||
Upgrades packages and sets the corresponding action status as a result.""" | ||
|
||
if (do_action_package_upgrade('swift', | ||
do_openstack_upgrade, | ||
CONFIGS)): | ||
config_changed() | ||
|
||
|
||
if __name__ == '__main__': | ||
package_upgrade() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
# Copyright 2022 Canonical Ltd | ||
# | ||
# 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. | ||
|
||
import os | ||
import sys | ||
|
||
from unittest.mock import patch, MagicMock | ||
|
||
os.environ['JUJU_UNIT_NAME'] = 'swift-storage' | ||
|
||
# python-apt is not installed as part of test-requirements but is imported by | ||
# some charmhelpers modules so create a fake import. | ||
sys.modules['apt'] = MagicMock() | ||
sys.modules['apt_pkg'] = MagicMock() | ||
|
||
with patch('charmhelpers.contrib.hardening.harden.harden') as mock_dec: | ||
mock_dec.side_effect = (lambda *dargs, **dkwargs: lambda f: | ||
lambda *args, **kwargs: f(*args, **kwargs)) | ||
with patch('lib.misc_utils.is_paused') as is_paused: | ||
with patch('lib.swift_storage_utils.register_configs'): | ||
import actions.package_upgrade as package_upgrade | ||
|
||
from unit_tests.test_utils import CharmTestCase | ||
|
||
TO_PATCH = [ | ||
'config_changed', | ||
'do_openstack_upgrade', | ||
] | ||
|
||
|
||
class TestSwiftStorageUpgradeActions(CharmTestCase): | ||
|
||
def setUp(self): | ||
super(TestSwiftStorageUpgradeActions, self).setUp(package_upgrade, | ||
TO_PATCH) | ||
|
||
@patch('charmhelpers.contrib.openstack.utils.action_set') | ||
@patch('charmhelpers.contrib.openstack.utils.openstack_upgrade_available') | ||
def test_package_upgrade_success(self, upgrade_avail, | ||
action_set): | ||
upgrade_avail.return_value = False | ||
package_upgrade.package_upgrade() | ||
self.assertTrue(self.do_openstack_upgrade.called) | ||
|
||
@patch('charmhelpers.contrib.openstack.utils.action_set') | ||
@patch('charmhelpers.contrib.openstack.utils.openstack_upgrade_available') | ||
def test_package_upgrade_failure(self, upgrade_avail, | ||
action_set): | ||
upgrade_avail.return_value = True | ||
package_upgrade.package_upgrade() | ||
self.assertFalse(self.do_openstack_upgrade.called) |