blob: 61a40d828c480d9c6cb0f1a9dc0656dc66e4fb5c [file] [log] [blame]
/**
*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*
* @author Andrea Turli
*/
package org.jclouds.virtualbox.domain;
import static org.jclouds.compute.util.ComputeServiceUtils.parseOsFamilyOrUnrecognized;
import java.util.List;
import java.util.Map;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.ImageBuilder;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
* Serializes to the following
*
* <pre>
* id: myTestId
* name: ubuntu-11.04-server-i386
* description: ubuntu 11.04 server (i386)
* os_arch: x86
* os_family: linux
* os_description: ubuntu
* os_version: 11.04
* iso: http://releases.ubuntu.com/11.04/ubuntu-11.04-server-i386.iso
* keystroke_sequence: |
* <Esc><Esc><Enter>
* /install/vmlinuz noapic preseed/url=http://10.0.2.2:8080/src/test/resources/preseed.cfg
* debian-installer=en_US auto locale=en_US kbd-chooser/method=us
* hostname=vmName
* fb=false debconf/frontend=noninteractive
* keyboard-configuration/layout=USA keyboard-configuration/variant=USA console-setup/ask_detect=false
* initrd=/install/initrd.gz -- <Enter>
* preseed_cfg: |
* ## Options to set on the command line
* d-i debian-installer/locale string en_US.utf8
* d-i console-setup/ask_detect boolean false
* d-i console-setup/layout string USA
* d-i netcfg/get_hostname string unassigned-hostname
* d-i netcfg/get_domain string unassigned-domain
* # Continue without a default route
* # Not working , specify a dummy in the DHCP
* d-i time/zone string UTC
* d-i clock-setup/utc-auto boolean true
* d-i clock-setup/utc boolean true
* d-i kbd-chooser/method select American English
* d-i netcfg/wireless_wep string
* d-i base-installer/kernel/override-image string linux-server
* # Choices: Dialog, Readline, Gnome, Kde, Editor, Noninteractive
* d-i debconf debconf/frontend select Noninteractive
* d-i pkgsel/install-language-support boolean false
* tasksel tasksel/first multiselect standard, ubuntu-server
* d-i partman-auto/method string lvm
* d-i partman-lvm/confirm boolean true
* d-i partman-lvm/device_remove_lvm boolean true
* d-i partman-auto/choose_recipe select atomic
* d-i partman/confirm_write_new_label boolean true
* d-i partman/confirm_nooverwrite boolean true
* d-i partman/choose_partition select finish
* d-i partman/confirm boolean true
* # Write the changes to disks and configure LVM?
* d-i partman-lvm/confirm boolean true
* d-i partman-lvm/confirm_nooverwrite boolean true
* d-i partman-auto-lvm/guided_size string max
* ## Default user, we can get away with a recipe to change this
* d-i passwd/user-fullname string toor
* d-i passwd/username string toor
* d-i passwd/user-password password password
* d-i passwd/user-password-again password password
* d-i user-setup/encrypt-home boolean false
* d-i user-setup/allow-password-weak boolean true
* # Individual additional packages to install
* d-i pkgsel/include string openssh-server ntp
* # Whether to upgrade packages after debootstrap.
* # Allowed values: none, safe-upgrade, full-upgrade
* d-i pkgsel/upgrade select full-upgrade
* d-i grub-installer/only_debian boolean true
* d-i grub-installer/with_other_os boolean true
* d-i finish-install/reboot_in_progress note
* #For the update
* d-i pkgsel/update-policy select none
* # debconf-get-selections --install
* #Use mirror
* choose-mirror-bin mirror/http/proxy string
* </pre>
*
* @author Kelvin Kakugawa
* @author Adrian Cole
*/
public class YamlImage {
public String id;
public String name;
public String description;
public String hostname;
public String location_id;
public String os_arch;
public String os_family;
public String os_description;
public String os_version;
public String iso;
public String keystroke_sequence;
public String preseed_cfg;
public int login_port = 22;
public boolean os_64bit;
public String group;
public List<String> tags = Lists.newArrayList();
public Map<String, String> metadata = Maps.newLinkedHashMap();
public String username;
public String credential;
public String credential_url;
public String sudo_password;
public static Function<YamlImage, Image> toImage = new Function<YamlImage, Image>() {
@Override
public Image apply(YamlImage arg0) {
if (arg0 == null)
return null;
OsFamily family = parseOsFamilyOrUnrecognized(arg0.os_family);
OperatingSystem operatingSystem = OperatingSystem.builder().description(arg0.os_description).family(family)
.version(arg0.os_version).is64Bit(arg0.os_64bit).build();
return new ImageBuilder().id(arg0.id).name(arg0.name).description(arg0.description)
.operatingSystem(operatingSystem).build();
}
};
public Image toImage() {
return toImage.apply(this);
}
}