77import com .enonic .kubernetes .kubernetes .Searchers ;
88import com .enonic .kubernetes .kubernetes .commands .K8sLogHelper ;
99import com .enonic .kubernetes .operator .helpers .InformerEventHandler ;
10+
1011import io .fabric8 .kubernetes .api .model .networking .v1 .HTTPIngressPath ;
1112import io .fabric8 .kubernetes .api .model .networking .v1 .Ingress ;
1213import io .fabric8 .kubernetes .api .model .networking .v1 .IngressRule ;
1314import io .quarkus .runtime .StartupEvent ;
15+
1416import org .slf4j .Logger ;
1517import org .slf4j .LoggerFactory ;
1618
1719import javax .enterprise .context .ApplicationScoped ;
1820import javax .enterprise .event .Observes ;
1921import javax .inject .Inject ;
22+
2023import java .util .HashMap ;
2124import java .util .Map ;
2225import java .util .stream .Collectors ;
2326
27+ import static com .enonic .kubernetes .operator .xp7deployment .Predicates .running ;
2428import static com .enonic .kubernetes .common .Configuration .cfgStr ;
2529import static com .enonic .kubernetes .kubernetes .Predicates .inSameNamespaceAs ;
2630import static com .enonic .kubernetes .kubernetes .Predicates .isDeleted ;
@@ -63,9 +67,9 @@ public void onUpdate( final Xp7Config oldR, final Xp7Config newR )
6367 {
6468 // Only handle if this is a vhost config and it is loaded
6569 onCondition ( newR , c -> {
66- log .debug ("onUpdate Xp7Config: {} in {}" , newR .getMetadata ().getNamespace (), newR .getMetadata ().getName ());
67- this .handle (c );
68- }, this ::isVHostConfig , ( c ) -> c .getStatus ().getState () == Xp7ConfigStatus .State .READY );
70+ log .debug ( "onUpdate Xp7Config: {} in {}" , newR .getMetadata ().getNamespace (), newR .getMetadata ().getName () );
71+ this .handle ( c );
72+ }, this ::isVHostConfig , ( c ) -> c .getStatus ().getState () == Xp7ConfigStatus .State .READY , this :: isDeploymentRunning );
6973 }
7074
7175 @ Override
@@ -79,58 +83,72 @@ public void run()
7983 {
8084 log .debug ( "Resync Ingress status" );
8185
82- searchers .ingress ().stream ().
83- filter ( isDeleted ().negate () ).
84- filter ( matchLabel ( cfgStr ( "operator.charts.values.labelKeys.ingressVhostLoaded" ), "false" ) ).
85- forEach ( this ::setStatus );
86+ searchers .ingress ()
87+ .stream ()
88+ .filter ( isDeleted ().negate () )
89+ .filter ( matchLabel ( cfgStr ( "operator.charts.values.labelKeys.ingressVhostLoaded" ), "false" ) )
90+ .forEach ( this ::setStatus );
8691 }
8792
8893 private void handle ( final Xp7Config xp7Config )
8994 {
90- searchers .ingress ().stream ().
91- filter ( inSameNamespaceAs ( xp7Config ) ).
92- filter ( isDeleted ().negate () ).
93- filter ( matchLabel ( cfgStr ( "operator.charts.values.labelKeys.ingressVhostLoaded" ), "false" ) ).
94- forEach ( this ::setStatus );
95+ searchers .ingress ()
96+ .stream ()
97+ .filter ( inSameNamespaceAs ( xp7Config ) )
98+ .filter ( isDeleted ().negate () )
99+ .filter ( matchLabel ( cfgStr ( "operator.charts.values.labelKeys.ingressVhostLoaded" ), "false" ) )
100+ .forEach ( this ::setStatus );
95101 }
96102
97103 private void setStatus ( final Ingress ingress )
98104 {
99105 // Collect all nodegroup vhost states
100- Map <String , Xp7ConfigStatus .State > states = searchers .xp7Config ().stream ().
101- filter ( inSameNamespaceAs ( ingress ) ).
102- filter ( isDeleted ().negate () ).
103- filter ( this ::isVHostConfig ).
104- collect ( Collectors .toMap ( c -> c .getSpec ().getNodeGroup (), c -> c .getStatus ().getState () ) );
106+ Map <String , Xp7ConfigStatus .State > states = searchers .xp7Config ()
107+ .stream ()
108+ .filter ( inSameNamespaceAs ( ingress ) )
109+ .filter ( isDeleted ().negate () )
110+ .filter ( this ::isVHostConfig )
111+ .collect ( Collectors .toMap ( c -> c .getSpec ().getNodeGroup (), c -> c .getStatus ().getState () ) );
105112
106113 // Set all nodeGroups state
107- if (states .values ().stream ().anyMatch ( s -> !s .equals ( Xp7ConfigStatus .State .READY ) )) {
114+ if ( states .values ().stream ().anyMatch ( s -> !s .equals ( Xp7ConfigStatus .State .READY ) ) )
115+ {
108116 states .put ( cfgStr ( "operator.charts.values.allNodesKey" ), Xp7ConfigStatus .State .PENDING );
109- } else {
117+ }
118+ else
119+ {
110120 states .put ( cfgStr ( "operator.charts.values.allNodesKey" ), Xp7ConfigStatus .State .READY );
111121 }
112122
113123 // Figure out state
114124 boolean loaded = true ;
115- for (IngressRule r : ingress .getSpec ().getRules ()) {
116- for (HTTPIngressPath p : r .getHttp ().getPaths ()) {
125+ for ( IngressRule r : ingress .getSpec ().getRules () )
126+ {
127+ for ( HTTPIngressPath p : r .getHttp ().getPaths () )
128+ {
117129 Xp7ConfigStatus .State pathState = states .get ( p .getBackend ().getService ().getName () );
118- if (pathState != null && !pathState .equals ( Xp7ConfigStatus .State .READY )) {
130+ if ( pathState != null && !pathState .equals ( Xp7ConfigStatus .State .READY ) )
131+ {
119132 loaded = false ;
120133 break ;
121134 }
122135 }
123136 }
124137
125138 // Update if true
126- if (loaded ) {
127- log .debug ("Label Ingress as vhost loaded: {} in {}" , ingress .getMetadata ().getName (), ingress .getMetadata ().getNamespace ());
128-
129- K8sLogHelper .logEdit ( clients .k8s ().network ().v1 ().ingresses ().
130- inNamespace ( ingress .getMetadata ().getNamespace () ).
131- withName ( ingress .getMetadata ().getName () ), i -> {
139+ if ( loaded )
140+ {
141+ log .debug ( "Label Ingress as vhost loaded: {} in {}" , ingress .getMetadata ().getName (), ingress .getMetadata ().getNamespace () );
142+
143+ K8sLogHelper .logEdit ( clients .k8s ()
144+ .network ()
145+ .v1 ()
146+ .ingresses ()
147+ .inNamespace ( ingress .getMetadata ().getNamespace () )
148+ .withName ( ingress .getMetadata ().getName () ), i -> {
132149 Map <String , String > labels = i .getMetadata ().getLabels ();
133- if (labels == null ) {
150+ if ( labels == null )
151+ {
134152 labels = new HashMap <>();
135153 }
136154 labels .put ( cfgStr ( "operator.charts.values.labelKeys.ingressVhostLoaded" ), "true" );
@@ -144,4 +162,12 @@ private boolean isVHostConfig( final Xp7Config c )
144162 {
145163 return c .getSpec ().getFile ().equals ( cfgStr ( "operator.charts.values.files.vhosts" ) );
146164 }
165+
166+ boolean isDeploymentRunning ( Xp7Config config )
167+ {
168+ return searchers .xp7Deployment ()
169+ .find ( deployment -> deployment .getMetadata ().getNamespace ().equals ( config .getMetadata ().getNamespace () ) )
170+ .map ( deployment -> running ().test ( deployment ) )
171+ .orElse ( false );
172+ }
147173}
0 commit comments