package com.bocloud.cmp.model.installation;

import java.util.List;
import java.util.Map;

/**
 * 装机配置InstallOptions实体类
 *
 * @author 007
 */
public class InstallOptions {
    /**
     * osName
     * <p>
     * 安装ubuntu的时候设置为"ubuntu"
     * <p>
     * 安装debian的时候设置为"debian"
     */
    private String osName;
    /**
     * os version
     */
    private String version;
    /**
     * tftp os repo
     * <p>
     * windows装机时，repo需要指定winpe的地址
     */
    private String repo;
    /**
     * 机器超级管理员密码
     */
    private String rootPassword;
    /**
     * 机器主机名
     */
    private String hostname;
    /**
     * 域
     */
    private String domain;
    /**
     * 用户
     */
    private List<User> users;
    /**
     * root用户的ssh免密key
     */
    private String rootSshKey;
    /**
     * dns服务器
     */
    private List<String> dnsServers;
    /**
     * ntp服务器, ESXI安装可选配置项目
     */
    private List<String> ntpServers;
    /**
     * 机器网卡配置
     */
    private List<NetworkDevice> networkDevices;
    /**
     * kvm
     */
    private Boolean kvm;
    /**
     * 安装盘信息
     * <p>
     * 使用rackhd的identifier的数字.默认为0
     * <p>
     * installDisk is to specify the target disk which the OS will be installed
     * on. It can be a string or a number. For string, it is a disk path that
     * the OS can recongize, its format varies with OS. For example, "/dev/sda"
     * or "/dev/disk/by-id/scsi-36001636121940cc01df404d80c1e761e" for
     * CentOS/RHEL,
     * "t10.ATA_____SATADOM2DSV_3SE__________________________20130522AA0990120088"
     * or "naa.6001636101840bb01df404d80c2d76fe" or "mpx.vmhba1:C0:T1:L0" or
     * "vml.0000000000766d686261313a313a30" for ESXi.
     * <p>
     * For number, it is a RackHD generated disk identifier (it could be
     * obtained from "driveId" catalog). If installDisk is omitted, RackHD will
     * assign the default disk by order: SATADOM -> first disk in "driveId"
     * catalog -> "sda" for Linux OS. NOTE: Users need to make sure the
     * installDisk (either specified by user or by default) is the first
     * bootable drive from BIOS and raid controller setup. PhotonOS only
     * supports "/dev/sd*" format currently.
     */
    private Object installDisk;
    /**
     * esxi指定清除的硬盘信息
     * <p>
     * firstdisk, alldrives
     */
    private String clearDisk;
    /**
     * 分区设置
     */
    private List<InstallPartition> installPartitions;
    /**
     * ESXI装机时交换机的配置
     */
    private List<SwitchDevice> switchDevices;
    /**
     * ESXI装机时是否进入维护模式
     */
    private Boolean maintenanceMode;
    /**
     * ESXI装机完成后，自定义额外执行的命令
     */
    private List<String> postInstallCommands;
    /**
     * WINDOWS装机时，是否关闭防火墙
     */
    private Boolean firewallDisable;
    /**
     * WINDOWS装机密钥，"XXXX-XXXX-XXXX-XXXX-XXXX"
     */
    private String productkey;
    /**
     * WINDOWS装机smb服务用户名
     */
    private String smbUser;
    /**
     * WINDOWS装机smb服务密码
     */
    private String smbPassword;
    /**
     * WINDOWS装机smb服务地址，\\\\172.31.128.1\\windowsServer2012
     */
    private String smbRepo;
    /**
     * WINDOWS装机用户名
     */
    private String username;
    /**
     * WINDOWS装机用户密码
     */
    private String password;
    /**
     * UBUNTU 装机baseUrl
     */
    private String baseUrl;
    /**
     * UBUNTU 装机kargs
     */
    private Map<String, String> kargs;
    /**
     * UBUNTU 装机支持设置时区
     * <p>
     * UTC
     */
    private String timezone;
    /**
     * UBUNTU 装机支持设置ntp
     * <p>
     * 192.168.1.21
     */
    private String ntp;

    /**
     * @return the osName
     */
    public String getOsName() {
        return osName;
    }

    /**
     * @param osName the osName to set
     */
    public void setOsName(String osName) {
        this.osName = osName;
    }

    /**
     * @return the version
     */
    public String getVersion() {
        return version;
    }

    /**
     * @param version the version to set
     */
    public void setVersion(String version) {
        this.version = version;
    }

    /**
     * @return the repo
     */
    public String getRepo() {
        return repo;
    }

    /**
     * @param repo the repo to set
     */
    public void setRepo(String repo) {
        this.repo = repo;
    }

    /**
     * @return the rootPassword
     */
    public String getRootPassword() {
        return rootPassword;
    }

    /**
     * @param rootPassword the rootPassword to set
     */
    public void setRootPassword(String rootPassword) {
        this.rootPassword = rootPassword;
    }

    /**
     * @return the hostname
     */
    public String getHostname() {
        return hostname;
    }

    /**
     * @param hostname the hostname to set
     */
    public void setHostname(String hostname) {
        this.hostname = hostname;
    }

    /**
     * @return the domain
     */
    public String getDomain() {
        return domain;
    }

    /**
     * @param domain the domain to set
     */
    public void setDomain(String domain) {
        this.domain = domain;
    }

    /**
     * @return the users
     */
    public List<User> getUsers() {
        return users;
    }

    /**
     * @param users the users to set
     */
    public void setUsers(List<User> users) {
        this.users = users;
    }

    /**
     * @return the rootSshKey
     */
    public String getRootSshKey() {
        return rootSshKey;
    }

    /**
     * @param rootSshKey the rootSshKey to set
     */
    public void setRootSshKey(String rootSshKey) {
        this.rootSshKey = rootSshKey;
    }

    /**
     * @return the dnsServers
     */
    public List<String> getDnsServers() {
        return dnsServers;
    }

    /**
     * @param dnsServers the dnsServers to set
     */
    public void setDnsServers(List<String> dnsServers) {
        this.dnsServers = dnsServers;
    }

    /**
     * @return the ntpServers
     */
    public List<String> getNtpServers() {
        return ntpServers;
    }

    /**
     * @param ntpServers the ntpServers to set
     */
    public void setNtpServers(List<String> ntpServers) {
        this.ntpServers = ntpServers;
    }

    /**
     * @return the networkDevices
     */
    public List<NetworkDevice> getNetworkDevices() {
        return networkDevices;
    }

    /**
     * @param networkDevices the networkDevices to set
     */
    public void setNetworkDevices(List<NetworkDevice> networkDevices) {
        this.networkDevices = networkDevices;
    }

    /**
     * @return the kvm
     */
    public Boolean getKvm() {
        return kvm;
    }

    /**
     * @param kvm the kvm to set
     */
    public void setKvm(Boolean kvm) {
        this.kvm = kvm;
    }

    /**
     * @return the installDisk
     */
    public Object getInstallDisk() {
        return installDisk;
    }

    /**
     * @param installDisk the installDisk to set
     */
    public void setInstallDisk(Object installDisk) {
        this.installDisk = installDisk;
    }

    public String getClearDisk() {
        return clearDisk;
    }

    public void setClearDisk(String clearDisk) {
        this.clearDisk = clearDisk;
    }

    /**
     * @return the installPartitions
     */
    public List<InstallPartition> getInstallPartitions() {
        return installPartitions;
    }

    /**
     * @param installPartitions the installPartitions to set
     */
    public void setInstallPartitions(List<InstallPartition> installPartitions) {
        this.installPartitions = installPartitions;
    }

    /**
     * @return the switchDevices
     */
    public List<SwitchDevice> getSwitchDevices() {
        return switchDevices;
    }

    /**
     * @param switchDevices the switchDevices to set
     */
    public void setSwitchDevices(List<SwitchDevice> switchDevices) {
        this.switchDevices = switchDevices;
    }

    /**
     * @return the postInstallCommands
     */
    public List<String> getPostInstallCommands() {
        return postInstallCommands;
    }

    /**
     * @param postInstallCommands the postInstallCommands to set
     */
    public void setPostInstallCommands(List<String> postInstallCommands) {
        this.postInstallCommands = postInstallCommands;
    }

    /**
     * @return the firewallDisable
     */
    public Boolean getFirewallDisable() {
        return firewallDisable;
    }

    /**
     * @param firewallDisable the firewallDisable to set
     */
    public void setFirewallDisable(Boolean firewallDisable) {
        this.firewallDisable = firewallDisable;
    }

    /**
     * @return the productkey
     */
    public String getProductkey() {
        return productkey;
    }

    /**
     * @param productkey the productkey to set
     */
    public void setProductkey(String productkey) {
        this.productkey = productkey;
    }

    /**
     * @return the smbUser
     */
    public String getSmbUser() {
        return smbUser;
    }

    /**
     * @param smbUser the smbUser to set
     */
    public void setSmbUser(String smbUser) {
        this.smbUser = smbUser;
    }

    /**
     * @return the smbPassword
     */
    public String getSmbPassword() {
        return smbPassword;
    }

    /**
     * @param smbPassword the smbPassword to set
     */
    public void setSmbPassword(String smbPassword) {
        this.smbPassword = smbPassword;
    }

    /**
     * @return the smbRepo
     */
    public String getSmbRepo() {
        return smbRepo;
    }

    /**
     * @param smbRepo the smbRepo to set
     */
    public void setSmbRepo(String smbRepo) {
        this.smbRepo = smbRepo;
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the baseUrl
     */
    public String getBaseUrl() {
        return baseUrl;
    }

    /**
     * @param baseUrl the baseUrl to set
     */
    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    /**
     * @return the kargs
     */
    public Map<String, String> getKargs() {
        return kargs;
    }

    /**
     * @param kargs the kargs to set
     */
    public void setKargs(Map<String, String> kargs) {
        this.kargs = kargs;
    }

    /**
     * @return the timezone
     */
    public String getTimezone() {
        return timezone;
    }

    /**
     * @param timezone the timezone to set
     */
    public void setTimezone(String timezone) {
        this.timezone = timezone;
    }

    /**
     * @return the ntp
     */
    public String getNtp() {
        return ntp;
    }

    /**
     * @param ntp the ntp to set
     */
    public void setNtp(String ntp) {
        this.ntp = ntp;
    }

    public Boolean getMaintenanceMode() {
        return maintenanceMode;
    }

    public void setMaintenanceMode(Boolean maintenanceMode) {
        this.maintenanceMode = maintenanceMode;
    }
}
