@@ -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