5
5
import com .github .containersolutions .operator .api .ResourceController ;
6
6
import io .fabric8 .kubernetes .api .model .*;
7
7
import io .fabric8 .kubernetes .api .model .apps .Deployment ;
8
- import io .fabric8 .kubernetes .client .KubernetesClientException ;
9
- import io .fabric8 .kubernetes .client .Watcher ;
10
- import io .fabric8 .kubernetes .client .dsl .Resource ;
11
8
import io .fabric8 .kubernetes .client .utils .Serialization ;
12
9
import org .apache .commons .lang3 .StringUtils ;
13
10
import org .slf4j .Logger ;
14
11
import org .slf4j .LoggerFactory ;
15
12
16
13
import java .io .IOException ;
17
14
import java .io .InputStream ;
18
- import java .util .Arrays ;
19
15
import java .util .HashMap ;
20
16
import java .util .Map ;
21
17
import java .util .Optional ;
22
18
23
- @ Controller (customResourceClass = NginxWww .class ,
24
- kind = NginxWwwController .KIND ,
25
- group = NginxWwwController .GROUP ,
26
- customResourceListClass = NginxWwwList .class ,
27
- customResourceDonebaleClass = NginxWwwDoneable .class )
28
- public class NginxWwwController implements ResourceController <NginxWww > {
19
+ @ Controller (customResourceClass = WebServer .class ,
20
+ kind = WebServerController .KIND ,
21
+ group = WebServerController .GROUP ,
22
+ customResourceListClass = WebServerList .class ,
23
+ customResourceDonebaleClass = WebServerDoneable .class )
24
+ public class WebServerController implements ResourceController <WebServer > {
29
25
30
- static final String KIND = "NginxWww " ;
26
+ static final String KIND = "WebServer " ;
31
27
static final String GROUP = "sample.javaoperatorsdk" ;
32
28
33
29
private final Logger log = LoggerFactory .getLogger (getClass ());
34
30
35
31
@ Override
36
- public Optional <NginxWww > createOrUpdateResource (NginxWww nginx , Context <NginxWww > context ) {
37
- log .info ("Execution createOrUpdateResource for: {}" , nginx .getMetadata ().getName ());
32
+ public Optional <WebServer > createOrUpdateResource (WebServer webServer , Context <WebServer > context ) {
33
+ log .info ("Execution createOrUpdateResource for: {}" , webServer .getMetadata ().getName ());
38
34
39
- String ns = nginx .getMetadata ().getNamespace ();
35
+ String ns = webServer .getMetadata ().getNamespace ();
40
36
41
37
Map <String , String > data = new HashMap <>();
42
- data .put ("index.html" , nginx .getSpec ().getHtml ());
38
+ data .put ("index.html" , webServer .getSpec ().getHtml ());
43
39
44
40
ConfigMap htmlConfigMap = new ConfigMapBuilder ()
45
41
.withMetadata (new ObjectMetaBuilder ()
46
- .withName (configMapName (nginx ))
42
+ .withName (configMapName (webServer ))
47
43
.withNamespace (ns )
48
44
.build ())
49
45
.withData (data )
50
46
.build ();
51
47
52
- Deployment deployment = loadYaml (Deployment .class , "nginx- deployment.yaml" );
53
- deployment .getMetadata ().setName (deploymentName (nginx ));
48
+ Deployment deployment = loadYaml (Deployment .class , "deployment.yaml" );
49
+ deployment .getMetadata ().setName (deploymentName (webServer ));
54
50
deployment .getMetadata ().setNamespace (ns );
55
- deployment .getSpec ().getSelector ().getMatchLabels ().put ("app" , deploymentName (nginx ));
56
- deployment .getSpec ().getTemplate ().getMetadata ().getLabels ().put ("app" , deploymentName (nginx ));
51
+ deployment .getSpec ().getSelector ().getMatchLabels ().put ("app" , deploymentName (webServer ));
52
+ deployment .getSpec ().getTemplate ().getMetadata ().getLabels ().put ("app" , deploymentName (webServer ));
57
53
deployment .getSpec ().getTemplate ().getSpec ().getVolumes ().get (0 ).setConfigMap (
58
- new ConfigMapVolumeSourceBuilder ().withName (configMapName (nginx )).build ());
54
+ new ConfigMapVolumeSourceBuilder ().withName (configMapName (webServer )).build ());
59
55
60
- Service service = loadYaml (Service .class , "nginx- service.yaml" );
61
- service .getMetadata ().setName (serviceName (nginx ));
56
+ Service service = loadYaml (Service .class , "service.yaml" );
57
+ service .getMetadata ().setName (serviceName (webServer ));
62
58
service .getMetadata ().setNamespace (ns );
63
59
service .getSpec ().setSelector (deployment .getSpec ().getTemplate ().getMetadata ().getLabels ());
64
60
@@ -70,26 +66,29 @@ public Optional<NginxWww> createOrUpdateResource(NginxWww nginx, Context<NginxWw
70
66
context .getK8sClient ().configMaps ().inNamespace (ns ).createOrReplace (htmlConfigMap );
71
67
log .info ("Creating or updating Deployment {}" , deployment .getMetadata ().getName ());
72
68
context .getK8sClient ().apps ().deployments ().inNamespace (ns ).createOrReplace (deployment );
73
- log .info ("Creating or updating Service {}" , service .getMetadata ().getName ());
74
- context .getK8sClient ().services ().inNamespace (ns ).createOrReplace (service );
69
+
70
+ if (context .getK8sClient ().services ().inNamespace (ns ).withName (service .getMetadata ().getName ()).get () == null ) {
71
+ log .info ("Creating Service {}" , service .getMetadata ().getName ());
72
+ context .getK8sClient ().services ().inNamespace (ns ).createOrReplace (service );
73
+ }
75
74
76
75
if (existingConfigMap != null ) {
77
76
if (!StringUtils .equals (existingConfigMap .getData ().get ("index.html" ), htmlConfigMap .getData ().get ("index.html" ))) {
78
77
log .info ("Restarting pods because HTML has changed" );
79
- context .getK8sClient ().pods ().inNamespace (ns ).withLabel ("app" , deploymentName (nginx )).delete ();
78
+ context .getK8sClient ().pods ().inNamespace (ns ).withLabel ("app" , deploymentName (webServer )).delete ();
80
79
}
81
80
}
82
81
83
- var status = new NginxWwwStatus ();
82
+ var status = new WebServerStatus ();
84
83
status .setHtmlConfigMap (htmlConfigMap .getMetadata ().getName ());
85
84
status .setAreWeGood ("Yes!" );
86
- nginx .setStatus (status );
85
+ webServer .setStatus (status );
87
86
88
- return Optional .of (nginx );
87
+ return Optional .of (webServer );
89
88
}
90
89
91
90
@ Override
92
- public boolean deleteResource (NginxWww nginx , Context <NginxWww > context ) {
91
+ public boolean deleteResource (WebServer nginx , Context <WebServer > context ) {
93
92
log .info ("Execution deleteResource for: {}" , nginx .getMetadata ().getName ());
94
93
95
94
log .info ("Deleting ConfigMap {}" , configMapName (nginx ));
@@ -118,15 +117,15 @@ public boolean deleteResource(NginxWww nginx, Context<NginxWww> context) {
118
117
return true ;
119
118
}
120
119
121
- private static String configMapName (NginxWww nginx ) {
120
+ private static String configMapName (WebServer nginx ) {
122
121
return nginx .getMetadata ().getName () + "-html" ;
123
122
}
124
123
125
- private static String deploymentName (NginxWww nginx ) {
124
+ private static String deploymentName (WebServer nginx ) {
126
125
return nginx .getMetadata ().getName ();
127
126
}
128
127
129
- private static String serviceName (NginxWww nginx ) {
128
+ private static String serviceName (WebServer nginx ) {
130
129
return nginx .getMetadata ().getName ();
131
130
}
132
131
0 commit comments