1+ //! Build the discovery `ConfigMap` for the HdfsCluster.
2+
13use snafu:: { ResultExt , Snafu } ;
24use stackable_operator:: {
35 builder:: { configmap:: ConfigMapBuilder , meta:: ObjectMetaBuilder } ,
4- commons:: product_image_selection:: ResolvedProductImage ,
56 k8s_openapi:: api:: core:: v1:: ConfigMap ,
6- kube:: { ResourceExt , runtime:: reflector:: ObjectRef } ,
7+ kube:: runtime:: reflector:: ObjectRef ,
78 utils:: cluster_info:: KubernetesClusterInfo ,
89} ;
910
@@ -12,6 +13,7 @@ use crate::{
1213 config:: { CoreSiteConfigBuilder , HdfsSiteConfigBuilder } ,
1314 controller:: build:: properties:: ConfigFileName ,
1415 crd:: { HdfsNodeRole , HdfsPodRef , v1alpha1} ,
16+ hdfs_controller:: { HDFS_CONTROLLER_NAME , ValidatedCluster } ,
1517 security:: kerberos:: { self , KerberosConfig } ,
1618} ;
1719
@@ -42,23 +44,26 @@ pub enum Error {
4244
4345/// Creates a discovery config map containing the `hdfs-site.xml` and `core-site.xml`
4446/// for clients.
45- pub fn build_discovery_configmap (
46- hdfs : & v1alpha1:: HdfsCluster ,
47+ ///
48+ /// The rendered content comes entirely from `cluster` (with the externally-resolved
49+ /// `cluster_info` and `namenode_podrefs`); `owner_ref` is retained only for the ConfigMap
50+ /// ObjectMeta / owner reference.
51+ pub fn build_discovery_config_map (
52+ cluster : & ValidatedCluster ,
4753 cluster_info : & KubernetesClusterInfo ,
48- controller : & str ,
4954 namenode_podrefs : & [ HdfsPodRef ] ,
50- resolved_product_image : & ResolvedProductImage ,
55+ owner_ref : & v1alpha1 :: HdfsCluster ,
5156) -> Result < ConfigMap > {
5257 let metadata = ObjectMetaBuilder :: new ( )
53- . name_and_namespace ( hdfs )
54- . ownerreference_from_resource ( hdfs , None , Some ( true ) )
58+ . name_and_namespace ( owner_ref )
59+ . ownerreference_from_resource ( owner_ref , None , Some ( true ) )
5560 . context ( ObjectMissingMetadataForOwnerRefSnafu {
56- hdfs : ObjectRef :: from_obj ( hdfs ) ,
61+ hdfs : ObjectRef :: from_obj ( owner_ref ) ,
5762 } ) ?
5863 . with_recommended_labels ( & build_recommended_labels (
59- hdfs ,
60- controller ,
61- & resolved_product_image . app_version_label_value ,
64+ owner_ref ,
65+ HDFS_CONTROLLER_NAME ,
66+ & cluster . image . app_version_label_value ,
6267 & HdfsNodeRole :: Name . to_string ( ) ,
6368 "discovery" ,
6469 ) )
@@ -69,47 +74,48 @@ pub fn build_discovery_configmap(
6974 . metadata ( metadata)
7075 . add_data (
7176 ConfigFileName :: HdfsSite . to_string ( ) ,
72- build_discovery_hdfs_site_xml ( hdfs , cluster_info, hdfs . name_any ( ) , namenode_podrefs) ,
77+ build_discovery_hdfs_site_xml ( cluster , cluster_info, namenode_podrefs) ,
7378 )
7479 . add_data (
7580 ConfigFileName :: CoreSite . to_string ( ) ,
76- build_discovery_core_site_xml ( hdfs , cluster_info, hdfs . name_any ( ) ) ?,
81+ build_discovery_core_site_xml ( cluster , cluster_info) ?,
7782 )
7883 . build ( )
7984 . context ( BuildConfigMapSnafu )
8085}
8186
8287fn build_discovery_hdfs_site_xml (
83- hdfs : & v1alpha1 :: HdfsCluster ,
88+ cluster : & ValidatedCluster ,
8489 cluster_info : & KubernetesClusterInfo ,
85- logical_name : String ,
8690 namenode_podrefs : & [ HdfsPodRef ] ,
8791) -> String {
88- HdfsSiteConfigBuilder :: new ( logical_name )
92+ HdfsSiteConfigBuilder :: new ( cluster . name . as_ref ( ) . to_owned ( ) )
8993 . dfs_name_services ( )
9094 . dfs_ha_namenodes ( namenode_podrefs)
9195 . dfs_namenode_rpc_address_ha ( cluster_info, namenode_podrefs)
92- . dfs_namenode_http_address_ha ( hdfs. has_https_enabled ( ) , cluster_info, namenode_podrefs)
96+ . dfs_namenode_http_address_ha (
97+ cluster. cluster_config . https_enabled ,
98+ cluster_info,
99+ namenode_podrefs,
100+ )
93101 . dfs_client_failover_proxy_provider ( )
94- . security_discovery_config ( hdfs . has_kerberos_enabled ( ) )
102+ . security_discovery_config ( cluster . cluster_config . kerberos_enabled )
95103 . build_as_xml ( )
96104}
97105
98106fn build_discovery_core_site_xml (
99- hdfs : & v1alpha1 :: HdfsCluster ,
107+ cluster : & ValidatedCluster ,
100108 cluster_info : & KubernetesClusterInfo ,
101- logical_name : String ,
102109) -> Result < String > {
103- let cluster_name = hdfs. name_any ( ) ;
104- let cluster_namespace = hdfs. namespace ( ) ;
110+ let cluster_config = & cluster. cluster_config ;
105111 let kerberos = KerberosConfig {
106- cluster_name : & cluster_name ,
107- cluster_namespace : cluster_namespace . as_deref ( ) ,
108- authentication_enabled : hdfs . authentication_config ( ) . is_some ( ) ,
109- kerberos_enabled : hdfs . has_kerberos_enabled ( ) ,
110- authorization_enabled : hdfs . has_authorization_enabled ( ) ,
112+ cluster_name : cluster . name . as_ref ( ) ,
113+ cluster_namespace : cluster . namespace . as_deref ( ) ,
114+ authentication_enabled : cluster_config . authentication_enabled ,
115+ kerberos_enabled : cluster_config . kerberos_enabled ,
116+ authorization_enabled : cluster_config . authorization_enabled ,
111117 } ;
112- Ok ( CoreSiteConfigBuilder :: new ( logical_name )
118+ Ok ( CoreSiteConfigBuilder :: new ( cluster . name . as_ref ( ) . to_owned ( ) )
113119 . fs_default_fs ( )
114120 . security_discovery_config ( & kerberos, cluster_info)
115121 . context ( BuildSecurityDiscoveryConfigMapSnafu ) ?
0 commit comments