Skip to content

Commit ea540c9

Browse files
authored
Merge pull request #52 from ityuhui/yh-generic-client-patch
Add PATCH operation to the generic client
2 parents 06681cb + 4b73d0a commit ea540c9

File tree

3 files changed

+54
-14
lines changed

3 files changed

+54
-14
lines changed

examples/generic/main.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,25 @@ int main(int argc, char *argv[])
4646
printf("%s\n", update);
4747
free(update);
4848

49+
const char *patchBody = "[{\"op\": \"replace\", \"path\": \"/metadata/labels/foo\", \"value\": \"qux\" }]";
50+
list_t *contentType = list_create();
51+
// Kubernetes supports multiple content types:
52+
list_addElement(contentType, "application/json-patch+json");
53+
// list_addElement(contentType, "application/merge-patch+json");
54+
// list_addElement(contentType, "application/strategic-merge-patch+json");
55+
// list_addElement(contentType, "application/apply-patch+yaml");
56+
char *patch = Generic_patchResource(genericClient, "test", patchBody, NULL, NULL, NULL, NULL, contentType);
57+
printf("%s\n", patch);
58+
list_free(contentType);
59+
free(patch);
60+
4961
char *del = Generic_deleteResource(genericClient, "test");
5062
printf("%s\n", del);
5163
free(del);
5264

5365
genericClient_free(genericClient);
5466
genericClient = NULL;
5567

56-
5768
apiClient_free(apiClient);
5869
apiClient = NULL;
5970
free_client_config(basePath, sslConfig, apiKeys);

kubernetes/include/generic.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ typedef struct genericClient_t {
1111
apiClient_t *client;
1212
char *apiGroup;
1313
char *apiVersion;
14-
char *resourcePlural;
14+
char *resourcePlural;
1515
} genericClient_t;
1616

1717
genericClient_t* genericClient_create(apiClient_t *client, const char *apiGroup, const char* apiVersion, const char* resourcePlural);
@@ -32,6 +32,11 @@ char* Generic_createResource(genericClient_t *client, const char* body);
3232
char* Generic_replaceNamespacedResource(genericClient_t *client, const char *ns, const char *name, const char* body);
3333
char* Generic_replaceResource(genericClient_t *client, const char *name, const char* body);
3434

35+
char* Generic_patchNamespacedResource(genericClient_t *client, const char *ns, const char *name, const char *body, list_t *queryParameters, list_t *headerParameters, list_t *formParameters,
36+
list_t *headerType, list_t *contentType);
37+
char* Generic_patchResource(genericClient_t *client, const char *name, const char *body, list_t *queryParameters, list_t *headerParameters, list_t *formParameters, list_t *headerType,
38+
list_t *contentType);
39+
3540
#ifdef __cplusplus
3641
}
3742
#endif

kubernetes/src/generic.c

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ void makeResourcePath(char* path, genericClient_t *client, const char* name) {
5050
}
5151
}
5252

53-
char* callInternal(genericClient_t *client, const char* path, const char* method, const char* body) {
54-
apiClient_invoke(client->client, path, NULL, NULL, NULL, NULL, NULL, body, method);
53+
char* callInternal(genericClient_t *client,
54+
const char *path, list_t *queryParameters, list_t *headerParameters, list_t *formParameters, list_t *headerType, list_t *contentType, const char *body, const char *method)
55+
{
56+
apiClient_invoke(client->client, path, queryParameters, headerParameters, formParameters, headerType, contentType, body, method);
5557

5658
if (client->client->response_code == 200) {
5759
printf("%s\n","OK");
@@ -71,18 +73,23 @@ char* callInternal(genericClient_t *client, const char* path, const char* method
7173
return elementToReturn;
7274
}
7375

76+
char *callSimplifiedInternal(genericClient_t *client, const char *path, const char *method, const char *body)
77+
{
78+
return callInternal(client, path, NULL, NULL, NULL, NULL, NULL, body, method);
79+
}
80+
7481
char* Generic_readNamespacedResource(genericClient_t *client, const char *namespace, const char *name) {
7582
char path[128];
7683

7784
makeNamespacedResourcePath(path, client, namespace, name);
78-
return callInternal(client, path, "GET", NULL);
85+
return callSimplifiedInternal(client, path, "GET", NULL);
7986
}
8087

8188
char* Generic_readResource(genericClient_t *client, const char *name) {
8289
char path[128];
8390

8491
makeResourcePath(path, client, name);
85-
return callInternal(client, path, "GET", NULL);
92+
return callSimplifiedInternal(client, path, "GET", NULL);
8693
}
8794

8895
char *Generic_listNamespaced(genericClient_t *client, const char *namespace) {
@@ -94,7 +101,7 @@ char *Generic_listNamespaced(genericClient_t *client, const char *namespace) {
94101
snprintf(path, 128, "/api/%s/namespaces/%s/%s",
95102
client->apiVersion, namespace, client->resourcePlural);
96103
}
97-
return callInternal(client, path, "GET", NULL);
104+
return callSimplifiedInternal(client, path, "GET", NULL);
98105
}
99106

100107
char *Generic_list(genericClient_t *client) {
@@ -106,42 +113,59 @@ char *Generic_list(genericClient_t *client) {
106113
snprintf(path, 128, "/api/%s/%s",
107114
client->apiVersion, client->resourcePlural);
108115
}
109-
return callInternal(client, path, "GET", NULL);
116+
return callSimplifiedInternal(client, path, "GET", NULL);
110117
}
111118

112119
char* Generic_deleteNamespacedResource(genericClient_t *client, const char *namespace, const char *name) {
113120
char path[128];
114121
makeNamespacedResourcePath(path, client, namespace, name);
115-
return callInternal(client, path, "DELETE", NULL);
122+
return callSimplifiedInternal(client, path, "DELETE", NULL);
116123
}
117124

118125
char* Generic_deleteResource(genericClient_t *client, const char* name) {
119126
char path[128];
120127
makeResourcePath(path, client, name);
121-
return callInternal(client, path, "DELETE", NULL);
128+
return callSimplifiedInternal(client, path, "DELETE", NULL);
122129
}
123130

124131
char* Generic_createNamespacedResource(genericClient_t *client, const char *ns, const char* body) {
125132
char path[128];
126133
makeNamespacedResourcePath(path, client, ns, "");
127-
return callInternal(client, path, "POST", body);
134+
return callSimplifiedInternal(client, path, "POST", body);
128135
}
129136

130137
char* Generic_createResource(genericClient_t *client, const char* body) {
131138
char path[128];
132139
makeResourcePath(path, client, "");
133140
printf("%s\n", path);
134-
return callInternal(client, path, "POST", body);
141+
return callSimplifiedInternal(client, path, "POST", body);
135142
}
136143

137144
char* Generic_replaceNamespacedResource(genericClient_t *client, const char *ns, const char *name, const char* body) {
138145
char path[128];
139146
makeNamespacedResourcePath(path, client, ns, name);
140-
return callInternal(client, path, "PUT", body);
147+
return callSimplifiedInternal(client, path, "PUT", body);
141148
}
142149

143150
char* Generic_replaceResource(genericClient_t *client, const char *name, const char* body) {
144151
char path[128];
145152
makeResourcePath(path, client, name);
146-
return callInternal(client, path, "PUT", body);
153+
return callSimplifiedInternal(client, path, "PUT", body);
154+
}
155+
156+
char* Generic_patchNamespacedResource(genericClient_t * client,
157+
const char *ns,
158+
const char *name, const char *body, list_t *queryParameters, list_t *headerParameters, list_t *formParameters, list_t *headerType, list_t *contentType)
159+
{
160+
char path[128];
161+
makeNamespacedResourcePath(path, client, ns, name);
162+
return callInternal(client, path, queryParameters, headerParameters, formParameters, headerType, contentType, body, "PATCH");
163+
}
164+
165+
char* Generic_patchResource(genericClient_t * client,
166+
const char *name, const char *body, list_t *queryParameters, list_t *headerParameters, list_t *formParameters, list_t *headerType, list_t *contentType)
167+
{
168+
char path[128];
169+
makeResourcePath(path, client, name);
170+
return callInternal(client, path, queryParameters, headerParameters, formParameters, headerType, contentType, body, "PATCH");
147171
}

0 commit comments

Comments
 (0)