github.com/jlmeeker/kismatic@v1.10.1-0.20180612190640-57f9005a1f1a/pkg/ansible/clustercatalog.go (about)

     1  package ansible
     2  
     3  import (
     4  	"fmt"
     5  
     6  	yaml "gopkg.in/yaml.v2"
     7  )
     8  
     9  type ClusterCatalog struct {
    10  	Versions struct {
    11  		Kubernetes    string `yaml:"kubernetes"`
    12  		KubernetesYum string `yaml:"kubernetes_yum"`
    13  		KubernetesDeb string `yaml:"kubernetes_deb"`
    14  	}
    15  
    16  	ClusterName               string `yaml:"kubernetes_cluster_name"`
    17  	AdminPassword             string `yaml:"kubernetes_admin_password"`
    18  	TLSDirectory              string `yaml:"tls_directory"`
    19  	ServicesCIDR              string `yaml:"kubernetes_services_cidr"`
    20  	PodCIDR                   string `yaml:"kubernetes_pods_cidr"`
    21  	DNSServiceIP              string `yaml:"kubernetes_dns_service_ip"`
    22  	EnableModifyHosts         bool   `yaml:"modify_hosts_file"`
    23  	EnablePackageInstallation bool   `yaml:"allow_package_installation"`
    24  	DisconnectedInstallation  bool   `yaml:"disconnected_installation"`
    25  	KuberangPath              string `yaml:"kuberang_path"`
    26  	LoadBalancedFQDN          string `yaml:"kubernetes_load_balanced_fqdn"`
    27  
    28  	APIServerOptions             map[string]string `yaml:"kubernetes_api_server_option_overrides"`
    29  	KubeControllerManagerOptions map[string]string `yaml:"kube_controller_manager_option_overrides"`
    30  	KubeSchedulerOptions         map[string]string `yaml:"kube_scheduler_option_overrides"`
    31  	KubeProxyOptions             map[string]string `yaml:"kube_proxy_option_overrides"`
    32  	KubeletOptions               map[string]string `yaml:"kubelet_overrides"`
    33  
    34  	AdditionalFiles []AdditionalFile `yaml:"additional_files"`
    35  
    36  	ConfigureDockerWithPrivateRegistry bool   `yaml:"configure_docker_with_private_registry"`
    37  	DockerRegistryCAPath               string `yaml:"docker_certificates_ca_path"`
    38  	DockerRegistryServer               string `yaml:"docker_registry_full_url"`
    39  	DockerRegistryUsername             string `yaml:"docker_registry_username"`
    40  	DockerRegistryPassword             string `yaml:"docker_registry_password"`
    41  
    42  	ForceEtcdRestart              bool `yaml:"force_etcd_restart"`
    43  	ForceAPIServerRestart         bool `yaml:"force_apiserver_restart"`
    44  	ForceControllerManagerRestart bool `yaml:"force_controller_manager_restart"`
    45  	ForceSchedulerRestart         bool `yaml:"force_scheduler_restart"`
    46  	ForceProxyRestart             bool `yaml:"force_proxy_restart"`
    47  	ForceKubeletRestart           bool `yaml:"force_kubelet_restart"`
    48  	ForceCalicoNodeRestart        bool `yaml:"force_calico_node_restart"`
    49  	ForceDockerRestart            bool `yaml:"force_docker_restart"`
    50  
    51  	EnableConfigureIngress bool `yaml:"configure_ingress"`
    52  
    53  	KismaticPreflightCheckerLinux string `yaml:"kismatic_preflight_checker"`
    54  
    55  	NewNode string `yaml:"new_node"`
    56  
    57  	NFSVolumes []NFSVolume `yaml:"nfs_volumes"`
    58  
    59  	EnableGluster bool `yaml:"configure_storage"`
    60  
    61  	// volume add vars
    62  	VolumeName              string   `yaml:"volume_name"`
    63  	VolumeReplicaCount      int      `yaml:"volume_replica_count"`
    64  	VolumeDistributionCount int      `yaml:"volume_distribution_count"`
    65  	VolumeStorageClass      string   `yaml:"volume_storage_class"`
    66  	VolumeQuotaGB           int      `yaml:"volume_quota_gb"`
    67  	VolumeQuotaBytes        int      `yaml:"volume_quota_bytes"`
    68  	VolumeMount             string   `yaml:"volume_mount"`
    69  	VolumeAllowedIPs        string   `yaml:"volume_allow_ips"`
    70  	VolumeReclaimPolicy     string   `yaml:"volume_reclaim_policy"`
    71  	VolumeAccessModes       []string `yaml:"volume_access_modes"`
    72  
    73  	TargetVersion string `yaml:"kismatic_short_version"`
    74  
    75  	OnlineUpgrade bool `yaml:"online_upgrade"`
    76  
    77  	DiagnosticsDirectory string `yaml:"diagnostics_dir"`
    78  	DiagnosticsDateTime  string `yaml:"diagnostics_date_time"`
    79  
    80  	Docker struct {
    81  		Enabled bool
    82  		Logs    struct {
    83  			Driver string            `yaml:"driver"`
    84  			Opts   map[string]string `yaml:"opts"`
    85  		}
    86  		Storage struct {
    87  			Driver               string               `yaml:"driver"`
    88  			Opts                 map[string]string    `yaml:"opts"`
    89  			OptsList             []string             `yaml:"opts_list"`
    90  			DirectLVMBlockDevice DirectLVMBlockDevice `yaml:"direct_lvm_block_device"`
    91  		}
    92  	}
    93  
    94  	LocalKubeconfigDirectory string `yaml:"local_kubeconfig_directory"`
    95  
    96  	CloudProvider string `yaml:"cloud_provider"`
    97  	CloudConfig   string `yaml:"cloud_config_local"`
    98  
    99  	DNS struct {
   100  		Enabled  bool
   101  		Provider string
   102  		Options  struct {
   103  			Replicas int
   104  		}
   105  	}
   106  
   107  	RunPodValidation bool `yaml:"run_pod_validation"`
   108  
   109  	CNI struct {
   110  		Enabled  bool
   111  		Provider string
   112  		Options  struct {
   113  			Portmap struct {
   114  				Enabled bool
   115  			}
   116  			Calico struct {
   117  				Mode                  string
   118  				LogLevel              string `yaml:"log_level"`
   119  				WorkloadMTU           int    `yaml:"workload_mtu"`
   120  				FelixInputMTU         int    `yaml:"felix_input_mtu"`
   121  				IPAutodetectionMethod string `yaml:"ip_autodetection_method"`
   122  			}
   123  			Weave struct {
   124  				Password string
   125  			}
   126  		}
   127  	}
   128  
   129  	Heapster struct {
   130  		Enabled bool
   131  		Options struct {
   132  			Heapster struct {
   133  				Replicas    int    `yaml:"replicas"`
   134  				Sink        string `yaml:"sink"`
   135  				ServiceType string `yaml:"service_type"`
   136  			}
   137  			InfluxDB struct {
   138  				PVCName string `yaml:"pvc_name"`
   139  			}
   140  		}
   141  	}
   142  
   143  	MetricsServer struct {
   144  		Enabled bool
   145  	}
   146  
   147  	Dashboard struct {
   148  		Enabled bool
   149  		Options struct {
   150  			ServiceType string `yaml:"service_type"`
   151  			NodePort    string `yaml:"node_port"`
   152  		}
   153  	}
   154  
   155  	Helm struct {
   156  		Enabled   bool
   157  		Namespace string
   158  	}
   159  
   160  	Rescheduler struct {
   161  		Enabled bool
   162  	}
   163  
   164  	InsecureNetworkingEtcd bool `yaml:"insecure_networking_etcd"`
   165  
   166  	HTTPProxy  string `yaml:"http_proxy"`
   167  	HTTPSProxy string `yaml:"https_proxy"`
   168  	NoProxy    string `yaml:"no_proxy"`
   169  
   170  	NodeLabels         map[string][]string          `yaml:"node_labels"`
   171  	NodeTaints         map[string][]string          `yaml:"node_taints"`
   172  	KubeletNodeOptions map[string]map[string]string `yaml:"kubelet_node_overrides"`
   173  }
   174  
   175  type DirectLVMBlockDevice struct {
   176  	Path                        string
   177  	ThinpoolPercent             string `yaml:"thinpool_percent"`
   178  	ThinpoolMetaPercent         string `yaml:"thinpool_metapercent"`
   179  	ThinpoolAutoextendThreshold string `yaml:"thinpool_autoextend_threshold"`
   180  	ThinpoolAutoextendPercent   string `yaml:"thinpool_autoextend_percent"`
   181  }
   182  type NFSVolume struct {
   183  	Host string
   184  	Path string
   185  }
   186  
   187  type AdditionalFile struct {
   188  	Source      string
   189  	Destination string
   190  	Hosts       []string
   191  }
   192  
   193  func (c *ClusterCatalog) EnableRestart() {
   194  	c.ForceEtcdRestart = true
   195  	c.ForceAPIServerRestart = true
   196  	c.ForceControllerManagerRestart = true
   197  	c.ForceSchedulerRestart = true
   198  	c.ForceProxyRestart = true
   199  	c.ForceKubeletRestart = true
   200  	c.ForceCalicoNodeRestart = true
   201  	c.ForceDockerRestart = true
   202  }
   203  
   204  func (c *ClusterCatalog) ToYAML() ([]byte, error) {
   205  	bytez, marshalErr := yaml.Marshal(c)
   206  	if marshalErr != nil {
   207  		return []byte{}, fmt.Errorf("error marshalling plan to yaml: %v", marshalErr)
   208  	}
   209  
   210  	return bytez, nil
   211  }