@@ -614,6 +614,13 @@ async def reconcile_instance(self):
614
614
manifest ["metadata" ]["namespace" ],
615
615
manifest ,
616
616
_preload_content = False )
617
+ status = await resp .json ()
618
+ if status ["kind" ] == "Status" and status ["status" ] == "Failure" :
619
+ print (" Failed to create %s %s/%s" ,
620
+ manifest ["kind" ],
621
+ manifest ["metadata" ]["namespace" ],
622
+ manifest ["metadata" ]["name" ],
623
+ "because:" , status ["message" ])
617
624
else :
618
625
print (" Patching %s %s/%s" % (manifest ["kind" ], manifest ["metadata" ]["namespace" ], manifest ["metadata" ]["name" ]))
619
626
resp = await getattr (k8s_api , "patch_namespaced_{0}" .format (kind ))(
@@ -1577,6 +1584,62 @@ def generate_manifests(self):
1577
1584
}] if self .class_spec .get ("podSpec" ) else [])
1578
1585
1579
1586
1587
+ class IngressMixin ():
1588
+ """
1589
+ Mixin for handling Ingress resource
1590
+ """
1591
+ @classmethod
1592
+ def generate_operator_cluster_role_rules (cls ):
1593
+ yield from super ().generate_operator_cluster_role_rules ()
1594
+ yield "networking.k8s.io" , "ingresses" , ("get" , "create" , "patch" )
1595
+
1596
+ def get_ingress_host (self ):
1597
+ return self .class_spec .get ("ingressSpec" ).get ("host" ) % (self .get_target_name ())
1598
+
1599
+ def generate_ingress (self ):
1600
+ """
1601
+ Generate Kubernetes Ingress specification
1602
+ """
1603
+ return {
1604
+ "rules" : [
1605
+ {
1606
+ "host" : self .get_ingress_host (),
1607
+ "http" : {
1608
+ "paths" : [
1609
+ {
1610
+ "pathType" : "Prefix" ,
1611
+ "path" : "/" ,
1612
+ "backend" : {
1613
+ "service" : {
1614
+ "name" : self .get_service_name (),
1615
+ "port" : {
1616
+ "name" : "http"
1617
+ }
1618
+ }
1619
+ }
1620
+ }
1621
+ ]
1622
+ }
1623
+ }
1624
+ ],
1625
+ "tls" : self .class_spec .get ("ingressSpec" ).get ("tls" ) if self .class_spec .get ("ingressSpec" ).get ("tls" ) else []
1626
+ }
1627
+
1628
+ def generate_manifests (self ):
1629
+ return super ().generate_manifests () + ([{
1630
+ "kind" : "Ingress" ,
1631
+ "apiVersion" : "networking.k8s.io/v1" ,
1632
+ "metadata" : {
1633
+ "namespace" : self .get_target_namespace (),
1634
+ "name" : self .get_service_name (),
1635
+ "labels" : self .labels ,
1636
+ "annotations" : self .class_spec .get ("ingressSpec" ).get ("annotations" ) if self .class_spec .get ("ingressSpec" ).get ("annotations" ) else {},
1637
+ "ownerReferences" : [self .get_instance_owner ()],
1638
+ },
1639
+ "spec" : self .generate_ingress (),
1640
+ }] if self .class_spec .get ("ingressSpec" ) else [])
1641
+
1642
+
1580
1643
class PrimarySecondaryMixin ():
1581
1644
"""
1582
1645
Mixin for handling primary-secondary applications
0 commit comments