Skip to content

Commit f8b21f8

Browse files
anjannathopenshift-merge-robot
authored andcommitted
Add user to crc-users and hyperv admins group in a single powershell admin call
this is done to avoid getting two UAC prompts during crc setup command by combining both in a single call to powershell admin session we are losing inidividual error messages to determine which action failed but in this case its an acceptable trade-off, since the two actions are doing similar thing of adding current member to a group, so its easy to narrow down the issue
1 parent 68244ec commit f8b21f8

File tree

3 files changed

+38
-61
lines changed

3 files changed

+38
-61
lines changed

pkg/crc/preflight/preflight_checks_windows.go

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -99,40 +99,21 @@ func checkHyperVServiceRunning() error {
9999
return nil
100100
}
101101

102-
func checkIfUserPartOfHyperVAdmins() error {
103-
// https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems
104-
// BUILTIN\Hyper-V Administrators => S-1-5-32-578
105-
106-
checkIfMemberOfHyperVAdmins :=
107-
`$sid = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-578")
108-
@([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole($sid)`
109-
stdOut, _, err := powershell.Execute(checkIfMemberOfHyperVAdmins)
110-
if err != nil {
111-
logging.Debug(err.Error())
112-
return fmt.Errorf("Failed checking if user is part of hyperv admins group")
113-
}
114-
if !strings.Contains(stdOut, "True") {
115-
return fmt.Errorf("User is not a member of the Hyper-V administrators group")
116-
}
117-
118-
return nil
119-
}
120-
121-
func fixUserPartOfHyperVAdmins() error {
122-
_, _, err := powershell.ExecuteAsAdmin("adding current user to Hyper-V administrator group", fmt.Sprintf("Add-LocalGroupMember -SID 'S-1-5-32-578' -Member '%s'", username()))
102+
func checkUserPartOfCrcUsersAndHypervAdminsGroup() error {
103+
_, _, err := powershell.Execute(fmt.Sprintf("Get-LocalGroupMember -Group 'crc-users' -Member '%s'", username()))
123104
if err != nil {
124105
return err
125106
}
126-
return errReboot
127-
}
128107

129-
func checkUserPartOfCrcUsers() error {
130-
_, _, err := powershell.Execute(fmt.Sprintf("Get-LocalGroupMember -Group 'crc-users' -Member '%s'", username()))
108+
// https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems
109+
// BUILTIN\Hyper-V Administrators => S-1-5-32-578
110+
_, _, err = powershell.Execute(fmt.Sprintf("Get-LocalGroupMember -SID 'S-1-5-32-578' -Member '%s'", username()))
131111
return err
132112
}
133113

134-
func fixUserPartOfCrcUsers() error {
135-
_, _, err := powershell.ExecuteAsAdmin("adding current user to crc-users group", fmt.Sprintf("Add-LocalGroupMember -Group 'crc-users' -Member '%s'", username()))
114+
func fixUserPartOfCrcUsersAndHypervAdminsGroup() error {
115+
cmd := `Add-LocalGroupMember -Group 'crc-users' -Member '%s';Add-LocalGroupMember -SID 'S-1-5-32-578' -Member '%s'`
116+
_, _, err := powershell.ExecuteAsAdmin("adding current user to crc-users and Hyper-V admins group", fmt.Sprintf(cmd, username(), username()))
136117
if err != nil {
137118
return err
138119
}

pkg/crc/preflight/preflight_windows.go

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,28 +47,6 @@ var hypervPreflightChecks = []Check{
4747

4848
labels: labels{Os: Windows},
4949
},
50-
{
51-
configKeySuffix: "check-crc-users-group-exists",
52-
checkDescription: "Checking if crc-users group exists",
53-
check: func() error {
54-
if _, _, err := powershell.Execute("Get-LocalGroup -Name crc-users"); err != nil {
55-
return fmt.Errorf("'crc-users' group does not exist: %v", err)
56-
}
57-
return nil
58-
},
59-
flags: StartUpOnly,
60-
61-
labels: labels{Os: Windows},
62-
},
63-
{
64-
configKeySuffix: "check-user-in-hyperv-group",
65-
checkDescription: "Checking if current user is in Hyper-V Admins group",
66-
check: checkIfUserPartOfHyperVAdmins,
67-
fixDescription: "Adding current user to Hyper-V Admins group",
68-
fix: fixUserPartOfHyperVAdmins,
69-
70-
labels: labels{Os: Windows},
71-
},
7250
{
7351
configKeySuffix: "check-hyperv-service-running",
7452
checkDescription: "Checking if Hyper-V service is enabled",
@@ -147,12 +125,29 @@ var adminHelperServiceCheks = []Check{
147125
},
148126
}
149127

150-
var userPartOfCrcUsersGroupCheck = Check{
151-
configKeySuffix: "check-user-in-crc-users-group",
152-
checkDescription: "Checking if current user is in crc-users group",
153-
check: checkUserPartOfCrcUsers,
154-
fixDescription: "Adding logon user to crc-users group",
155-
fix: fixUserPartOfCrcUsers,
128+
// 'crc-user' group is supposed to be created by the msi or chocolatey
129+
// this check makes sure that was done before stating crc, it does not
130+
// have a fix function since this'll be handled by the msi or choco
131+
var crcUsersGroupExistsCheck = Check{
132+
configKeySuffix: "check-crc-users-group-exists",
133+
checkDescription: "Checking if crc-users group exists",
134+
check: func() error {
135+
if _, _, err := powershell.Execute("Get-LocalGroup -Name crc-users"); err != nil {
136+
return fmt.Errorf("'crc-users' group does not exist: %v", err)
137+
}
138+
return nil
139+
},
140+
flags: StartUpOnly,
141+
142+
labels: labels{Os: Windows},
143+
}
144+
145+
var userPartOfCrcUsersAndHypervAdminsGroupCheck = Check{
146+
configKeySuffix: "check-user-in-crc-users-and-hyperv-admins-group",
147+
checkDescription: "Checking if current user is in crc-users and Hyper-V admins group",
148+
check: checkUserPartOfCrcUsersAndHypervAdminsGroup,
149+
fixDescription: "Adding logon user to crc-users and Hyper-V admins group",
150+
fix: fixUserPartOfCrcUsersAndHypervAdminsGroup,
156151

157152
labels: labels{Os: Windows},
158153
}
@@ -199,7 +194,8 @@ func getAllPreflightChecks() []Check {
199194
func getChecks(bundlePath string, preset crcpreset.Preset) []Check {
200195
checks := []Check{}
201196
checks = append(checks, hypervPreflightChecks...)
202-
checks = append(checks, userPartOfCrcUsersGroupCheck)
197+
checks = append(checks, crcUsersGroupExistsCheck)
198+
checks = append(checks, userPartOfCrcUsersAndHypervAdminsGroupCheck)
203199
checks = append(checks, vsockChecks...)
204200
checks = append(checks, bundleCheck(bundlePath, preset))
205201
checks = append(checks, genericCleanupChecks...)

pkg/crc/preflight/preflight_windows_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ import (
1313
func TestCountConfigurationOptions(t *testing.T) {
1414
cfg := config.New(config.NewEmptyInMemoryStorage(), config.NewEmptyInMemorySecretStorage())
1515
RegisterSettings(cfg)
16-
assert.Len(t, cfg.AllConfigs(), 13)
16+
assert.Len(t, cfg.AllConfigs(), 12)
1717
}
1818

1919
func TestCountPreflights(t *testing.T) {
20-
assert.Len(t, getPreflightChecks(false, network.SystemNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 19)
21-
assert.Len(t, getPreflightChecks(true, network.SystemNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 19)
20+
assert.Len(t, getPreflightChecks(false, network.SystemNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 18)
21+
assert.Len(t, getPreflightChecks(true, network.SystemNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 18)
2222

23-
assert.Len(t, getPreflightChecks(false, network.UserNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 18)
24-
assert.Len(t, getPreflightChecks(true, network.UserNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 18)
23+
assert.Len(t, getPreflightChecks(false, network.UserNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 17)
24+
assert.Len(t, getPreflightChecks(true, network.UserNetworkingMode, constants.GetDefaultBundlePath(preset.OpenShift), preset.OpenShift), 17)
2525
}

0 commit comments

Comments
 (0)