Skip to content

Commit f0bd3d5

Browse files
authored
Support service account kind as owner in resources util (#459)
1 parent bcfcb9b commit f0bd3d5

File tree

4 files changed

+56
-22
lines changed

4 files changed

+56
-22
lines changed

marketplace/deployer_util/resources.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313
# limitations under the License.
1414

1515

16-
def set_resource_ownership(app_uid, app_name, app_api_version, resource):
16+
def set_app_resource_ownership(app_uid, app_name, app_api_version, resource):
1717
""" Set the app as owner of the resource"""
18+
set_resource_ownership(app_uid, app_name, app_api_version, "Application",
19+
resource)
20+
21+
22+
def set_service_account_resource_ownership(account_uid, account_name, resource):
23+
""" Set the app as owner of the resource"""
24+
set_resource_ownership(account_uid, account_name, "v1", "ServiceAccount",
25+
resource)
26+
27+
28+
def set_resource_ownership(owner_uid, owner_name, owner_api_version, owner_kind,
29+
resource):
30+
""" Set the owner of the given resource. """
1831

1932
if 'metadata' not in resource:
2033
resource['metadata'] = {}
@@ -23,16 +36,16 @@ def set_resource_ownership(app_uid, app_name, app_api_version, resource):
2336

2437
owner_reference = None
2538
for existing_owner_reference in resource['metadata']['ownerReferences']:
26-
if existing_owner_reference['uid'] == app_uid:
39+
if existing_owner_reference['uid'] == owner_uid:
2740
owner_reference = existing_owner_reference
2841
break
2942

3043
if not owner_reference:
3144
owner_reference = {}
3245
resource['metadata']['ownerReferences'].append(owner_reference)
3346

34-
owner_reference['apiVersion'] = app_api_version
35-
owner_reference['kind'] = "Application"
47+
owner_reference['apiVersion'] = owner_api_version
48+
owner_reference['kind'] = owner_kind
3649
owner_reference['blockOwnerDeletion'] = True
37-
owner_reference['name'] = app_name
38-
owner_reference['uid'] = app_uid
50+
owner_reference['name'] = owner_name
51+
owner_reference['uid'] = owner_uid

marketplace/deployer_util/resources_test.py

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import unittest
1515

16-
from resources import set_resource_ownership
16+
import resources
1717

1818
APP_API_VERSION = 'v1beta1'
1919
APP_NAME = 'wordpress-1'
@@ -33,30 +33,51 @@ class ResourcesTest(unittest.TestCase):
3333
def assertListElementsEqual(self, list1, list2):
3434
return self.assertEqual(sorted(list1), sorted(list2))
3535

36-
37-
# def set_resource_ownership(app_uid, app_name, app_api_version, resource):
38-
39-
def test_resource_existing_app_ownerref_matching_uid_updates_existing(self):
36+
def test_resource_existing_ownerref_matching_uid_updates_existing(self):
4037
resource = {'metadata': {'ownerReferences': [{'uid': APP_UID}]}}
4138

42-
set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION, resource)
43-
39+
resources.set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION,
40+
'Application', resource)
4441
self.assertListElementsEqual(resource['metadata']['ownerReferences'],
4542
[APP_OWNER_REF])
4643

47-
def test_resource_existing_app_ownerref_different_uid_adds_ownerref(self):
44+
def test_resource_existing_ownerref_different_uid_adds_ownerref(self):
4845
resource = {'metadata': {'ownerReferences': [{'uid': OTHER_UID}]}}
4946

50-
set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION, resource)
51-
47+
resources.set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION,
48+
'Application', resource)
5249
self.assertListElementsEqual(resource['metadata']['ownerReferences'], [{
5350
'uid': OTHER_UID
5451
}, APP_OWNER_REF])
5552

56-
def test_resource_no_ownerrefs_adds_ownerref(self):
53+
def test_resource_no_ownerrefs_ownerref(self):
5754
resource = {'metadata': {'ownerReferences': []}}
5855

59-
set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION, resource)
56+
resources.set_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION,
57+
'Application', resource)
6058

6159
self.assertListElementsEqual(resource['metadata']['ownerReferences'],
6260
[APP_OWNER_REF])
61+
62+
def test_app_resource_ownership(self):
63+
resource = {'metadata': {'ownerReferences': []}}
64+
65+
resources.set_app_resource_ownership(APP_UID, APP_NAME, APP_API_VERSION,
66+
resource)
67+
68+
self.assertListElementsEqual(resource['metadata']['ownerReferences'],
69+
[APP_OWNER_REF])
70+
71+
def test_service_account_resource_ownership(self):
72+
resource = {'metadata': {'ownerReferences': []}}
73+
74+
resources.set_service_account_resource_ownership(
75+
'11111111-2222-3333-4444-555555555555', 'test-sa', resource)
76+
77+
self.assertListElementsEqual(resource['metadata']['ownerReferences'], [{
78+
'apiVersion': 'v1',
79+
'kind': 'ServiceAccount',
80+
'blockOwnerDeletion': True,
81+
'name': 'test-sa',
82+
'uid': '11111111-2222-3333-4444-555555555555',
83+
}])

marketplace/deployer_util/separate_tester_resources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from argparse import ArgumentParser
2121
from constants import GOOGLE_CLOUD_TEST
2222
from dict_util import deep_get
23-
from resources import set_resource_ownership
23+
from resources import set_app_resource_ownership
2424
from yaml_util import load_resources_yaml
2525

2626
_PROG_HELP = "Separate the tester job from resources manifest into a different manifest"
@@ -64,7 +64,7 @@ def main():
6464
if deep_get(resource, 'metadata', 'annotations',
6565
GOOGLE_CLOUD_TEST) == 'test':
6666
print("INFO Tester resource: {}".format(full_name))
67-
set_resource_ownership(
67+
set_app_resource_ownership(
6868
app_uid=args.app_uid,
6969
app_name=args.app_name,
7070
app_api_version=args.app_api_version,

marketplace/deployer_util/set_ownership.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import log_util as log
2222

2323
from argparse import ArgumentParser
24-
from resources import set_resource_ownership
24+
from resources import set_app_resource_ownership
2525
from yaml_util import load_resources_yaml
2626
from yaml_util import parse_resources_yaml
2727

@@ -145,7 +145,7 @@ def maybe_assign_ownership(resource):
145145
log.info("Application '{:s}' owns '{:s}/{:s}'", app_name,
146146
resource["kind"], resource["metadata"]["name"])
147147
resource = copy.deepcopy(resource)
148-
set_resource_ownership(
148+
set_app_resource_ownership(
149149
app_uid=app_uid,
150150
app_name=app_name,
151151
app_api_version=app_api_version,

0 commit comments

Comments
 (0)