Skip to content

Commit 77f15b0

Browse files
authored
fix: KC realm fixes (#18)
1 parent 14710e4 commit 77f15b0

File tree

3 files changed

+84
-667
lines changed

3 files changed

+84
-667
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import json
2+
import urllib.request
3+
import argparse
24

35
from keycloak import KeycloakOpenID
46
from keycloak import KeycloakAdmin
5-
import urllib2, argparse, json
67

78
# Import realm
89
def keycloak_import_realm(keycloak_realm_file):
@@ -17,20 +18,24 @@ def keycloak_create_user(email, username, firstName, lastName, password):
1718
"enabled": True,
1819
"firstName": firstName,
1920
"lastName": lastName,
20-
"credentials": [{"value": "12345","type": password}],
21+
"credentials": [{"value": password, "type": "password"}],
2122
"realmRoles": ["user_default"]})
2223

2324
# Create the user and assign the role to access the user management API
2425
def update_user_roles(config):
2526
realm_json = json.load(open(config['keycloak_realm_json_file_path']))
2627

2728
# Get the id of realm-management
29+
client_id = None
2830
for client in realm_json['clients']:
2931
if config['clientId'] == client['clientId']:
3032
client_id = client["id"]
3133
break
3234

33-
user = keycloak_admin.get_users({"username":config['keycloak_api_management_username']})
35+
if client_id is None:
36+
raise ValueError("Client ID not found in realm JSON")
37+
38+
user = keycloak_admin.get_users({"username": config['keycloak_api_management_username']})
3439
user_id = user[0]['id']
3540

3641
# Read the role from file
@@ -40,13 +45,13 @@ def update_user_roles(config):
4045
roles = json.loads(json_data)
4146

4247
# Get only client roles
43-
clientRoles = roles[config['clientId']]
48+
client_roles = roles[config['clientId']]
4449

45-
keycloak_admin.assign_client_role(user_id, client_id, clientRoles)
50+
keycloak_admin.assign_client_role(user_id, client_id, client_roles)
4651

47-
if __name__ == "__main__":
48-
parser = argparse.ArgumentParser(description='Configure keycloak user apis')
49-
parser.add_argument('keycloak_bootstrap_config', help='configuration json file that is needed for keycloak bootstrap')
52+
if __name__ == "__main__":
53+
parser = argparse.ArgumentParser(description='Configure keycloak user APIs')
54+
parser.add_argument('keycloak_bootstrap_config', help='Configuration JSON file needed for keycloak bootstrap')
5055
args = parser.parse_args()
5156

5257
with open(args.keycloak_bootstrap_config) as keycloak_bootstrap_config:
@@ -55,35 +60,34 @@ def update_user_roles(config):
5560
try:
5661
# Get access token
5762
keycloak_admin = KeycloakAdmin(server_url=config['keycloak_auth_server_url'],
58-
username=config['keycloak_management_user'],
59-
password=config['keycloak_management_password'],
60-
realm_name="master",
61-
client_id='admin-cli',
62-
verify=False)
63+
username=config['keycloak_management_user'],
64+
password=config['keycloak_management_password'],
65+
realm_name="master",
66+
client_id='admin-cli',
67+
verify=False)
6368
# Import realm
6469
keycloak_import_realm(config['keycloak_realm_json_file_path'])
6570

6671
# Set realm name to sunbird
6772
keycloak_admin.realm_name = config['keycloak_realm']
6873

69-
# Add user for user api
74+
# Add user for user API
7075
keycloak_create_user(email=config['keycloak_api_management_user_email'],
71-
username=config['keycloak_api_management_username'],
72-
firstName=config['keycloak_api_management_user_first_name'],
73-
lastName=config['keycloak_api_management_user_last_name'],
74-
password=config['keycloak_api_management_user_password'])
76+
username=config['keycloak_api_management_username'],
77+
firstName=config['keycloak_api_management_user_first_name'],
78+
lastName=config['keycloak_api_management_user_last_name'],
79+
password=config['keycloak_api_management_user_password'])
7580

76-
# Update user roles for access user management API's
81+
# Update user roles for access user management APIs
7782
config['clientId'] = "realm-management"
7883
update_user_roles(config)
7984

8085
# Update user roles for SSO
8186
config['clientId'] = "admin-cli"
8287
update_user_roles(config)
83-
# If keycloak is returning the error realm does exists
88+
# If Keycloak is returning the error realm does exist
8489
except Exception as e:
8590
if "409" in str(e):
86-
print "Skipping error: " + str(e)
91+
print("Skipping error: " + str(e))
8792
else:
88-
raise
89-
93+
raise

ansible/roles/keycloak-deploy/tasks/bootstrap.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@
2626

2727
- name: start keycloak with script upload feature temporarily
2828
shell: "nohup {{keycloak_home}}/bin/standalone.sh -Dkeycloak.profile.feature.upload_scripts=enabled -b={{ansible_default_ipv4.address}} -bprivate={{ansible_default_ipv4.address}} --server-config standalone-ha.xml &"
29-
become: yes
29+
become: true
3030
become_user: "{{ wildfly_user }}"
3131
notify: wait for keycloak to start
3232

3333
- meta: flush_handlers
3434

3535
- name: Install dependencies for keycloak
3636
apt:
37-
name: ["python-setuptools"]
37+
name: ["python-setuptools", "python3.7-dev", "python3.7-distutils"]
3838
update_cache: true
3939

4040
- name: Ensure python packages are installed
41-
apt:
41+
apt:
4242
name: ["python-pip", "python-dev"]
4343
update_cache: yes
4444
when: ansible_os_family == 'Debian' and ansible_distribution_version | float < 18
@@ -55,7 +55,7 @@
5555
dest: /tmp/
5656

5757
- name: Initialize python library to run keycloak bootstrap script
58-
shell: cd /tmp/python-keycloak-0.12.0 && python setup.py install
58+
shell: cd /tmp/python-keycloak-0.12.0 && python3.7 setup.py install
5959

6060
- name: Save keycloak vars to json
6161
template:
@@ -81,7 +81,7 @@
8181
dest: /tmp
8282

8383
- name: Run the keycloak bootstrap script
84-
shell: cd /tmp/keycloak/ && python keycloak_main.py /tmp/keycloak-bootstrap.conf.json
84+
shell: cd /tmp/keycloak/ && python3.7 keycloak_main.py /tmp/keycloak-bootstrap.conf.json
8585
register: out
8686
until: '"404" not in out.stderr'
8787
retries: 2

0 commit comments

Comments
 (0)