mas-devops 10.0.0__tar.gz → 10.1.2__tar.gz

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.
Files changed (148) hide show
  1. {mas_devops-10.0.0/src/mas_devops.egg-info → mas_devops-10.1.2}/PKG-INFO +1 -1
  2. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/__init__.py +1 -1
  3. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/backup.py +2 -2
  4. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/restore.py +4 -1
  5. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-backup.yml.j2 +8 -0
  6. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-install.yml.j2 +52 -0
  7. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-restore.yml.j2 +8 -0
  8. mas_devops-10.1.2/src/mas/devops/utils.py +171 -0
  9. {mas_devops-10.0.0 → mas_devops-10.1.2/src/mas_devops.egg-info}/PKG-INFO +1 -1
  10. mas_devops-10.0.0/src/mas/devops/utils.py +0 -76
  11. {mas_devops-10.0.0 → mas_devops-10.1.2}/LICENSE +0 -0
  12. {mas_devops-10.0.0 → mas_devops-10.1.2}/MANIFEST.in +0 -0
  13. {mas_devops-10.0.0 → mas_devops-10.1.2}/README.md +0 -0
  14. {mas_devops-10.0.0 → mas_devops-10.1.2}/bin/mas-devops-apply-preinstall-rbac-for-saas +0 -0
  15. {mas_devops-10.0.0 → mas_devops-10.1.2}/bin/mas-devops-create-initial-users-for-saas +0 -0
  16. {mas_devops-10.0.0 → mas_devops-10.1.2}/bin/mas-devops-db2-validate-config +0 -0
  17. {mas_devops-10.0.0 → mas_devops-10.1.2}/bin/mas-devops-notify-slack +0 -0
  18. {mas_devops-10.0.0 → mas_devops-10.1.2}/bin/mas-devops-saas-job-cleaner +0 -0
  19. {mas_devops-10.0.0 → mas_devops-10.1.2}/pyproject.toml +0 -0
  20. {mas_devops-10.0.0 → mas_devops-10.1.2}/setup.cfg +0 -0
  21. {mas_devops-10.0.0 → mas_devops-10.1.2}/setup.py +0 -0
  22. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/aiservice.py +0 -0
  23. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/__init__.py +0 -0
  24. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230414-amd64.yaml +0 -0
  25. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230518-amd64.yaml +0 -0
  26. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230526-amd64.yaml +0 -0
  27. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230616-amd64.yaml +0 -0
  28. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230627-amd64.yaml +0 -0
  29. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230721-amd64.yaml +0 -0
  30. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230725-amd64.yaml +0 -0
  31. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230829-amd64.yaml +0 -0
  32. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-230926-amd64.yaml +0 -0
  33. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-231004-amd64.yaml +0 -0
  34. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-231031-amd64.yaml +0 -0
  35. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-231128-amd64.yaml +0 -0
  36. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-231228-amd64.yaml +0 -0
  37. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240130-amd64.yaml +0 -0
  38. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240227-amd64.yaml +0 -0
  39. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240326-amd64.yaml +0 -0
  40. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240405-amd64.yaml +0 -0
  41. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240430-amd64.yaml +0 -0
  42. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v8-240528-amd64.yaml +0 -0
  43. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-240625-amd64.yaml +0 -0
  44. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-240730-amd64.yaml +0 -0
  45. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-240827-amd64.yaml +0 -0
  46. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-241003-amd64.yaml +0 -0
  47. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-241107-amd64.yaml +0 -0
  48. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-241107-s390x.yaml +0 -0
  49. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-241205-amd64.yaml +0 -0
  50. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-241205-s390x.yaml +0 -0
  51. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250109-amd64.yaml +0 -0
  52. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250109-s390x.yaml +0 -0
  53. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250206-amd64.yaml +0 -0
  54. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250206-s390x.yaml +0 -0
  55. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250306-amd64.yaml +0 -0
  56. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250306-s390x.yaml +0 -0
  57. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250403-amd64.yaml +0 -0
  58. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250403-s390x.yaml +0 -0
  59. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250501-amd64.yaml +0 -0
  60. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250501-s390x.yaml +0 -0
  61. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250624-amd64.yaml +0 -0
  62. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250624-ppc64le.yaml +0 -0
  63. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250624-s390x.yaml +0 -0
  64. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250731-amd64.yaml +0 -0
  65. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250731-ppc64le.yaml +0 -0
  66. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250731-s390x.yaml +0 -0
  67. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250828-amd64.yaml +0 -0
  68. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250828-ppc64le.yaml +0 -0
  69. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250828-s390x.yaml +0 -0
  70. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250902-amd64.yaml +0 -0
  71. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250902-ppc64le.yaml +0 -0
  72. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250902-s390x.yaml +0 -0
  73. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250925-amd64.yaml +0 -0
  74. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-250925-ppc64le.yaml +0 -0
  75. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251010-amd64.yaml +0 -0
  76. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251010-ppc64le.yaml +0 -0
  77. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251030-amd64.yaml +0 -0
  78. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251030-ppc64le.yaml +0 -0
  79. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251030-s390x.yaml +0 -0
  80. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251127-amd64.yaml +0 -0
  81. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251127-ppc64le.yaml +0 -0
  82. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251127-s390x.yaml +0 -0
  83. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251224-amd64.yaml +0 -0
  84. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251224-ppc64le.yaml +0 -0
  85. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251224-s390x.yaml +0 -0
  86. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251231-amd64.yaml +0 -0
  87. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251231-ppc64le.yaml +0 -0
  88. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-251231-s390x.yaml +0 -0
  89. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260129-amd64.yaml +0 -0
  90. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260129-ppc64le.yaml +0 -0
  91. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260129-s390x.yaml +0 -0
  92. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260216-amd64.yaml +0 -0
  93. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260216-ppc64le.yaml +0 -0
  94. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260216-s390x.yaml +0 -0
  95. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260226-amd64.yaml +0 -0
  96. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260226-ppc64le.yaml +0 -0
  97. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260226-s390x.yaml +0 -0
  98. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260305-amd64.yaml +0 -0
  99. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260305-ppc64le.yaml +0 -0
  100. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260305-s390x.yaml +0 -0
  101. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260313-amd64.yaml +0 -0
  102. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260313-ppc64le.yaml +0 -0
  103. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260313-s390x.yaml +0 -0
  104. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260318-amd64.yaml +0 -0
  105. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260318-ppc64le.yaml +0 -0
  106. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260318-s390x.yaml +0 -0
  107. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260326-amd64.yaml +0 -0
  108. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260326-ppc64le.yaml +0 -0
  109. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260326-s390x.yaml +0 -0
  110. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260430-amd64.yaml +0 -0
  111. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260430-ppc64le.yaml +0 -0
  112. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260430-s390x.yaml +0 -0
  113. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260527-amd64.yaml +0 -0
  114. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260527-ppc64le.yaml +0 -0
  115. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/catalogs/v9-260527-s390x.yaml +0 -0
  116. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/data/ocp.yaml +0 -0
  117. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/db2.py +0 -0
  118. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/mas/__init__.py +0 -0
  119. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/mas/apps.py +0 -0
  120. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/mas/suite.py +0 -0
  121. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/ocp.py +0 -0
  122. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/olm.py +0 -0
  123. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/pre_install.py +0 -0
  124. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/saas/__init__.py +0 -0
  125. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/saas/job_cleaner.py +0 -0
  126. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/slack.py +0 -0
  127. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/sls.py +0 -0
  128. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/tekton.py +0 -0
  129. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/aiservice-pipelines-pvc.yml.j2 +0 -0
  130. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/aiservice-pipelines-rbac.yml.j2 +0 -0
  131. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/ibm-entitlement-dockerconfig.json.j2 +0 -0
  132. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/ibm-entitlement-secret.yml.j2 +0 -0
  133. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/operatorgroup.yml.j2 +0 -0
  134. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipeline-additional-configs.yml.j2 +0 -0
  135. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-aiservice-upgrade.yml.j2 +0 -0
  136. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-uninstall.yml.j2 +0 -0
  137. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-update.yml.j2 +0 -0
  138. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelinerun-upgrade.yml.j2 +0 -0
  139. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelines-backup-pvc.yml.j2 +0 -0
  140. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelines-pvc.yml.j2 +0 -0
  141. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelines-rbac-cluster.yml.j2 +0 -0
  142. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/pipelines-rbac.yml.j2 +0 -0
  143. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/templates/subscription.yml.j2 +0 -0
  144. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas/devops/users.py +0 -0
  145. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas_devops.egg-info/SOURCES.txt +0 -0
  146. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas_devops.egg-info/dependency_links.txt +0 -0
  147. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas_devops.egg-info/requires.txt +0 -0
  148. {mas_devops-10.0.0 → mas_devops-10.1.2}/src/mas_devops.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mas-devops
3
- Version: 10.0.0
3
+ Version: 10.1.2
4
4
  Summary: Python for Maximo Application Suite Dev/Ops
5
5
  Home-page: https://github.com/ibm-mas/python-devops
6
6
  Author: David Parker
@@ -8,4 +8,4 @@
8
8
  #
9
9
  # *****************************************************************************
10
10
 
11
- __version__ = "10.0.0"
11
+ __version__ = "10.1.2"
@@ -11,7 +11,7 @@ import logging
11
11
  import os
12
12
  import yaml
13
13
  from openshift.dynamic import DynamicClient
14
- from openshift.dynamic.exceptions import NotFoundError
14
+ from openshift.dynamic.exceptions import NotFoundError, ResourceNotFoundError
15
15
  import boto3
16
16
  from botocore.exceptions import ClientError, NoCredentialsError
17
17
 
@@ -244,7 +244,7 @@ def backupResources(
244
244
 
245
245
  return (backed_up_count, not_found_count, failed_count, discovered_secrets)
246
246
 
247
- except NotFoundError:
247
+ except (NotFoundError, ResourceNotFoundError):
248
248
  if name:
249
249
  logger.info(f"{kind} '{name}' not found in {scope_desc}")
250
250
  not_found_count = 1
@@ -10,7 +10,7 @@
10
10
  import logging
11
11
  import yaml
12
12
  from openshift.dynamic import DynamicClient
13
- from openshift.dynamic.exceptions import NotFoundError
13
+ from openshift.dynamic.exceptions import NotFoundError, ResourceNotFoundError
14
14
 
15
15
  logger = logging.getLogger(name=__name__)
16
16
 
@@ -125,6 +125,9 @@ def restoreResource(dynClient: DynamicClient, resource_data: dict, namespace=Non
125
125
  logger.error(error_msg)
126
126
  return (False, resource_name, error_msg)
127
127
 
128
+ except ResourceNotFoundError:
129
+ return (True, resource_data.get("kind"), "skipped")
130
+
128
131
  except Exception as e:
129
132
  error_msg = f"Error restoring resource: {e}"
130
133
  logger.error(error_msg)
@@ -130,6 +130,10 @@ spec:
130
130
  - name: manage_workspace_id
131
131
  value: "{{ manage_workspace_id }}"
132
132
  {% endif %}
133
+ {% if backup_manage_include_pvc is defined and backup_manage_include_pvc != "" %}
134
+ - name: backup_manage_include_pvc
135
+ value: "{{ backup_manage_include_pvc }}"
136
+ {% endif %}
133
137
 
134
138
  # Manage Db2 Backup Configuration
135
139
  {% if manage_db2_namespace is defined and manage_db2_namespace != "" %}
@@ -178,6 +182,10 @@ spec:
178
182
  - name: facilities_workspace_id
179
183
  value: "{{ facilities_workspace_id }}"
180
184
  {% endif %}
185
+ {% if backup_facilities_include_pvc is defined and backup_facilities_include_pvc != "" %}
186
+ - name: backup_facilities_include_pvc
187
+ value: "{{ backup_facilities_include_pvc }}"
188
+ {% endif %}
181
189
 
182
190
  # Facilities Db2 Backup Configuration
183
191
  {% if facilities_db2_namespace is defined and facilities_db2_namespace != "" %}
@@ -840,6 +840,58 @@ spec:
840
840
  - name: mas_ws_facilities_properties_secret_name
841
841
  value: "{{ mas_ws_facilities_properties_secret_name }}"
842
842
  {%- endif %}
843
+ {%- if mas_ws_facilities_dataconnectagent_deploymentmode is defined and mas_ws_facilities_dataconnectagent_deploymentmode != "" %}
844
+ - name: mas_ws_facilities_dataconnectagent_deploymentmode
845
+ value: "{{ mas_ws_facilities_dataconnectagent_deploymentmode }}"
846
+ {%- endif %}
847
+ {%- if mas_ws_facilities_extendedformulaagent_deploymentmode is defined and mas_ws_facilities_extendedformulaagent_deploymentmode != "" %}
848
+ - name: mas_ws_facilities_extendedformulaagent_deploymentmode
849
+ value: "{{ mas_ws_facilities_extendedformulaagent_deploymentmode }}"
850
+ {%- endif %}
851
+ {%- if mas_ws_facilities_formularecalcagent_deploymentmode is defined and mas_ws_facilities_formularecalcagent_deploymentmode != "" %}
852
+ - name: mas_ws_facilities_formularecalcagent_deploymentmode
853
+ value: "{{ mas_ws_facilities_formularecalcagent_deploymentmode }}"
854
+ {%- endif %}
855
+ {%- if mas_ws_facilities_incomingmailagent_deploymentmode is defined and mas_ws_facilities_incomingmailagent_deploymentmode != "" %}
856
+ - name: mas_ws_facilities_incomingmailagent_deploymentmode
857
+ value: "{{ mas_ws_facilities_incomingmailagent_deploymentmode }}"
858
+ {%- endif %}
859
+ {%- if mas_ws_facilities_objectmigrationagent_deploymentmode is defined and mas_ws_facilities_objectmigrationagent_deploymentmode != "" %}
860
+ - name: mas_ws_facilities_objectmigrationagent_deploymentmode
861
+ value: "{{ mas_ws_facilities_objectmigrationagent_deploymentmode }}"
862
+ {%- endif %}
863
+ {%- if mas_ws_facilities_objectpublishagent_deploymentmode is defined and mas_ws_facilities_objectpublishagent_deploymentmode != "" %}
864
+ - name: mas_ws_facilities_objectpublishagent_deploymentmode
865
+ value: "{{ mas_ws_facilities_objectpublishagent_deploymentmode }}"
866
+ {%- endif %}
867
+ {%- if mas_ws_facilities_maintenanceagent_deploymentmode is defined and mas_ws_facilities_maintenanceagent_deploymentmode != "" %}
868
+ - name: mas_ws_facilities_maintenanceagent_deploymentmode
869
+ value: "{{ mas_ws_facilities_maintenanceagent_deploymentmode }}"
870
+ {%- endif %}
871
+ {%- if mas_ws_facilities_reportqueueagent_deploymentmode is defined and mas_ws_facilities_reportqueueagent_deploymentmode != "" %}
872
+ - name: mas_ws_facilities_reportqueueagent_deploymentmode
873
+ value: "{{ mas_ws_facilities_reportqueueagent_deploymentmode }}"
874
+ {%- endif %}
875
+ {%- if mas_ws_facilities_wfagent_deploymentmode is defined and mas_ws_facilities_wfagent_deploymentmode != "" %}
876
+ - name: mas_ws_facilities_wfagent_deploymentmode
877
+ value: "{{ mas_ws_facilities_wfagent_deploymentmode }}"
878
+ {%- endif %}
879
+ {%- if mas_ws_facilities_wffutureagent_deploymentmode is defined and mas_ws_facilities_wffutureagent_deploymentmode != "" %}
880
+ - name: mas_ws_facilities_wffutureagent_deploymentmode
881
+ value: "{{ mas_ws_facilities_wffutureagent_deploymentmode }}"
882
+ {%- endif %}
883
+ {%- if mas_ws_facilities_wfnotificationagent_deploymentmode is defined and mas_ws_facilities_wfnotificationagent_deploymentmode != "" %}
884
+ - name: mas_ws_facilities_wfnotificationagent_deploymentmode
885
+ value: "{{ mas_ws_facilities_wfnotificationagent_deploymentmode }}"
886
+ {%- endif %}
887
+ {%- if mas_ws_facilities_reservesmtpagent_deploymentmode is defined and mas_ws_facilities_reservesmtpagent_deploymentmode != "" %}
888
+ - name: mas_ws_facilities_reservesmtpagent_deploymentmode
889
+ value: "{{ mas_ws_facilities_reservesmtpagent_deploymentmode }}"
890
+ {%- endif %}
891
+ {%- if mas_ws_facilities_scheduleragent_deploymentmode is defined and mas_ws_facilities_scheduleragent_deploymentmode != "" %}
892
+ - name: mas_ws_facilities_scheduleragent_deploymentmode
893
+ value: "{{ mas_ws_facilities_scheduleragent_deploymentmode }}"
894
+ {%- endif %}
843
895
 
844
896
  {%- endif %}
845
897
 
@@ -204,6 +204,10 @@ spec:
204
204
  - name: restore_manage_db
205
205
  value: "{{ restore_manage_db }}"
206
206
  {% endif %}
207
+ {% if restore_manage_include_pvc is defined and restore_manage_include_pvc != "" %}
208
+ - name: restore_manage_include_pvc
209
+ value: "{{ restore_manage_include_pvc }}"
210
+ {% endif %}
207
211
  # Manage App Storage class
208
212
  {% if manage_app_override_storageclass is defined and manage_app_override_storageclass != "" %}
209
213
  - name: manage_app_override_storageclass
@@ -246,6 +250,10 @@ spec:
246
250
  - name: restore_facilities_db
247
251
  value: "{{ restore_facilities_db }}"
248
252
  {% endif %}
253
+ {% if restore_facilities_include_pvc is defined and restore_facilities_include_pvc != "" %}
254
+ - name: restore_facilities_include_pvc
255
+ value: "{{ restore_facilities_include_pvc }}"
256
+ {% endif %}
249
257
  # Facilities App Storage class
250
258
  {% if facilities_app_override_storageclass is defined and facilities_app_override_storageclass != "" %}
251
259
  - name: facilities_app_override_storageclass
@@ -0,0 +1,171 @@
1
+ """
2
+ Utility functions for version comparison and other common operations.
3
+
4
+ This module provides semantic version comparison utilities with custom handling
5
+ for pre-release versions and wildcard version strings.
6
+ """
7
+
8
+ import logging
9
+ import re
10
+ import semver
11
+ import requests
12
+ from requests.auth import HTTPBasicAuth
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ def isVersionBefore(_compare_to_version, _current_version):
18
+ """
19
+ Check if the current version is before (older than) the comparison version.
20
+
21
+ This function performs a modified semantic version comparison where pre-release
22
+ versions are treated as equal to their base release version. For example,
23
+ '8.6.0-pre.m1dev86' is normalized to '8.6.0' before comparison. Wildcard versions
24
+ like '8.6.x' are converted to '8.6.0'.
25
+
26
+ Args:
27
+ _compare_to_version (str): The version to compare against (e.g., "8.6.0").
28
+ _current_version (str): The current version to check (e.g., "8.5.0" or "8.6.0-pre.m1dev86").
29
+ Can be None, in which case False is returned.
30
+
31
+ Returns:
32
+ bool: True if current_version < compare_to_version, False otherwise.
33
+ Returns False if _current_version is None.
34
+
35
+ Note:
36
+ This differs from strict semantic versioning where pre-release versions
37
+ are considered less than their base version.
38
+ """
39
+ if _current_version is None:
40
+ print("Version is not informed. Returning False")
41
+ return False
42
+
43
+ strippedVersion = _current_version.split("-")[0]
44
+ if ".x" in strippedVersion:
45
+ strippedVersion = strippedVersion.replace(".x", ".0")
46
+ current_version = semver.VersionInfo.parse(strippedVersion)
47
+ compareToVersion = semver.VersionInfo.parse(_compare_to_version)
48
+ return current_version.compare(compareToVersion) < 0
49
+
50
+
51
+ def isVersionEqualOrAfter(_compare_to_version, _current_version):
52
+ """
53
+ Check if the current version is equal to or after (newer than) the comparison version.
54
+
55
+ This function performs a modified semantic version comparison where pre-release
56
+ versions are treated as equal to their base release version. For example,
57
+ '8.6.0-pre.m1dev86' is normalized to '8.6.0' before comparison. Wildcard versions
58
+ like '8.6.x' are converted to '8.6.0'.
59
+
60
+ Args:
61
+ _compare_to_version (str): The version to compare against (e.g., "8.6.0").
62
+ _current_version (str): The current version to check (e.g., "8.7.0" or "8.6.0-pre.m1dev86").
63
+ Can be None, in which case False is returned.
64
+
65
+ Returns:
66
+ bool: True if current_version >= compare_to_version, False otherwise.
67
+ Returns False if _current_version is None.
68
+
69
+ Note:
70
+ This differs from strict semantic versioning where pre-release versions
71
+ are considered less than their base version.
72
+ """
73
+ if _current_version is None:
74
+ print("Version is not informed. Returning False")
75
+ return False
76
+
77
+ strippedVersion = _current_version.split("-")[0]
78
+ if ".x" in strippedVersion:
79
+ strippedVersion = strippedVersion.replace(".x", ".0")
80
+ current_version = semver.VersionInfo.parse(strippedVersion)
81
+ compareToVersion = semver.VersionInfo.parse(_compare_to_version)
82
+ return current_version.compare(compareToVersion) >= 0
83
+
84
+
85
+ def validateIBMEntitlementKey(entitlementKey: str, repository: str = "cp/mas/coreapi", timeout: int = 30) -> bool:
86
+ """Validate IBM entitlement key against cp.icr.io registry.
87
+
88
+ This function validates an IBM entitlement key by attempting to obtain
89
+ an authentication token from the IBM Container Registry and verifying
90
+ access to the specified repository.
91
+
92
+ Args:
93
+ entitlementKey (str): IBM entitlement key to validate.
94
+ repository (str, optional): Repository to test access against. Defaults to "cp/mas/coreapi".
95
+ timeout (int, optional): Request timeout in seconds. Defaults to 30.
96
+
97
+ Returns:
98
+ bool: True if key is valid and grants access to the repository, False otherwise.
99
+
100
+ Raises:
101
+ requests.exceptions.RequestException: If network request fails.
102
+ """
103
+ try:
104
+ registry_url = f"https://cp.icr.io/v2/{repository}/tags/list"
105
+ logger.debug(f"Validating entitlement key against {repository}")
106
+
107
+ # First request without auth to get the auth challenge
108
+ response = requests.get(registry_url, timeout=timeout)
109
+
110
+ if response.status_code == 401:
111
+ # Parse WWW-Authenticate header to get token endpoint
112
+ auth_header = response.headers.get("WWW-Authenticate", "")
113
+ logger.debug(f"Auth challenge received: {auth_header[:100]}...")
114
+
115
+ # Extract realm and service from auth header
116
+ realm_match = re.search(r'realm="([^"]+)"', auth_header)
117
+ service_match = re.search(r'service="([^"]+)"', auth_header)
118
+ scope_match = re.search(r'scope="([^"]+)"', auth_header)
119
+
120
+ if not realm_match:
121
+ logger.error("Could not parse authentication realm")
122
+ return False
123
+
124
+ token_url = realm_match.group(1)
125
+ params = {}
126
+
127
+ if service_match:
128
+ params["service"] = service_match.group(1)
129
+ if scope_match:
130
+ params["scope"] = scope_match.group(1)
131
+ else:
132
+ params["scope"] = f"repository:{repository}:pull"
133
+
134
+ logger.debug(f"Token endpoint: {token_url}")
135
+
136
+ # Get authentication token
137
+ token_response = requests.get(token_url, params=params, auth=HTTPBasicAuth("cp", entitlementKey), timeout=timeout)
138
+
139
+ if token_response.status_code != 200:
140
+ logger.error(f"Failed to get token (HTTP {token_response.status_code})")
141
+ return False
142
+
143
+ token_data = token_response.json()
144
+ token = token_data.get("token") or token_data.get("access_token")
145
+
146
+ if not token:
147
+ logger.error("No token received - invalid entitlement key")
148
+ return False
149
+
150
+ # Validate token by accessing registry
151
+ logger.debug("Validating token against registry")
152
+ headers = {"Authorization": f"Bearer {token}"}
153
+ validate_response = requests.get(registry_url, headers=headers, timeout=timeout)
154
+
155
+ if validate_response.status_code == 200:
156
+ logger.info(f"Valid entitlement key with access to {repository}")
157
+ return True
158
+ else:
159
+ logger.error(f"Token validation failed (HTTP {validate_response.status_code})")
160
+ return False
161
+
162
+ elif response.status_code == 200:
163
+ logger.info("Registry accessible without authentication (public repository)")
164
+ return True
165
+ else:
166
+ logger.error(f"Unexpected response (HTTP {response.status_code})")
167
+ return False
168
+
169
+ except requests.exceptions.RequestException as e:
170
+ logger.error(f"Request failed: {e}")
171
+ raise
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mas-devops
3
- Version: 10.0.0
3
+ Version: 10.1.2
4
4
  Summary: Python for Maximo Application Suite Dev/Ops
5
5
  Home-page: https://github.com/ibm-mas/python-devops
6
6
  Author: David Parker
@@ -1,76 +0,0 @@
1
- """
2
- Utility functions for version comparison and other common operations.
3
-
4
- This module provides semantic version comparison utilities with custom handling
5
- for pre-release versions and wildcard version strings.
6
- """
7
-
8
- import semver
9
-
10
-
11
- def isVersionBefore(_compare_to_version, _current_version):
12
- """
13
- Check if the current version is before (older than) the comparison version.
14
-
15
- This function performs a modified semantic version comparison where pre-release
16
- versions are treated as equal to their base release version. For example,
17
- '8.6.0-pre.m1dev86' is normalized to '8.6.0' before comparison. Wildcard versions
18
- like '8.6.x' are converted to '8.6.0'.
19
-
20
- Args:
21
- _compare_to_version (str): The version to compare against (e.g., "8.6.0").
22
- _current_version (str): The current version to check (e.g., "8.5.0" or "8.6.0-pre.m1dev86").
23
- Can be None, in which case False is returned.
24
-
25
- Returns:
26
- bool: True if current_version < compare_to_version, False otherwise.
27
- Returns False if _current_version is None.
28
-
29
- Note:
30
- This differs from strict semantic versioning where pre-release versions
31
- are considered less than their base version.
32
- """
33
- if _current_version is None:
34
- print("Version is not informed. Returning False")
35
- return False
36
-
37
- strippedVersion = _current_version.split("-")[0]
38
- if ".x" in strippedVersion:
39
- strippedVersion = strippedVersion.replace(".x", ".0")
40
- current_version = semver.VersionInfo.parse(strippedVersion)
41
- compareToVersion = semver.VersionInfo.parse(_compare_to_version)
42
- return current_version.compare(compareToVersion) < 0
43
-
44
-
45
- def isVersionEqualOrAfter(_compare_to_version, _current_version):
46
- """
47
- Check if the current version is equal to or after (newer than) the comparison version.
48
-
49
- This function performs a modified semantic version comparison where pre-release
50
- versions are treated as equal to their base release version. For example,
51
- '8.6.0-pre.m1dev86' is normalized to '8.6.0' before comparison. Wildcard versions
52
- like '8.6.x' are converted to '8.6.0'.
53
-
54
- Args:
55
- _compare_to_version (str): The version to compare against (e.g., "8.6.0").
56
- _current_version (str): The current version to check (e.g., "8.7.0" or "8.6.0-pre.m1dev86").
57
- Can be None, in which case False is returned.
58
-
59
- Returns:
60
- bool: True if current_version >= compare_to_version, False otherwise.
61
- Returns False if _current_version is None.
62
-
63
- Note:
64
- This differs from strict semantic versioning where pre-release versions
65
- are considered less than their base version.
66
- """
67
- if _current_version is None:
68
- print("Version is not informed. Returning False")
69
- return False
70
-
71
- strippedVersion = _current_version.split("-")[0]
72
- if ".x" in strippedVersion:
73
- strippedVersion = strippedVersion.replace(".x", ".0")
74
- current_version = semver.VersionInfo.parse(strippedVersion)
75
- compareToVersion = semver.VersionInfo.parse(_compare_to_version)
76
- return current_version.compare(compareToVersion) >= 0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes