1+ package com .mycompany .app ;
2+
3+ import software .constructs .Construct ;
4+
5+ import java .util .ArrayList ;
6+ import java .util .List ;
7+ import java .util .HashMap ;
8+ import java .util .Map ;
9+ import java .util .Optional ;
10+
11+ import org .cdk8s .App ;
12+ import org .cdk8s .Chart ;
13+ import org .cdk8s .ChartOptions ;
14+
15+ import imports .k8s .IntOrString ;
16+ import imports .k8s .LabelSelector ;
17+ import imports .k8s .ObjectMeta ;
18+ import imports .k8s .PodTemplateSpec ;
19+ import imports .k8s .Service ;
20+ import imports .k8s .ServiceOptions ;
21+ import imports .k8s .ServicePort ;
22+ import imports .k8s .ServiceSpec ;
23+ import imports .k8s .DeploymentSpec ;
24+ import imports .k8s .PodSpec ;
25+ import imports .k8s .Container ;
26+ import imports .k8s .ContainerPort ;
27+ import imports .k8s .Deployment ;
28+ import imports .k8s .DeploymentOptions ;
29+
30+ /**
31+ * Hello world!
32+ */
33+ public class WebService extends Construct
34+ {
35+
36+ public WebService (final Construct scope , final String id ) {
37+ this (scope , id , null );
38+ }
39+
40+ public WebService (final Construct scope , final String id , final WebServiceOptions options ) {
41+ super (scope , id );
42+
43+ final int portNumber = Optional .of (options .getPort ()).orElse (80 );
44+ final int containerPortNumber = Optional .of (options .getContainerPort ()).orElse (8080 );
45+ final int replicas = Optional .of (options .getReplicas ()).orElse (1 );
46+ final String image = options .getImage ();
47+
48+ // Defining a LoadBalancer Service
49+ final String serviceType = "LoadBalancer" ;
50+ final Map <String , String > selector = new HashMap <>();
51+ selector .put ("app" , "hello-k8s" );
52+ final List <ServicePort > servicePorts = new ArrayList <>();
53+ final ServicePort servicePort = new ServicePort .Builder ()
54+ .port (portNumber )
55+ .targetPort (IntOrString .fromNumber (containerPortNumber ))
56+ .build ();
57+ servicePorts .add (servicePort );
58+ final ServiceSpec serviceSpec = new ServiceSpec .Builder ()
59+ .type (serviceType )
60+ .selector (selector )
61+ .ports (servicePorts )
62+ .build ();
63+ final ServiceOptions serviceOptions = new ServiceOptions .Builder ()
64+ .spec (serviceSpec )
65+ .build ();
66+
67+ new Service (this , "service" , serviceOptions );
68+
69+ // Defining a Deployment
70+ final LabelSelector labelSelector = new LabelSelector .Builder ().matchLabels (selector ).build ();
71+ final ObjectMeta objectMeta = new ObjectMeta .Builder ().labels (selector ).build ();
72+ final List <ContainerPort > containerPorts = new ArrayList <>();
73+ final ContainerPort containerPort = new ContainerPort .Builder ()
74+ .containerPort (containerPortNumber )
75+ .build ();
76+ containerPorts .add (containerPort );
77+ final List <Container > containers = new ArrayList <>();
78+ final Container container = new Container .Builder ()
79+ .name ("web" )
80+ .image (image )
81+ .ports (containerPorts )
82+ .build ();
83+ containers .add (container );
84+ final PodSpec podSpec = new PodSpec .Builder ()
85+ .containers (containers )
86+ .build ();
87+ final PodTemplateSpec podTemplateSpec = new PodTemplateSpec .Builder ()
88+ .metadata (objectMeta )
89+ .spec (podSpec )
90+ .build ();
91+ final DeploymentSpec deploymentSpec = new DeploymentSpec .Builder ()
92+ .replicas (1 )
93+ .selector (labelSelector )
94+ .template (podTemplateSpec )
95+ .build ();
96+ final DeploymentOptions deploymentOptions = new DeploymentOptions .Builder ()
97+ .spec (deploymentSpec )
98+ .build ();
99+
100+ new Deployment (this , "deployment" , deploymentOptions );
101+
102+ }
103+ }
0 commit comments