6
6
using KubeOps . Operator . Controller ;
7
7
using KubeOps . Operator . DevOps ;
8
8
using KubeOps . Operator . Finalizer ;
9
+ using KubeOps . Operator . Leader ;
9
10
using KubeOps . Operator . Queue ;
10
11
using KubeOps . Operator . Serialization ;
11
12
using KubeOps . Operator . Services ;
12
13
using KubeOps . Operator . Watcher ;
13
14
using Microsoft . Extensions . DependencyInjection ;
14
15
using Microsoft . Extensions . Diagnostics . HealthChecks ;
16
+ using Microsoft . Rest . Serialization ;
15
17
using Newtonsoft . Json ;
16
18
using Newtonsoft . Json . Converters ;
17
19
using Newtonsoft . Json . Serialization ;
@@ -91,23 +93,22 @@ internal IOperatorBuilder AddOperatorBase(OperatorSettings settings)
91
93
// support lazy service resolution
92
94
Services . AddTransient ( typeof ( Lazy < > ) , typeof ( LazyService < > ) ) ;
93
95
94
- Services . AddTransient (
95
- _ => new JsonSerializerSettings
96
- {
97
- ContractResolver = new NamingConvention ( ) ,
98
- Converters = new List < JsonConverter >
99
- {
100
- new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } ,
101
- } ,
102
- } ) ;
103
- JsonConvert . DefaultSettings = ( ) => new JsonSerializerSettings
96
+ var jsonSettings = new JsonSerializerSettings
104
97
{
98
+ DateFormatHandling = DateFormatHandling . IsoDateFormat ,
99
+ DateTimeZoneHandling = DateTimeZoneHandling . Utc ,
100
+ NullValueHandling = NullValueHandling . Ignore ,
101
+ ReferenceLoopHandling = ReferenceLoopHandling . Serialize ,
105
102
ContractResolver = new NamingConvention ( ) ,
106
103
Converters = new List < JsonConverter >
107
104
{
108
105
new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } ,
106
+ new Iso8601TimeSpanConverter ( ) ,
109
107
} ,
108
+ DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.ffffffK" ,
110
109
} ;
110
+ Services . AddTransient ( _ => jsonSettings ) ;
111
+ JsonConvert . DefaultSettings = ( ) => jsonSettings ;
111
112
112
113
Services . AddTransient (
113
114
_ => new SerializerBuilder ( )
@@ -126,15 +127,32 @@ internal IOperatorBuilder AddOperatorBase(OperatorSettings settings)
126
127
{
127
128
SerializationSettings =
128
129
{
130
+ Formatting = Formatting . Indented ,
131
+ DateFormatHandling = DateFormatHandling . IsoDateFormat ,
132
+ DateTimeZoneHandling = DateTimeZoneHandling . Utc ,
133
+ NullValueHandling = NullValueHandling . Ignore ,
134
+ ReferenceLoopHandling = ReferenceLoopHandling . Serialize ,
129
135
ContractResolver = new NamingConvention ( ) ,
130
136
Converters = new List < JsonConverter >
131
- { new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } } ,
137
+ {
138
+ new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } ,
139
+ new Iso8601TimeSpanConverter ( ) ,
140
+ } ,
141
+ DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.ffffffK" ,
132
142
} ,
133
143
DeserializationSettings =
134
144
{
145
+ DateFormatHandling = DateFormatHandling . IsoDateFormat ,
146
+ DateTimeZoneHandling = DateTimeZoneHandling . Utc ,
147
+ NullValueHandling = NullValueHandling . Ignore ,
148
+ ReferenceLoopHandling = ReferenceLoopHandling . Serialize ,
135
149
ContractResolver = new NamingConvention ( ) ,
136
150
Converters = new List < JsonConverter >
137
- { new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } } ,
151
+ {
152
+ new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy ( ) } ,
153
+ new Iso8601TimeSpanConverter ( ) ,
154
+ } ,
155
+ DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.ffffffK" ,
138
156
} ,
139
157
} ) ;
140
158
@@ -151,6 +169,10 @@ internal IOperatorBuilder AddOperatorBase(OperatorSettings settings)
151
169
// Add the default controller liveness check.
152
170
AddHealthCheck < ControllerLivenessCheck > ( ) ;
153
171
172
+ // Support for leader election via V1Leases.
173
+ Services . AddHostedService < LeaderElector > ( ) ;
174
+ Services . AddSingleton < ILeaderElection , LeaderElection > ( ) ;
175
+
154
176
return this ;
155
177
}
156
178
}
0 commit comments