def get_value(self, options: OptionGetter) -> ConfigFileOutput: if not isinstance(options, Builder): raise InvalidParamError('Options must be a "Builder" instance') ret = {} if self.option_get('enable.log_level'): ret.update({ 'log.console.level': options.option_get('config.loglevel'), }) if self.option_get('enable.cluster_formation'): ret.update({ 'cluster_formation.peer_discovery_backend': 'k8s', 'cluster_formation.k8s.host': 'kubernetes.default.svc.cluster.local', 'cluster_formation.k8s.address_type': 'hostname', 'cluster_formation.k8s.service_name': options.object_name('service-headless'), 'queue_master_locator': 'min-masters', }) load_definitions = options.option_get('config.load_definitions') if load_definitions is not None: ret.update({ 'load_definitions': '/etc/rabbitmq-load-definition/load_definition.json', }) if self.option_get('config.merge_config') is not None: Merger.merge(ret, self.option_get('config.merge_config')) return ConfigFileOutput_DictSingleLevel(ret)
def build(self, provider: Provider, resources: KResourceDatabase, name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: ret = super().build(provider, resources, name, config, merge_config) ret['spec']['csi']['driver'] = 'dobs.csi.digitalocean.com' if config is not None: if 'nodriver' in config and config['nodriver'] is True: del ret['spec']['csi']['driver'] if self.noformat is not None: if 'volumeAttributes' not in ret['spec']['csi']: ret['spec']['csi']['volumeAttributes'] = {} if 'com.digitalocean.csi/noformat' not in ret['spec']['csi'][ 'volumeAttributes']: ret['spec']['csi']['volumeAttributes'][ 'com.digitalocean.csi/noformat'] = QuotedStr( 'false' if self.noformat is False else 'true') if 'volumeHandle' in ret['spec']['csi'] and ret['spec']['csi'][ 'volumeHandle'] is not None: # https://github.com/digitalocean/csi-digitalocean/blob/master/examples/kubernetes/pod-single-existing-volume/README.md Merger.merge( ret, { 'metadata': { 'annotations': { 'pv.kubernetes.io/provisioned-by': 'dobs.csi.digitalocean.com', } } }) if 'storageClassName' not in ret['spec']: ret['spec']['storageClassName'] = 'do-block-storage' return ret
def build(self, provider: Provider, resources: 'KResourceDatabase', name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: pvdata: Dict[Any, Any] = { 'apiVersion': 'v1', 'kind': 'PersistentVolume', 'metadata': { 'name': name, }, 'spec': { 'csi': None, }, } if self.storageclass is not None: pvdata['spec']['storageClassName'] = self.storageclass if config is not None: if 'name' in config: pvdata['metadata']['name'] = config['name'] if 'csi' in config: pvdata['spec']['csi'] = config['csi'] ret = Merger.merge(pvdata, merge_config if merge_config is not None else {}) if ret['spec']['csi'] is None: raise InvalidParamError('"csi" config is required') return ret
def build(self, provider: Provider, resources: KResourceDatabase, name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: pvdata = { 'apiVersion': 'v1', 'kind': 'PersistentVolume', 'metadata': { 'name': name, }, 'spec': { 'awsElasticBlockStore': {}, }, } if self.storageclass is not None: pvdata['spec']['storageClassName'] = self.storageclass is_static = False if config is not None: if 'name' in config: pvdata['metadata']['name'] = config['name'] if 'csi' in config: if 'volumeHandle' in config['csi']: is_static = True pvdata['spec']['awsElasticBlockStore']['volumeID'] = config['csi']['volumeHandle'] if 'fsType' in config['csi']: pvdata['spec']['awsElasticBlockStore']['fsType'] = config['csi']['fsType'] if 'readOnly' in config['csi']: pvdata['spec']['awsElasticBlockStore']['readOnly'] = config['csi']['readOnly'] ret = Merger.merge(pvdata, merge_config if merge_config is not None else {}) if is_static: # Static storage must set class name as '' ret['spec']['storageClassName'] = '' return ret
def init_value(self, options: OptionGetter) -> ConfigFileExtensionData: ret = ConfigFileExtensionData({}) if self.option_get('scrape.prometheus.enabled'): Merger.merge( ret.data, { 'scrape_configs': [ Merger.merge( { 'job_name': QuotedStr( self.option_get( 'scrape.prometheus.job_name')), 'static_configs': [{ 'targets': [ 'localhost:9090', ] }], }, self.option_get('scrape.prometheus.merge_config')) ] }) return ret
def build(self, provider: Provider, resources: 'KResourceDatabase', name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: if config is not None: if 'name' in config: name = config['name'] ret = Merger.merge( { 'apiVersion': 'storage.k8s.io/v1', 'kind': 'StorageClass', 'metadata': { 'name': name, }, }, merge_config if merge_config is not None else {}) return ret
def build(self, provider: Provider, resources: 'KResourceDatabase', name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: pvdata: Dict[Any, Any] = { 'apiVersion': 'v1', 'kind': 'PersistentVolume', 'metadata': { 'name': name, }, 'spec': {}, } if self.storageclass is not None: pvdata['spec']['storageClassName'] = self.storageclass if config is not None: if 'name' in config: pvdata['metadata']['name'] = config['name'] return Merger.merge(pvdata, merge_config if merge_config is not None else {})
def finish_value(self, options: OptionGetter, data: ConfigFileExtensionData) -> ConfigFileOutput: if self.option_get('config.merge_config') is not None: Merger.merge(data.data, self.option_get('config.merge_config')) return ConfigFileOutput_Dict(data.data)
def build(self, provider: Provider, resources: 'KResourceDatabase', name: str, config: Optional[Any], merge_config: Optional[Any]) -> ObjectItem: pvcdata: Dict[Any, Any] = { 'apiVersion': 'v1', 'kind': 'PersistentVolumeClaim', 'metadata': { 'name': name, }, 'spec': {}, } if self.storageclass is not None: pvcdata['spec']['storageClassName'] = self.storageclass persistentVolume: Optional[ObjectItem] = None if config is not None: if 'name' in config: pvcdata['metadata']['name'] = config['name'] if 'namespace' in config: pvcdata['metadata']['namespace'] = config['namespace'] if 'persistentVolume' in config: persistentVolume = resources.persistentvolume_build( provider, config['persistentVolume'])[0] if persistentVolume is not None: if dict_has_name(persistentVolume, 'spec.storageClassName'): pv_storageclassname = dict_get_value(persistentVolume, 'spec.storageClassName') if pv_storageclassname is not None: pvcdata['spec']['storageClassName'] = pv_storageclassname if not dict_has_name(pvcdata, 'spec.accessModes') and dict_has_name( persistentVolume, 'spec.accessModes'): pvcdata['spec']['accessModes'] = persistentVolume['spec'][ 'accessModes'] if not dict_has_name( pvcdata, 'spec.resources.requests.storage') and dict_has_name( persistentVolume, 'spec.capacity.storage'): Merger.merge( pvcdata, { 'spec': { 'resources': { 'requests': { 'storage': dict_get_value(persistentVolume, 'spec.capacity.storage'), } } } }) ret = Merger.merge(pvcdata, merge_config if merge_config is not None else {}) if not self.allow_selector: if 'selector' in ret['spec']: if persistentVolume is None: raise InvalidParamError( 'PersistentVolumeClaim does not support selector but a PersistentVolume was not supplied' ) del ret['spec']['selector'] ret['spec']['storageClassName'] = '' ret['spec']['volumeName'] = persistentVolume['metadata'][ 'name'] return ret