@Override
  protected void addChildren() throws OpsException {
    JettyService model = OpsContext.get().getInstance(JettyService.class);

    InstanceBuilder instance =
        InstanceBuilder.build(model.dnsName, DiskImageRecipeBuilder.buildDiskImageRecipe(this));
    instance.minimumMemoryMb = 2048;
    addChild(instance);

    instance.addChild(JettyInstance.build());

    instance.addChild(CollectdCollector.build());
  }
  @Override
  protected void addChildren() throws OpsException {
    RedisServer model = OpsContext.get().getInstance(RedisServer.class);

    InstanceBuilder vm;

    {
      vm = InstanceBuilder.build(model.dnsName, this, model.getTags());

      // TODO: Memory _really_ needs to be configurable here!
      vm.publicPorts.add(PORT);

      vm.minimumMemoryMb = 1024;

      vm.hostPolicy.allowRunInContainer = true;
      addChild(vm);
    }

    vm.addChild(PackageDependency.build("redis-server"));

    RedisTemplateModel template = injected(RedisTemplateModel.class);

    vm.addChild(
        TemplatedFile.build(template, new File("/etc/redis/redis.conf")).setFileMode("444"));

    // Collectd not restarting correctly (doesn't appear to be hostname problems??)
    // instance.addChild(CollectdCollector.build());

    {
      PublicEndpoint endpoint = injected(PublicEndpoint.class);
      // endpoint.network = null;
      endpoint.publicPort = PORT;
      endpoint.backendPort = PORT;
      endpoint.dnsName = model.dnsName;

      endpoint.tagItem = model.getKey();
      endpoint.parentItem = model.getKey();

      vm.addChild(endpoint);
    }

    vm.addChild(ManagedService.build("redis-server"));
  }