Skip to content

Commit e330d87

Browse files
committed
Status: use k8s client to get microshift status
In this PR, k8s client api is used to get the node status and provide this info to status command instead using `systemctl status microshift` which uses ssh connection. - https://kubernetes.io/docs/concepts/architecture/nodes/#condition
1 parent 3ac2a2b commit e330d87

File tree

881 files changed

+108355
-23
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

881 files changed

+108355
-23
lines changed

pkg/crc/cluster/clusteroperator.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ import (
1212
"time"
1313

1414
clientset "github.com/openshift/client-go/config/clientset/versioned"
15+
k8sclient "k8s.io/client-go/kubernetes"
1516
restclient "k8s.io/client-go/rest"
1617
"k8s.io/client-go/tools/clientcmd"
1718

1819
"github.com/crc-org/crc/pkg/crc/logging"
1920
openshiftapi "github.com/openshift/api/config/v1"
21+
k8sapi "k8s.io/api/core/v1"
2022
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2123
)
2224

@@ -145,6 +147,37 @@ func getStatus(ctx context.Context, lister operatorLister, selector []string) (*
145147
return cs, nil
146148
}
147149

150+
func GetClusterNodeStatus(ctx context.Context, ip string, kubeconfigFilePath string) (*Status, error) {
151+
status := &Status{
152+
Available: true,
153+
}
154+
clientSet, err := kubernetesClient(ip, kubeconfigFilePath)
155+
if err != nil {
156+
return nil, err
157+
}
158+
nodes, err := clientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{})
159+
if err != nil {
160+
return nil, err
161+
}
162+
var ns k8sapi.ConditionStatus
163+
for _, c := range nodes.Items[0].Status.Conditions {
164+
if c.Type == k8sapi.NodeReady {
165+
ns = c.Status
166+
}
167+
}
168+
switch ns {
169+
case k8sapi.ConditionTrue:
170+
status.Available = true
171+
case k8sapi.ConditionFalse:
172+
status.Progressing = true
173+
case k8sapi.ConditionUnknown:
174+
status.Degraded = true
175+
default:
176+
logging.Debugf("Unexpected node status for %s", ns)
177+
}
178+
return status, nil
179+
}
180+
148181
func contains(value string, list []string) bool {
149182
for _, v := range list {
150183
if v == value {
@@ -166,6 +199,14 @@ func openshiftClient(ip string, kubeconfigFilePath string) (*clientset.Clientset
166199
return clientset.NewForConfig(config)
167200
}
168201

202+
func kubernetesClient(ip string, kubeconfigFilePath string) (*k8sclient.Clientset, error) {
203+
config, err := kubernetesClientConfiguration(ip, kubeconfigFilePath)
204+
if err != nil {
205+
return nil, err
206+
}
207+
return k8sclient.NewForConfig(config)
208+
}
209+
169210
func kubernetesClientConfiguration(ip string, kubeconfigFilePath string) (*restclient.Config, error) {
170211
config, err := clientcmd.BuildConfigFromFlags("", kubeconfigFilePath)
171212
if err != nil {

pkg/crc/machine/status.go

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
"github.com/crc-org/crc/pkg/crc/machine/state"
1111
"github.com/crc-org/crc/pkg/crc/machine/types"
1212
"github.com/crc-org/crc/pkg/crc/preset"
13-
"github.com/crc-org/crc/pkg/crc/systemd"
14-
sdState "github.com/crc-org/crc/pkg/crc/systemd/states"
1513
"github.com/pkg/errors"
1614
)
1715

@@ -66,7 +64,7 @@ func (client *client) Status() (*types.ClusterStatusResult, error) {
6664

6765
switch {
6866
case vm.bundle.IsMicroshift():
69-
clusterStatusResult.OpenshiftStatus = getMicroShiftStatus(vm)
67+
clusterStatusResult.OpenshiftStatus = getMicroShiftStatus(context.Background(), ip)
7068
case vm.bundle.IsOpenShift():
7169
clusterStatusResult.OpenshiftStatus = getOpenShiftStatus(context.Background(), ip)
7270
}
@@ -140,32 +138,25 @@ func getOpenShiftStatus(ctx context.Context, ip string) types.OpenshiftStatus {
140138
logging.Debugf("cannot get OpenShift status: %v", err)
141139
return types.OpenshiftUnreachable
142140
}
143-
switch {
144-
case status.Progressing:
145-
return types.OpenshiftStarting
146-
case status.Degraded:
147-
return types.OpenshiftDegraded
148-
case status.Available:
149-
return types.OpenshiftRunning
150-
}
151-
return types.OpenshiftStopped
141+
return getStatus(status)
152142
}
153143

154-
func getMicroShiftStatus(vm *virtualMachine) types.OpenshiftStatus {
155-
sshRunner, err := vm.SSHRunner()
144+
func getMicroShiftStatus(ctx context.Context, ip string) types.OpenshiftStatus {
145+
status, err := cluster.GetClusterNodeStatus(ctx, ip, constants.KubeconfigFilePath)
156146
if err != nil {
157-
logging.Debugf("cannot get MicroShift status: %v", err)
147+
logging.Debugf("failed to get microshift node status: %v", err)
158148
return types.OpenshiftUnreachable
159149
}
160-
defer sshRunner.Close()
150+
return getStatus(status)
151+
}
161152

162-
sd := systemd.NewInstanceSystemdCommander(sshRunner)
163-
microShiftServiceState, err := sd.Status("microshift")
164-
if err != nil {
165-
logging.Debugf("failed to get microshift service status: %v", err)
166-
return types.OpenshiftUnreachable
167-
}
168-
if microShiftServiceState == sdState.Running {
153+
func getStatus(status *cluster.Status) types.OpenshiftStatus {
154+
switch {
155+
case status.Progressing:
156+
return types.OpenshiftStarting
157+
case status.Degraded:
158+
return types.OpenshiftDegraded
159+
case status.Available:
169160
return types.OpenshiftRunning
170161
}
171162
return types.OpenshiftStopped

vendor/k8s.io/client-go/applyconfigurations/admissionregistration/v1/mutatingwebhook.go

Lines changed: 141 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)