Skip to content

Commit 1c8023a

Browse files
committed
feat: check inventory when it's changed
1 parent cff1ea7 commit 1c8023a

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

pkg/web/handler/inventory.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@ import (
66
"slices"
77
"strings"
88

9+
"github.com/cockroachdb/errors"
910
"github.com/emicklei/go-restful/v3"
1011
kkcorev1 "github.com/kubesphere/kubekey/api/core/v1"
12+
corev1 "k8s.io/api/core/v1"
1113
"k8s.io/apimachinery/pkg/api/meta"
14+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1216
"k8s.io/apimachinery/pkg/fields"
1317
"k8s.io/apimachinery/pkg/runtime"
1418
"k8s.io/apimachinery/pkg/types"
@@ -74,6 +78,50 @@ func (h *InventoryHandler) Patch(request *restful.Request, response *restful.Res
7478
api.HandleBadRequest(response, request, err)
7579
return
7680
}
81+
// create host-check playbook
82+
playbook := &kkcorev1.Playbook{
83+
ObjectMeta: metav1.ObjectMeta{
84+
GenerateName: "host-check-",
85+
Namespace: namespace,
86+
},
87+
Spec: kkcorev1.PlaybookSpec{
88+
InventoryRef: &corev1.ObjectReference{
89+
Kind: "Inventory",
90+
Namespace: namespace,
91+
Name: name,
92+
},
93+
Playbook: "host_check.yaml",
94+
},
95+
Status: kkcorev1.PlaybookStatus{
96+
Phase: kkcorev1.PlaybookPhasePending,
97+
},
98+
}
99+
// Set the workdir in the playbook's spec config
100+
if err := unstructured.SetNestedField(playbook.Spec.Config.Value(), h.workdir, _const.Workdir); err != nil {
101+
api.HandleBadRequest(response, request, err)
102+
return
103+
}
104+
if err := h.client.Create(request.Request.Context(), playbook); err != nil {
105+
api.HandleBadRequest(response, request, errors.Wrap(err, "failed to create hostcheck playbook"))
106+
return
107+
}
108+
109+
// Execute the playbook asynchronously.
110+
if err := playbookManager.executor(playbook, h.client); err != nil {
111+
api.HandleBadRequest(response, request, errors.Wrap(err, "failed to execute hostcheck playbook"))
112+
return
113+
}
114+
115+
// update inventory annotation
116+
old := inventory.DeepCopy()
117+
if inventory.Annotations == nil {
118+
inventory.Annotations = make(map[string]string)
119+
}
120+
inventory.Annotations[kkcorev1.HostCheckPlaybookAnnotation] = playbook.Name
121+
if err := h.client.Patch(request.Request.Context(), inventory, ctrlclient.MergeFrom(old)); err != nil {
122+
api.HandleBadRequest(response, request, errors.Wrap(err, "failed to execute hostcheck playbook"))
123+
return
124+
}
77125

78126
_ = response.WriteEntity(inventory)
79127
}

0 commit comments

Comments
 (0)