oc-cdtapi 3.26.2__py3-none-any.whl → 3.27.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
oc_cdtapi/ForemanAPI.py CHANGED
@@ -23,7 +23,10 @@ class ForemanAPI(HttpAPI):
23
23
  _error = ForemanAPIError
24
24
  _env_prefix = "FOREMAN"
25
25
 
26
- headers = {"Accept": "version=2,application/json", "Content-Type": "application/json"}
26
+ headers = {
27
+ "Accept": "application/json;version=2",
28
+ "Content-Type": "application/json"
29
+ }
27
30
 
28
31
  def __init__(self, *args, **kwargs):
29
32
  """
@@ -70,7 +73,7 @@ class ForemanAPI(HttpAPI):
70
73
  return self.__foreman_version_major
71
74
 
72
75
  def re(self, req):
73
- if not req.startswith("foreman_puppet"):
76
+ if not req.startswith(("foreman_puppet", "ansible")):
74
77
  return posixpath.join(self.root, "api", req)
75
78
  else:
76
79
  return posixpath.join(self.root, req)
@@ -1410,4 +1413,144 @@ class ForemanAPI(HttpAPI):
1410
1413
  return
1411
1414
 
1412
1415
  logging.debug(f"updating {parameter_name}")
1413
- self.put(posixpath.join("hosts", hostname, "parameters", parameter_name), headers=self.headers, json=payload)
1416
+ self.put(posixpath.join("hosts", hostname, "parameters", parameter_name), headers=self.headers, json=payload)
1417
+
1418
+ def get_host_ansible_roles(self, hostname):
1419
+ """
1420
+ Get ansible role from host.
1421
+ :param hostname: str
1422
+ """
1423
+ logging.debug('Reached get_host_ansible_roles')
1424
+
1425
+ response = self.get(posixpath.join("hosts", hostname, "ansible_roles"), headers=self.headers)
1426
+ roles = response.json()
1427
+
1428
+ return roles
1429
+
1430
+ def get_ansible_role(self, roles=None):
1431
+ """
1432
+ Get ansible role id by its name.
1433
+ :param role_name: str
1434
+ """
1435
+ logging.debug('Reached get_ansible_role')
1436
+
1437
+ if not roles:
1438
+ params = {'per_page': 'all'}
1439
+ response = self.get(posixpath.join("ansible", "api", "ansible_roles"), params=params, headers=self.headers).json()
1440
+
1441
+ logging.debug(f"About to return {response.get('subtotal')} roles")
1442
+ return response.get("results")
1443
+
1444
+ params = {'search': None}
1445
+
1446
+ if isinstance(roles, (str, int)):
1447
+ roles = [roles]
1448
+
1449
+ query = []
1450
+ for role in roles:
1451
+ if isinstance(role, str):
1452
+ query.append(f"name={role}")
1453
+ elif isinstance(role, int):
1454
+ query.append(f"id={role}")
1455
+ else:
1456
+ raise ForemanAPIError(f"Invalid role type: {type(role)}")
1457
+
1458
+ params["search"] = " or ".join(query)
1459
+
1460
+ logging.debug(f"Search param is {params.get('search')}")
1461
+ response = self.get(posixpath.join("ansible", "api", "ansible_roles"), params=params, headers=self.headers).json()
1462
+
1463
+ logging.debug(f"About to return {response.get('subtotal')} roles")
1464
+ return response.get("results")
1465
+
1466
+ def assign_ansible_roles(self, hostname, roles):
1467
+ """
1468
+ Assign an ansible roles and override value by given role_id and kwargs to specific hostname.
1469
+ :param hostname: str
1470
+ :param roles: list/str/int
1471
+ """
1472
+ logging.debug('Reached assign_ansible_roles')
1473
+ logging.debug(f'Hostname: [{hostname}]')
1474
+ logging.debug(f'Roles: [{roles}]')
1475
+
1476
+ role_ids = []
1477
+ role_names = []
1478
+
1479
+ if isinstance(roles, (str, int)):
1480
+ roles = [roles]
1481
+
1482
+ roles = self.get_ansible_role(roles)
1483
+ for role in roles:
1484
+ role_ids.append(role.get("id"))
1485
+ role_names.append(role.get("name"))
1486
+
1487
+ payload = {
1488
+ "ansible_role_ids": role_ids
1489
+ }
1490
+
1491
+ # Assign ansible roles
1492
+ logging.debug(f'About to set roles {role_names}')
1493
+ self.post(posixpath.join("hosts", hostname, "assign_ansible_roles"), headers=self.headers, json=payload)
1494
+
1495
+ def assign_ansible_roles_and_override(self, hostname, roles):
1496
+ """
1497
+ Assign an ansible roles and override value by given role_id and kwargs to specific hostname.
1498
+ :param hostname: str
1499
+ :param roles: dict
1500
+ """
1501
+ logging.debug('Reached assign_ansible_roles_and_override')
1502
+ logging.debug(f'Hostname: [{hostname}]')
1503
+ logging.debug(f'Roles: [{roles}]')
1504
+
1505
+ role_ids = []
1506
+ updated_dict = {}
1507
+
1508
+ if not isinstance(roles, dict):
1509
+ raise ForemanAPIError(code=400, text="Input must be in dict")
1510
+
1511
+ temp_roles = []
1512
+ for role, variable in roles.items():
1513
+ temp_roles.append(role)
1514
+
1515
+ new_roles = self.get_ansible_role(temp_roles)
1516
+ for new_role in new_roles:
1517
+ role_ids.append(new_role.get("id"))
1518
+ if not roles.get(new_role.get("id")):
1519
+ continue
1520
+
1521
+ roles[new_role.get("name")] = roles.pop(new_role.get("id"))
1522
+
1523
+ payload = {
1524
+ "ansible_role_ids": role_ids
1525
+ }
1526
+
1527
+ for key, values in roles.items():
1528
+ params = {"search": f"ansible_role={key}", "per_page": "all"}
1529
+
1530
+ variables = self.get(posixpath.join("ansible", "api", "ansible_variables"), params=params).json()["results"]
1531
+ valid_params = {v["parameter"]: v["id"] for v in variables}
1532
+
1533
+ missing = [p for p in values.keys() if p not in valid_params]
1534
+ if missing:
1535
+ raise ForemanAPIError(code=400, text=f"Role '{key}' missing variables: {', '.join(missing)}")
1536
+
1537
+ for param_name, param_value in values.items():
1538
+ variable_id = valid_params[param_name]
1539
+ updated_dict[f"{variable_id}-{param_name}"] = param_value
1540
+
1541
+ # Assign ansible roles
1542
+ logging.debug(f'About to set roles {roles}')
1543
+ self.post(posixpath.join("hosts", hostname, "assign_ansible_roles"), headers=self.headers, json=payload)
1544
+
1545
+ for key, value in updated_dict.items():
1546
+ payload = {
1547
+ "ansible_variable_id": key,
1548
+ "override_value": {
1549
+ "match": f"fqdn={hostname}",
1550
+ "value": value
1551
+ }
1552
+ }
1553
+ logging.debug(f'About to override ansible variables {key} with value {value}')
1554
+
1555
+ self.post(posixpath.join("ansible", "api", "ansible_override_values"), headers=self.headers, json=payload)
1556
+ sleep(1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oc-cdtapi
3
- Version: 3.26.2
3
+ Version: 3.27.2
4
4
  Summary: Custom Development python API libraries
5
5
  License: Apache2.0
6
6
  Requires-Python: >=3.6
@@ -3,7 +3,7 @@ oc_cdtapi/Dbsm2API.py,sha256=WDBst1dCAmDVU9d9Ogzwp2nkjtKZ4thU2xG4sAPI_Nk,9963
3
3
  oc_cdtapi/DevPIAPI.py,sha256=9WND9ld66eHmC5qoLJq3KDYSoO-pP69UqOQsGZNLZYg,1835
4
4
  oc_cdtapi/DmsAPI.py,sha256=eNFdwQLhCbPvHB5SUtP4QcZZtSdjkgt_Cxn3oQ3iJ5s,15605
5
5
  oc_cdtapi/DmsGetverAPI.py,sha256=ZPU4HlF59fngKu5mSFhtss3rlBuduffDOSm_y3XWrxk,15556
6
- oc_cdtapi/ForemanAPI.py,sha256=blS0E2fyF2cgdnIT5itTrLExWRODBRzaOhAG35QnKN0,51393
6
+ oc_cdtapi/ForemanAPI.py,sha256=Qj20vsX1HNj_N0B4Y6kmah7vx4b_xdgiq97uJA3zQiY,56435
7
7
  oc_cdtapi/JenkinsAPI.py,sha256=lZ8pe3a4eb_6h53JE7QLuzOSlu7Sqatc9PQwWhio9Vg,15748
8
8
  oc_cdtapi/NexusAPI.py,sha256=uU12GtHvKlWorFaPAnFcQ5AGEc94MZ5SdmfM2Pw3F7A,26122
9
9
  oc_cdtapi/PgAPI.py,sha256=URSz7qu-Ir7AOj0jI3ucTXn2PM-nC96nmPZI746OLjA,14356
@@ -12,9 +12,9 @@ oc_cdtapi/RundeckAPI.py,sha256=O3LmcFaHSz8UqeUyIHTTEMJncDD191Utd-iZaeJay2s,24243
12
12
  oc_cdtapi/TestServer.py,sha256=HV97UWg2IK4gOYAp9yaMdwFUWsw9v66MxyZdI3qQctA,2715
13
13
  oc_cdtapi/VaultAPI.py,sha256=P-x_PsWe_S0mGUKTCmR1KhUjdfs7GmyaltjGQcnWj_s,2967
14
14
  oc_cdtapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- oc_cdtapi-3.26.2.data/scripts/nexus.py,sha256=4teqZ_KtCSrwHDJVgA7lkreteod4Xt5XJFZNbwb7E6E,6858
16
- oc_cdtapi-3.26.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
- oc_cdtapi-3.26.2.dist-info/METADATA,sha256=633OzwA9vkGtpD5kA4ebTHVzrLL12isuJXUb2gSWxgc,504
18
- oc_cdtapi-3.26.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
- oc_cdtapi-3.26.2.dist-info/top_level.txt,sha256=d4-5-D-0CSeSXYuLCP7-nIFCpjkfmJr-Y_muzds8iVU,10
20
- oc_cdtapi-3.26.2.dist-info/RECORD,,
15
+ oc_cdtapi-3.27.2.data/scripts/nexus.py,sha256=4teqZ_KtCSrwHDJVgA7lkreteod4Xt5XJFZNbwb7E6E,6858
16
+ oc_cdtapi-3.27.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
+ oc_cdtapi-3.27.2.dist-info/METADATA,sha256=dNcbqIpG8PQlNEElLXIsaomDuk0X82Q8tuUwJ5U-Xjw,504
18
+ oc_cdtapi-3.27.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
+ oc_cdtapi-3.27.2.dist-info/top_level.txt,sha256=d4-5-D-0CSeSXYuLCP7-nIFCpjkfmJr-Y_muzds8iVU,10
20
+ oc_cdtapi-3.27.2.dist-info/RECORD,,