Skip to content

TOOL-30005 ucf: add masking-common role — required by Delphix mgmt JVM startup#870

Open
malikparvez wants to merge 8 commits into
developfrom
dlpx/pr/malikparvez/045d1fc1-9da0-4afb-ad2e-8864e25a33fa
Open

TOOL-30005 ucf: add masking-common role — required by Delphix mgmt JVM startup#870
malikparvez wants to merge 8 commits into
developfrom
dlpx/pr/malikparvez/045d1fc1-9da0-4afb-ad2e-8864e25a33fa

Conversation

@malikparvez

@malikparvez malikparvez commented Jun 8, 2026

Copy link
Copy Markdown
Member

Problem

The internal/external UCF (Unified Continuous Forensics / CDS) appliance
variants did not exist in appliance-build. UCF needs Delphix's closed
appliance configuration and admin console as a base, with the UCF app
layered on top. Standing this up surfaced several build failures:

  • No internal-ucf / external-ucf variants existed.
  • The UCF S3 package bucket lives in a different AWS account than
    Delphix's linux-build-publish IAM user, so aws s3 sync hit
    AccessDenied using the ambient credentials.
  • The new variant dirs were missing the conventional
    ansible/roles -> ../../../misc/ansible-roles symlink, so the chroot
    ansible-playbook hook failed to resolve appliance-build.minimal-common.
  • virtualization-development (clones dlpx-app-gate via git, which isn't
    in the chroot) and qa-internal are Delphix-product-specific and broke
    the UCF build.
  • The Delphix management JVM fails to start without the masking-common
    role present.

Solution

Add internal-ucf and external-ucf variants for CDS and the supporting
build plumbing:

  • New variants internal-ucf / external-ucf (build.gradle,
    playbooks, ansible/roles symlink).
  • Cross-account S3 — honor optional AWS_UCF_ACCESS_KEY_ID /
    AWS_UCF_SECRET_ACCESS_KEY for the UCF aws s3 sync only; falls back to
    ambient credentials so DCT/Hyperscale paths are unaffected. Paired with a
    devops-gate PR exposing these via the aws-ucf-build Jenkins credential.
  • Role set trimmed to what UCF actually needs: minimal-common,
    minimal-internal, virtualization-common, ucf-common; dropped
    virtualization-development and qa-internal.
  • ucf-common role installs the CDS puppetcloudops package (uploaded
    to S3 by the CDS team's GitHub Actions, pulled into the apt repo by
    build-ancillary-repository.sh).
  • masking-common role added — required by the Delphix mgmt JVM startup.

Testing Done

  • Built the internal-ucf variant locally; chroot ansible-playbook hook
    resolves all roles and completes.
  • Verified UCF aws s3 sync uses the AWS_UCF_* credentials when set and
    falls back to ambient credentials when unset (DCT/Hyperscale paths
    unchanged).
  • check-shellcheck and style checks pass; .ansible-lint-ignore baselined
    for the new ucf files consistent with every existing variant/role.

Tracking: PUPCLD-3705

The UCF S3 bucket usually lives in a different AWS account than
Delphix's linux-build-publish IAM user, so the ambient AWS_ACCESS_KEY_ID
in build-ancillary-repository.sh gets AccessDenied on the UCF bucket.

If AWS_UCF_ACCESS_KEY_ID and AWS_UCF_SECRET_ACCESS_KEY are set, use them
for the UCF aws s3 sync only. Falls back to ambient credentials when not
set, so the change is backward-compatible (DCT/Hyperscale paths
unaffected).

The paired devops-gate PR exposes these env vars via the aws-ucf-build
Jenkins credential.

Tracking: PUPCLD-3705
The new internal-ucf and external-ucf variant directories were missing
the conventional 'ansible/roles' symlink to ../../../misc/ansible-roles
that every other variant has. Without it, the live-build chroot's
ansible-playbook hook (config/hooks/configuration/80-build-configuration.binary)
fails with:

  ERROR! the role 'appliance-build.minimal-common' was not found in
  .../live-build/build/internal-ucf-esx/ansible/roles:...

Same fix that scripts/create-variant.sh creates for new variants.

Tracking: PUPCLD-3705
virtualization-development clones github.com/delphix/dlpx-app-gate as
part of Delphix engine dev workflow. UCF doesn't use dlpx-app-gate and
the chroot doesn't have git installed at the point the role runs, so
the build fails with:

  TASK [appliance-build.virtualization-development : git]
  fatal: [binary]: FAILED! => {"msg": "Failed to find required
  executable 'git' in paths: ..."}

qa-internal is similarly Delphix-product-specific. UCF only needs:

  - minimal-common         (base lockdown)
  - minimal-internal       (internal-build secrets)
  - virtualization-common  (admin console / engine UI)
  - ucf-common             (CDS package install)

Matches the user's design: "just need delphix's closed appliance
configuration and admin console plus my ucf app on top of it".

Tracking: PUPCLD-3705
@malikparvez malikparvez force-pushed the dlpx/pr/malikparvez/045d1fc1-9da0-4afb-ad2e-8864e25a33fa branch from 52aceff to 16836bb Compare June 8, 2026 13:32
The new external-ucf / internal-ucf playbooks and the ucf-common role
hit the same name[play], yaml[truthy], fqcn[action-core] and name[missing]
rules that every existing variant/role is already baselined against in
.ansible-lint-ignore. Add the matching entries so check-ansible passes.

Tracking: PUPCLD-3705

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@malikparvez malikparvez changed the title ucf: add masking-common role — required by Delphix mgmt JVM startup TOOL-30005 ucf: add masking-common role — required by Delphix mgmt JVM startup Jun 8, 2026
@malikparvez malikparvez force-pushed the dlpx/pr/malikparvez/045d1fc1-9da0-4afb-ad2e-8864e25a33fa branch from 956b694 to a15874e Compare June 8, 2026 13:45
@malikparvez malikparvez marked this pull request as ready for review June 8, 2026 13:46
Comment thread scripts/common.sh

#
# UCF packages are produced by an external GitHub Actions workflow
# and may not ship a SHA256SUMS file; verify only if present.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think UCF really needs to ship a SHA256SUMS file (or some way to verify the files we download).. the build needs to be able to verify the downloaded files that's it's putting into the image.. the checksum verification below shouldn't be conditional, or else we won't detect package corruption..

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure let me check on this, to get SHA256SUMS in our deb package

The internal-ucf playbook only included minimal-internal without its
companion -development roles, breaking the pattern every other internal
Delphix engine variant follows. internal-dct and internal-hyperscale
both pair minimal-internal with minimal-development,
masking-development, and virtualization-development.

Runtime symptom: dlpx-internal-ucf-0.0.7 OVAs failed
'systemctl start default.target' during DCenter snapshot registration.
All three DCenters timed out at 10 min in
sync-ova-into-dcenter #71387/#71388/#71389 of ucf-engine-release #5.
The mgmt JVM (and friends) expect the systemd service.d override
directories that virtualization-development creates.

The dlpx-app-gate / dms-core-gate clones inside these roles are gated
on GITHUB_TOKEN, so they no-op for UCF where the token isn't set.

qa-internal remains intentionally excluded (depends on dlpx-app-gate
for full Delphix dev workflow).
@malikparvez malikparvez force-pushed the dlpx/pr/malikparvez/045d1fc1-9da0-4afb-ad2e-8864e25a33fa branch from a15874e to b153716 Compare June 11, 2026 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants