public Pair<VespaModel, List<ConfigChangeAction>> deploy(VespaModel previousModel,
                                                             String services,
                                                             Zone zone,
                                                             String validationOverrides,
                                                             String... containerCluster) {
        Instant now = LocalDate.parse("2000-01-01", DateTimeFormatter.ISO_DATE).atStartOfDay().atZone(ZoneOffset.UTC).toInstant();
        Provisioned provisioned = hostProvisioner.startProvisionedRecording();
        ApplicationPackage newApp = new MockApplicationPackage.Builder()
                .withServices(services)
                .withSchemas(List.of(MUSIC_SCHEMA, BOOK_SCHEMA))
                .withValidationOverrides(validationOverrides)
                .build();
        VespaModelCreatorWithMockPkg newModelCreator = new VespaModelCreatorWithMockPkg(newApp);
        Stream<String> clusters = containerCluster.length == 0 ? Stream.of("default") : Arrays.stream(containerCluster);
        Set<ContainerEndpoint> containerEndpoints = clusters.map(name -> new ContainerEndpoint(name,
                                                                                               ApplicationClusterEndpoint.Scope.zone,
                                                                                               List.of(name + ".example.com")))
                                                            .collect(Collectors.toSet());
        DeployState.Builder deployStateBuilder = new DeployState.Builder()
                                                             .zone(zone)
                                                             .endpoints(containerEndpoints)
                                                             .applicationPackage(newApp)
                                                             .properties(properties)
                                                             .modelHostProvisioner(hostProvisioner)
                                                             .provisioned(provisioned)
                                                             .now(now);
        if (previousModel != null)
            deployStateBuilder.previousModel(previousModel);
        VespaModel newModel = newModelCreator.create(deployStateBuilder);
        return new Pair<>(newModel, newModelCreator.configChangeActions);
    }
Deploys an application

@param previousModel the previous model, or null if no previous
@param services the services file content
@param zone the zone this deploys to
@param validationOverrides the validation overrides file content, or null if none
@param containerCluster container cluster(s) which are declared in services
@return the new model and any change actions
config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java