Skip to content

Commit b551f5f

Browse files
[patch] Update pull secret with action
1 parent 0ae0aee commit b551f5f

File tree

3 files changed

+67
-102
lines changed

3 files changed

+67
-102
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/usr/bin/env python3
2+
3+
import logging
4+
import urllib3
5+
from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import get_api_client
6+
from ansible.errors import AnsibleError
7+
from ansible.plugins.action import ActionBase
8+
9+
from mas.devops.ocp import updateGlobalPullSecret
10+
11+
urllib3.disable_warnings() # Disabling warnings will prevent InsecureRequestWarnings from dynClient
12+
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(name)-20s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
13+
14+
class ActionModule(ActionBase):
15+
"""
16+
Update the global pull secret in openshift-config namespace with registry credentials.
17+
18+
Usage Example
19+
-------------
20+
tasks:
21+
- name: "Update Global Pull Secret"
22+
ibm.mas_devops.update_global_pull_secret:
23+
registry_url: "{{ registry_private_url }}"
24+
username: "{{ registry_username }}"
25+
password: "{{ registry_password }}"
26+
register: result
27+
"""
28+
def run(self, tmp=None, task_vars=None):
29+
super(ActionModule, self).run(tmp, task_vars)
30+
31+
registryUrl = self._task.args.get('registry_url', None)
32+
username = self._task.args.get('username', None)
33+
password = self._task.args.get('password', None)
34+
35+
if registryUrl is None:
36+
raise AnsibleError(f"Error: registry_url argument was not provided")
37+
if username is None:
38+
raise AnsibleError(f"Error: username argument was not provided")
39+
if password is None:
40+
raise AnsibleError(f"Error: password argument was not provided")
41+
42+
# Initialize DynamicClient and update the global pull secret
43+
host = self._task.args.get('host', None)
44+
api_key = self._task.args.get('api_key', None)
45+
46+
dynClient = get_api_client(api_key=api_key, host=host)
47+
result = updateGlobalPullSecret(dynClient, registryUrl, username, password)
48+
49+
return dict(
50+
message=f"Successfully updated global pull secret with credentials for {registryUrl}",
51+
success=True,
52+
failed=False,
53+
changed=result.get('changed', True),
54+
name=result.get('name'),
55+
namespace=result.get('namespace'),
56+
registry=result.get('registry')
57+
)

ibm/mas_devops/roles/ocp_idms/tasks/update-pull-secret-dev.yml

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,11 @@
22
# 1. Update default cluster image pull secret
33
# =============================================================================
44

5-
# 1.1 Generate the new secret content
6-
- name: "update-pull-secret-dev : Set new secret content"
7-
vars:
8-
artifactoryAuthB64: "{{ artifactory_auth | b64encode }}"
9-
content:
10-
- "{\"auths\":{\"{{ fvt_image_registry }}\":{\"username\":\"{{ artifactory_username }}\",\"password\":\"{{ artifactory_token }}\",\"email\":\"{{ artifactory_username }}\",\"auth\":\"{{ artifactoryAuthB64 }}\"}"
11-
- "}"
12-
- "}"
13-
set_fact:
14-
new_secret_dev: "{{ content | join('') }}"
15-
no_log: true
16-
17-
# 1.2 Find the existing secret, and we are going to modify it rather than replace
18-
- name: "update-pull-secret-dev : Retrieve existing pull-secret content"
19-
kubernetes.core.k8s_info:
20-
api: v1
21-
kind: Secret
22-
name: pull-secret
23-
namespace: openshift-config
24-
register: pullsecret
25-
no_log: true
26-
27-
- name: "update-pull-secret-dev : Get the original cred secrets"
28-
set_fact:
29-
original_secret: "{{ item.data }}"
30-
with_items: "{{ pullsecret.resources }}"
31-
no_log: true
32-
33-
- name: "update-pull-secret-dev : Get the dockerconfigjson info"
34-
set_fact:
35-
secret_string: '{{ original_secret[".dockerconfigjson"] | b64decode | from_json }}'
36-
no_log: true
37-
38-
# 1.3 Append our new credentials to the secret
39-
- name: "update-pull-secret-dev : Combine new secret content"
40-
set_fact:
41-
new_secret_string: '{{ secret_string | combine( new_secret_dev | from_json, recursive=True) }}'
42-
no_log: true
43-
44-
# 1.4. Overwrite the secret
45-
- name: "update-pull-secret-dev : Update new pull-secret"
46-
kubernetes.core.k8s:
47-
definition:
48-
apiVersion: v1
49-
kind: Secret
50-
type: kubernetes.io/dockerconfigjson
51-
metadata:
52-
name: pull-secret
53-
namespace: openshift-config
54-
data:
55-
.dockerconfigjson: "{{ new_secret_string | to_json | b64encode }}"
5+
- name: "update-pull-secret-dev : Update global pull secret"
6+
ibm.mas_devops.update_global_pull_secret:
7+
registry_url: "{{ fvt_image_registry }}"
8+
username: "{{ artifactory_username }}"
9+
password: "{{ artifactory_token }}"
5610
register: secretUpdateResult
5711
no_log: true
5812

ibm/mas_devops/roles/ocp_idms/tasks/update-pull-secret.yml

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,11 @@
22
# 1. Update default cluster image pull secret
33
# =============================================================================
44

5-
# 1.1 Generate the new secret content
6-
- name: "update-pull-secret : Set new secret content"
7-
vars:
8-
registryAuthB64: "{{ registry_auth | b64encode }}"
9-
content:
10-
- "{\"auths\":{\"{{ registry_private_url }}\":{\"username\":\"{{ registry_username }}\",\"password\":\"{{ registry_password }}\",\"email\":\"{{ registry_username }}\",\"auth\":\"{{ registryAuthB64 }}\"}"
11-
- "}"
12-
- "}"
13-
set_fact:
14-
new_secret: "{{ content | join('') }}"
15-
no_log: true
16-
17-
# 1.2 Find the existing secret, and we are going to modify it rather than replace
18-
- name: "update-pull-secret : Retrieve existing pull-secret content"
19-
kubernetes.core.k8s_info:
20-
api: v1
21-
kind: Secret
22-
name: pull-secret
23-
namespace: openshift-config
24-
register: pullsecret
25-
no_log: true
26-
27-
- name: "update-pull-secret : Get the original cred secrets"
28-
set_fact:
29-
original_secret: "{{ item.data }}"
30-
with_items: "{{ pullsecret.resources }}"
31-
no_log: true
32-
33-
- name: "update-pull-secret : Get the dockerconfigjson info"
34-
set_fact:
35-
secret_string: '{{ original_secret[".dockerconfigjson"] | b64decode | from_json }}'
36-
no_log: true
37-
38-
# 1.3 Append our new credentials to the secret
39-
- name: "update-pull-secret : Combine new secret content"
40-
set_fact:
41-
new_secret_string: '{{ secret_string | combine( new_secret | from_json, recursive=True) }}'
42-
no_log: true
43-
44-
# 1.4. Overwrite the secret
45-
- name: "update-pull-secret : Update new pull-secret"
46-
kubernetes.core.k8s:
47-
definition:
48-
apiVersion: v1
49-
kind: Secret
50-
type: kubernetes.io/dockerconfigjson
51-
metadata:
52-
name: pull-secret
53-
namespace: openshift-config
54-
data:
55-
.dockerconfigjson: "{{ new_secret_string | to_json | b64encode }}"
5+
- name: "update-pull-secret : Update global pull secret"
6+
ibm.mas_devops.update_global_pull_secret:
7+
registry_url: "{{ registry_private_url }}"
8+
username: "{{ registry_username }}"
9+
password: "{{ registry_password }}"
5610
register: secretUpdateResult
5711
no_log: true
5812

0 commit comments

Comments
 (0)