Skip to content
Edouard Topin's Blog
From Legacy VM Apps to All Apps with VCF Automation 9.1 / Series 04/09

Inventorying the Legacy Estate: Decide What to Migrate, Retain, or Retire

Map services and dependencies, apply eligibility gates, and build verifiable migration waves.

Edouard Topin
9 min read
A register connects the technical VM Apps inventory to business services, owners, and migration decisions

Exporting the VM Apps deployment list quickly produces a reassuring spreadsheet. Yet that spreadsheet does not say who depends on webshop-db-01, which team may approve an outage, or whether the certificate, license, and backup process will survive a rebuild. A resource inventory is not yet a migration plan.

The right unit of decision is the application service. This article joins the VCF Automation view with network, data, identity, and operations dependencies, then places every service into one of five strategies. The deliverable is not “migrate everything.” It is 100% of services carrying a justified decision, visible blockers, and a verifiable wave.

Service, not VMBlocking gatesUnexecuted study

TL;DR

  • Decision: inventory the complete service contract, then assign retain, retire, rebuild, repackage, or modernize to every application.
  • The costly trade-off: an average score hides critical dependencies; one red data or rollback gate must block the wave.
  • Monday morning: export objects read-only, name an owner for each service, and run a dependency workshop with Network, IAM, Backup, and Operations.

A VM is not a migration unit

WebShop looks simple in the portal: three VMs created from one Cloud Template. To its consumer, however, the service includes an endpoint, a business transaction, a PostgreSQL database, identities, certificates, network rules, a load balancer, backups, alerts, and several automation objects.

The WebShop service at the center of seven dependency families: workloads, data, network, identity, operations, automation, and ownership

Original diagram: the register joins the platform graph to the application graph.

A wave does not succeed because webshop-web-01 boots in All Apps. It succeeds when the expected endpoint works, the reference transaction completes, data is consistent, on-call receives an actionable alert, and a reverse path remains available for the agreed window.

Build that view by joining two graphs:

  1. Platform graph — organization, project, catalog item, template version, deployment, resources, Day‑2 actions, and technical owner.
  2. Application graph — service, components, flows, data, identities, external systems, teams, and recovery objectives.

The register should retain source and target identifiers. Names alone are not enough: webshop-prod can identify a catalog item, deployment, CMDB record, or business service even though those objects do not share a lifecycle.

Extract four truths without changing the source

Discovery starts with read-only collection. From VCF Automation, gather organizations, projects, members, cloud accounts, zones, mappings, Blueprints or Cloud Templates, versions, catalog items, Custom Forms, deployments, leases, policies, subscriptions, Orchestrator workflows, ABX actions, and Custom Resources. For each object, record at least its ID, scope, version, owner, last observed use, dependencies, and export timestamp.

The platform view must be checked against three other sources:

Source What it contributes Common blind spot
VCF Automation managed objects, template, owner, lifecycle off-platform calls and business data
vCenter/NSX placement, NICs, segments, rules, traffic business intent and catalog contract
CMDB, monitoring, backup ownership, health, restore coverage drift or stale records
application workshop dependencies, windows, tolerance technical IDs and actually active flows

Do not resolve a discrepancy by averaging sources. If NSX observes a flow the owner does not recognize, that flow becomes an investigation. If the CMDB assigns the service to a team that no longer exists, the application has no reliable owner and cannot enter the pilot.

Do not store passwords, tokens, or private keys in this register. Record the vault reference and rotation owner. Migration is an opportunity to recreate secrets and avoid carrying a historical identity into the target.

Define the WebShop contract before designing the target

The contract states what must remain true regardless of deployment mechanism. This example is deliberately specific about names and cautious about results:

service_contract:
  id: webshop-prod
  consumer_endpoint: webshop.corp.example
  business_owner_role: ecommerce-owner
  functional_checks:
    - GET /healthz returns 200
    - GET /readyz returns 200 when dependencies are ready
    - reference checkout transaction succeeds
  data:
    technology: PostgreSQL
    rpo: required-before-wave
    rto: required-before-wave
    reconciliation: required-before-wave
  operations:
    monitoring_owner: platform-observability
    backup_owner: data-protection
    incident_route: ecommerce-on-call
  security:
    flow_review: required-before-wave
    identity_rotation: required-before-cutover
  evidence_status: design-example
  execution_status: not-executed

The /healthz and /readyz paths need different semantics: the first proves that the process is alive; the second succeeds only when required dependencies are ready. Add a representative business transaction because an HTTP 200 on the home page validates neither database writes, identity, nor calls to an external service.

The contract later becomes the cutover parity matrix. Even when the target uses another Blueprint and new IDs, it must satisfy the same behavior unless the program has explicitly approved a functional modernization.

Assign one of five decisions

Retain

The service remains on VM Apps for now: unsupported appliance, near end of life, or dependency too risky. Add an owner, durable platform, and review date.

Retire

No consumer remains. Require proof of non-use, archive, business approval, and a recovery window before deletion.

Rebuild

A supported image and automated configuration enable parallel deployment. This is the WebShop hypothesis for the Web and App tiers.

Repackage

A rebuild is unrealistic, but an image or OVA remains deployable. Check license, machine identity, hostname, certificates, and agents.

Modernize

The benefit justifies an architecture change. Separate this effort from the first transition when data and rollback are critical.

The portfolio does not need to reach 100% migrated. It needs to reach 100% governed decisions. A retain application with a durable destination and review date is healthier than an application marked “to migrate” that has had no owner for six months.

Use gates, never a reassuring average

An 82% score can hide a complete lack of reverse path for the database. Truly blocking criteria must stay individually visible:

Gate Green Amber Blocking red
Owner available decision-maker named interim unknown
Dependencies mapped and testable minor gaps open unknown critical flow
Image/runtime supported, boot tested adaptation defined unsupported
Data transfer and return tested method not rehearsed no reverse path
Network flows and DNS/LB approved governed temporary rule impossible dependency
Identity groups, accounts, certificates managed rotation planned uncontrolled secret
Extensions target mapping tested substantial rework irreplaceable dependency
License dual run/rehost permitted legal review open prohibited use
Rollback trigger, authority, sequence exercised exercise scheduled no path

One critical red gate blocks the wave, even if every other row is green. An amber gate has an owner and due date; it does not turn green merely because the committee wants to preserve the schedule.

For the webshop-web-nonprod pilot, the absence of business data reduces risk, but the service still needs to be representative: VPC, identity, catalog, monitoring, a Day‑2 action, and delete should all be exercised. A “hello world” validates access to the platform, not its operating model.

Classify automation objects separately

The application decision does not say how every VCF Automation artifact should be treated. Add a separate disposition:

Treatment Use WebShop example
reuse under conditions underlying object retained, new allocation Content Library validated for target use
export, adapt, import portable source, dependencies rebound Cloud Template logic rewritten
recreate target scope or ID differs project, policies, rotated secrets
retain then drain active object remains managed by VM Apps deployment webshop-prod-042
archive only historical evidence, no target object old approval history

Do not promise that export means semantic portability. VM Apps and All Apps expose different resource models. A form can be transportable as a file while it still relies on an action, ID, or endpoint that must be recreated and rebound.

Build waves around evidence

A reasonable sequence for the study is:

  1. Wave 0 — foundation: Region, organization, project, Namespace, VPC, images, identity, and policies; no business workload.
  2. Wave 1 — pilot: stateless non-production WebShop; create, functional, Day‑2, observability, delete, and rollback checks.
  3. Wave 2 — production stateless: Web and App tiers in All Apps, database still legacy, governed temporary flow.
  4. Wave 3 — data: target database, replication, reconciliation, and an exercised reverse path before cutover.
  5. Wave 4 — tail: remaining eligible services, retirements, and formal exceptions.
  6. Wave 5 — exit: drain, observed deactivation, then VM Apps retirement once accepted dependencies reach zero.

Every wave has entry and exit conditions, a change owner, and a rollback authority. The source stays operable until business acceptance and closure of the reverse window. This controlled strangler pattern avoids coupling platform reconstruction, data migration, and functional modernization in one big bang.

Assess App Stack Formation separately

All Apps eligibility and App Stack Formation eligibility are different questions. An application can be rebuilt in All Apps even when its Namespace cannot be captured as a Stateful Blueprint.

For a possible later capture, record the self-service Namespace, VM Group, project Content Library, hard-coded addresses or hostnames, startup and shutdown order, and data consistency requirements. The VCF Automation 9.1 documentation for Working with Stateful Blueprints also describes capture blockers, including VKS, an Avi Load Balancer, or vSphere Pods in the Namespace. Revalidate that list against the target build before preflight.

An App Stack blocker must not turn the entire application red in the main register. It closes one packaging method; it does not prove that an All Apps migration is impossible.

Pitfalls & things to watch

  • Keep pagination, role, and timestamp with every export; a UI/API discrepancy can be a visibility-scope issue.
  • Version decisions instead of overwriting their history.
  • Treat unknown as a blocking question, never as proof that a dependency is absent.
  • Follow relationships by ID when a template looks unused but still has deployments.
  • Allow no mass deletion during discovery.

Official sources

Conclusion

A useful inventory does more than count objects: it connects a service, its evidence, and a decision. WebShop becomes eligible when its dependencies are known, its owner accepts the contract, every critical gate is green, and the wave has a demonstrable reverse path. Until then, the honest status remains blocked or not executed.

Unit

The endpoint, data, and operations move together; one VM does not define the service.

Decision

Retain or retire can be as valid as rebuild when the owner and review date are explicit.

Gate

A critical blocker remains visible and stops the wave; no average compensates for it.

The next step can rebuild Cloud Templates, Custom Forms, and extensions in the All Apps model.

Get the next one by email

New articles and series, sent when they are published. No other mail.

One click to unsubscribe, any time.

Back to blog
Share

Related articles

  1. 8 min read

    App Stack Formation: Capture the WebShop Namespace Without Capturing Its Flaws

    Validate the Namespace, VM Group, and Content Library before performing a controlled, traceable App Stack capture.

  2. 6 min read

    From Captured Namespace to Catalog Product: Customize and Version the App Stack

    Test the clone, externalize identities and data, then promote a versioned App Stack into the catalog.

  3. 8 min read

    After the Upgrade: What the VM Apps Organization Really Preserves

    Establish a post-upgrade baseline, validate identity, Orchestrator, and Day-2, then separate upgrade debt from migration debt.

Follow along

New articles, thoughts, and updates.