1.8
Major Additions
Python Code Linter
We incorporated PyLint as the approach to linting Python modules to detect errors. This will enable developers to identify and resolve errors during a project build. By default, PyLint checkers classfied as errors are flagged and can be configured through Habushu's configuration.
There is a known issue with using PyLint and importing modules from the Behave package that will require a modification to Python test scripts. For existing projects, you will need to change the imports by:
- from behave import *
+ from behave import given, when, then # pylint: disable=no-name-in-module
Transition from Orphedomos to Fabric8
aiSSEMBLE has changed its Docker management plugin from the orphedomos-maven-plugin to Fabric8's docker-maven-plugin. This will enable developers to leverage a Docker management tool that is maintained and supported by a broader community.
Helm Migration
The following Helm charts have been migrated to the v2
structure. To migrate your helm charts to use the v2 pattern, please follow the instruction in the technical documentation.
- Spark Operator (projects created after 1.2 will have this chart by default)
Breaking Changes
Note: instructions for adapting to these changes are outlined in the upgrade instructions below.
- Transitioning from
orphedomos
tofabric8
may result in breaking changes, see the Upgrade Steps for Projects with Customized Orphedomos Configurations for further details. - The following docker modules have been deprecated. You need to continue to use the 1.7.0 versions rather than
upgrade them. Please note, these will only be breaking IF you try to use the 1.8.0 versions, which would require manual
intervention. The helm charts referencing these containers have already been updated to use 1.7.0.aissemble-airflow
aissemble-kafka
aissemble-mlflow
- Upgraded Pydantic v1.10.x to 2.8.x to incorporate performance improvements and incorporate the availability of new features for future. See here for the guide on how to migrate pydantic V1 into V2.
Known Issues
- There is currently a bug with the Sagemaker training Docker image generated by the
aissemble-sagemaker-training-docker
Fermenter
profile. The installation of thelogistic-training
module'srequirements.txt
fails, due to an unresolvable set of dependencies. - Running a downstream project build with
-Pintegration-test
is currently broken due to incompatibilities that have remained from before the open-sourcing. - If you have updated your project to include the docker registry in image names when built locally, the
orphedomos-to-fabric8-migration
may remove the registry. It can simply be added back without issue. - ArgoCD apps fail to utilize the current deploy job branch parameter, see the Upgrade Steps for ArgoCD Branch Deployment below for resolution.
- For project deploying the Spark Operator V2 chart with ArgoCd, there is an issue with metadata being too long resulting in the CRD failing to deploy. See the Upgrade Steps for Spark Operator v2 ArgoCD CRD Deployment section below for resolution.
Known Vulnerabilities
Date identified |
Vulnerability | Severity | Package | Affected versions |
CVE | Fixed in |
---|
How to Upgrade
The following steps will upgrade your project to 1.8. These instructions consist of multiple phases:
- Automatic Upgrades - no manual action required
- Precondition Steps - needed in all situations
- Conditional Steps (e.g., Python steps, Java steps, if you use Metadata, etc)
- Final Steps - needed in all situations
Automatic Upgrades
To reduce burden of upgrading aiSSEMBLE, the Baton project is used to automate the migration of some files to the new version. These migrations run automatically when you build your project, and are included by default when you update the build-parent
version in your root POM. Below is a description of all of the Baton migrations that are included with this version of aiSSEMBLE.
Migration Name | Description |
---|---|
upgrade-tiltfile-aissemble-version-migration | Updates the aiSSEMBLE version within your project's Tiltfile |
upgrade-v2-chart-files-aissemble-version-migration | Updates the helm chart dependencies within your project's deployment resources (<YOUR_PROJECT>-deploy/src/main/resources/apps/) to use the latest version of the aiSSEMBLE |
upgrade-v1-chart-files-aissemble-version-migration | Updates the docker image tags within your project's deployment resources (<YOUR_PROJECT>-deploy/src/main/resources/apps/) to use the latest version of the aiSSEMBLE |
python-linting-migration | Updates Habushu configuration in root pom.xml to disable build failures when linting issues are detected |
orphedomos-to-fabric8-migration | Updates orphedomos-maven-plugin usages to leverage fabric8's docker-maven-plugin |
aiops-reference-python-migration | Updates the python packages which were renamed from aiops to aissemble . |
aiops-reference-pdp-python-migration | Updates the policy decision point python packages which were renamed from aiops to aissemble . |
aiops-reference-java-migration | Updates the java packages which were renamed from aiops to aissemble . |
add-fabric8-to-build-migration | Ensures all Docker modules have the Docker Maven plugin defined in project/build/plugins . |
fabric8-location-migration | For all aggregator projects (packaging type pom ), moves plugin definitions for the Docker Maven plugin from build/plugins to build/pluginManagement/plugins . |
To deactivate any of these migrations, add the following configuration to the baton-maven-plugin
within your root pom.xml
:
<plugin>
<groupId>org.technologybrewery.baton</groupId>
<artifactId>baton-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.boozallen.aissemble</groupId>
<artifactId>foundation-upgrade</artifactId>
<version>${version.aissemble}</version>
</dependency>
</dependencies>
+ <configuration>
+ <deactivateMigrations>
+ <deactivateMigration>NAME_OF_MIGRATION</deactivateMigration>
+ <deactivateMigration>NAME_OF_MIGRATION</deactivateMigration>
+ </deactivateMigrations>
+ </configuration>
</plugin>
Precondition Steps - Required for All Projects
Beginning the Upgrade
To start your aiSSEMBLE upgrade, update your project's pom.xml to use the 1.8.0 version of the build-parent:
<parent>
<groupId>com.boozallen.aissemble</groupId>
<artifactId>build-parent</artifactId>
<version>1.8.2</version>
</parent>
Conditional Steps
Upgrade Steps for Projects Leveraging aiSSEMBLE Inference Pipeline
With the enablement of linting, there is a known issue with the Pylint package when linting on Python modules using the Pydantic package or Python files generated by Protobuff. As a result, when linting is enabled, the project build will error.
To resolve this error, within the <project-name>-pipelines/<pipeline-name>/<inference-step-name>/pyproject.toml
file, add the configuration:
[tool.pylint.'MESSAGES CONTROL']
extension-pkg-whitelist = "pydantic"
[tool.pylint.MASTER]
ignore-patterns = '.*pb2[\S]*.py'
Upgrade Steps for Projects with Customized Orphedomos Configurations
If any extra configurations were added to the orphedomos-maven-plugin
in addition to the generated defaults, executing the migration will result in loss of these extra configurations. To facilitate the upgrade, the following steps should be taken:
- Before executing the baton migration, it is recommended to ensure some form of version control is in place to preserve your existing
orphedomos-maven-plugin
configurations. - After executing the baton migration, please see the docker-maven-plugin docs to add back any extra configurations, via corresponding configuration analogs.
Steps for Projects leveraging Pipeline Invocation Service
For projects that downgraded the Pipeline Invocation Service to 1.6.1 to workaround the known issue with the 1.7.0 service, the workaround can be removed to upgrade the service to 1.8.0.
-
In the root pom.xml, the following baton migrations can be removed from the
deactivateMigrations
list:<deactivateMigrations> <deactivateMigration>upgrade-v2-chart-files-aissemble-version-migration</deactivateMigration> <deactivateMigration>upgrade-v1-chart-files-aissemble-version-migration</deactivateMigration> <deactivateMigration>upgrade-helm-chart-names-migration</deactivateMigration> </deactivateMigrations>
-
Update the
pipeline-invocation-service
Chart.yaml and values*.yaml files within your project's deploy folder (<YOUR_PROJECT>-deploy). Replace the following values and names accordingly:Current Value Required Value aissemble-pipeline-invocation aissemble-pipeline-invocation-chart aissemble-pipeline-invocation-lib aissemble-pipeline-invocation-lib-chart aissemble-quarkus aissemble-quarkus-chart https://nexus.boozallencsn.com/repository/aiops-helm-internal/ oci://ghcr.io/boozallen
Upgrade Steps for ArgoCD Branch Deployment
Due to the issues with ArgoCD apps not respecting the deploy job branch parameter, any test deployments completed prior to merging into dev
will fail to include modifications made to your helm charts. To ensure ArgoCD is using the correct branch when deploying, add the following to your argocdDeploy
method within devops/jenkinsPipelineSteps.groovy
:
def argocdDeploy(argocdAppName, argocdUrl, argocdDestinationServer, gitRepo, argocdBranch, argocdNamespace, values) {
String valuesParam = "--values " + values.join(" --values ")
sh "/usr/local/bin/argocd app create ${argocdAppName} --grpc-web \
--server ${argocdUrl} \
--dest-namespace ${argocdNamespace} \
--dest-server ${argocdDestinationServer} \
--repo ${gitRepo} \
--path video-processing-deploy/src/main/resources --revision ${argocdBranch} \
- ${valuesParam}"
+ ${valuesParam} \
+ --helm-set spec.targetRevision=${argocdBranch}"
Upgrade Steps for Spark Operator v2 ArgoCD CRD Deployment
When ArgoCD deploys a resource, it utilizes a client-side kubectl apply
which injects an annotation containing a complete copy of the YAML being deployed. This results in the metadata being too long for the Spark Operator v2 CRD. To resolve this, you can instruct ArgoCD to use a server side deployment instead by adding the following syncPolicy
to YOUR-PROJECT-deploy/src/main/resources/templates/spark-operator.yaml
spec:
+ syncPolicy:
+ syncOptions:
+ - ServerSideApply=true
Final Steps - Required for All Projects
Finalizing the Upgrade
- Run
./mvnw org.technologybrewery.baton:baton-maven-plugin:baton-migrate
to apply the automatic migrations - Run
./mvnw clean install
and resolve any manual actions that are suggested- NOTE: This will update any aiSSEMBLE dependencies in 'pyproject.toml' files automatically
- Repeat the previous step until all manual actions are resolved
What's Changed
- Aissemble release 1.7 by @ewilkins-csi in #137
- #123 publish docs branches and fix antora warnings by @ewilkins-csi in #139
- #123 add test.pypi.org as supplemental source by @ewilkins-csi in #144
- #127 #116 Hive Metastore Service v2 chart and Hive upgrade by @peter-mcclonski in #130
- #127 Rollback of deprecation notices by @peter-mcclonski in #145
- #140 📝 add badges to modules by @d-ryan-ashcraft in #143
- Enable PyLint On Python Modules by @liangyun123 in #148
- #118 Read in and validate policies for universal config properties by @carter-cundiff in #151
- #118 Store map of deprecated methods on class instead of Pydantic config by @carter-cundiff in #155
- #149 v2 hive db by @peter-mcclonski in #153
- Issue #92: Fix PySpark RDBMS data ingest steps writing to a non-persistent table by @cpointe-ibllanos in #146
- #159 🐛 improve build cache performance on SNAPSHOT plugin updates by @d-ryan-ashcraft in #160
- #166 update redpanda/testcontainers/artemis to latest versions by @ewilkins-csi in #167
- #166 configure quarkus to use latest redpanda image by @ewilkins-csi in #170
- #156 Create helm chart for the configuration-store by @cwoods-cpointe in #172
- #173 🐛 fix breaking kafka container build by removing old block t… by @d-ryan-ashcraft in #174
- #122 & #169 Feature rename Foundation Core Python & Policy Decision Point Python by @habibimoiz in #178
- #169 💚 resolving IT reference to aiopskey by @d-ryan-ashcraft in #182
- #176 Remove migration utils in prep for incroporation into Baton by @cpointe-ibllanos in #177
- #168 Update docker modules to use fabric8 by @carter-cundiff in #180
- #154 Initial Baton migration for Orphedomos to Fabric8 docker-maven-… by @chang-annie in #185
- #171 updating docker templates to fabric8 by @Cho-William in #188
- #183: Refactor Foundation Data Access module with latest aiSSEMBLE landscape by @habibimoiz in #189
- #179 update ci profile to use fabric8 for multi-platform docker build by @csun-cpointe in #187
- #150 use Habushu's
containerize-dependencies
goal by @ewilkins-csi in #192 - #150 revert fastapi image to
python:3.11
and re-use default docker cache by @ewilkins-csi in #196 - #150 switch fastapi image to python:3.11 by @ewilkins-csi in #198
- #195 Fix invocation service to work with OCI helm chart by @carter-cundiff in #200
- #199 fix environment variable substitution issue by @csun-cpointe in #201
- Update GitHub Build Actions by @liangyun123 in #197
- #199 fix baton version to use release v1.1.0 by @csun-cpointe in #204
- #191 archetype and migration update for fabric8 usage in ci and it profiles by @Cho-William in #203
- #186 Remove Pom migration utils in prep for new baton release by @cpointe-ibllanos in #202
- #186 Update baton version to latest release 1.1.1 by @cpointe-ibllanos in #207
- #199 fix CI too many requests issue by @csun-cpointe in #208
- #190 Read universal config properties using krausening by @cwoods-cpointe in #205
- #2 Update workflow env vars and branchs by @cwoods-cpointe in #215
- #199 fix PDP service so docker changes can be tested by @ewilkins-csi in #218
- #199 cleanup pipeline invocation service chart by @ewilkins-csi in #220
- #222 🔧 update command to not fail on existing user or group by @d-ryan-ashcraft in #223
- #199 images off of aissemble-quarkus & aissemble-fastapi by @ewilkins-csi in #225
- #221 🚀 improve build performance; #230 🔧 use ghcr.io as snapshot repo by @d-ryan-ashcraft in #229
- #199 fix Krausening/Quarkus config through helm by @ewilkins-csi in #237
- #199 only start Vault during ITs by @ewilkins-csi in #239
- #240 🐛 fix build instructions to work with ghcr.io by @d-ryan-ashcraft in #241
- #194 & #216 - Refactored extensions-security modules by @habibimoiz in #236
- #161 upversion pydantic to 2.8.x by @jaebchoi in #245
- #246 🚨 remove commandLineRules enforced warnings by @d-ryan-ashcraft in #247
- Fix Python service containers by @ewilkins-csi in #250
- #209 Create mutating admissions webhook for Universal Configuration Store by @carter-cundiff in #244
- #217 implement krausening as a light weight config store by @cwoods-cpointe in #234
- #251 remove custom spark operator compilation by @ewilkins-csi in #253
- #217 Correct config-store helm mda by @cwoods-cpointe in #254
- #246 🚨 remove commandLineRules enforced warnings for a… by @d-ryan-ashcraft in #256
- #255 fix PDP image and change Dockerfile delimiter by @ewilkins-csi in #257
New Contributors
Full Changelog: aissemble-root-1.7.0...aissemble-root-1.8.0