@Override
  public ComputeEngineContainer start(Props props) {
    this.level1 = new ComponentContainer();
    this.level1
        .add(props.rawProperties())
        .add(LEVEL_1_COMPONENTS)
        .add(toArray(CorePropertyDefinitions.all()))
        .add(toArray(CePropertyDefinitions.all()));
    configureFromModules(this.level1);
    this.level1.startComponents();

    ComponentContainer level2 = this.level1.createChild();
    level2.add(LEVEL_2_COMPONENTS);
    configureFromModules(level2);
    level2.startComponents();

    ComponentContainer level3 = level2.createChild();
    level3.add(LEVEL_3_COMPONENTS);
    configureFromModules(level3);
    level3.startComponents();

    this.level4 = level3.createChild();
    this.level4.add(LEVEL_4_COMPONENTS);
    configureFromModules(this.level4);
    ServerExtensionInstaller extensionInstaller =
        this.level4.getComponentByType(ServerExtensionInstaller.class);
    extensionInstaller.installExtensions(this.level4);
    this.level4.startComponents();

    startupTasks();

    return this;
  }