knife-winops 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.rspec +3 -0
- data/.travis.yml +30 -0
- data/CHANGELOG.md +147 -0
- data/DOC_CHANGES.md +22 -0
- data/Gemfile +13 -0
- data/LICENSE +201 -0
- data/README.md +430 -0
- data/RELEASE_NOTES.md +17 -0
- data/Rakefile +21 -0
- data/appveyor.yml +36 -0
- data/ci.gemfile +15 -0
- data/knife-winops.gemspec +26 -0
- data/lib/chef/knife/bootstrap/Chef_bootstrap.erb +44 -0
- data/lib/chef/knife/bootstrap/bootstrap.ps1 +134 -0
- data/lib/chef/knife/bootstrap/tail.cmd +15 -0
- data/lib/chef/knife/bootstrap/windows-chef-client-msi.erb +302 -0
- data/lib/chef/knife/bootstrap_windows_base.rb +473 -0
- data/lib/chef/knife/bootstrap_windows_ssh.rb +115 -0
- data/lib/chef/knife/bootstrap_windows_winrm.rb +102 -0
- data/lib/chef/knife/core/windows_bootstrap_context.rb +356 -0
- data/lib/chef/knife/knife_windows_base.rb +33 -0
- data/lib/chef/knife/windows_cert_generate.rb +155 -0
- data/lib/chef/knife/windows_cert_install.rb +68 -0
- data/lib/chef/knife/windows_helper.rb +36 -0
- data/lib/chef/knife/windows_listener_create.rb +107 -0
- data/lib/chef/knife/winrm.rb +127 -0
- data/lib/chef/knife/winrm_base.rb +128 -0
- data/lib/chef/knife/winrm_knife_base.rb +315 -0
- data/lib/chef/knife/winrm_session.rb +101 -0
- data/lib/chef/knife/winrm_shared_options.rb +54 -0
- data/lib/chef/knife/wsman_endpoint.rb +44 -0
- data/lib/chef/knife/wsman_test.rb +118 -0
- data/lib/knife-winops/path_helper.rb +242 -0
- data/lib/knife-winops/version.rb +6 -0
- data/spec/assets/fake_trusted_certs/excluded.txt +2 -0
- data/spec/assets/fake_trusted_certs/github.pem +42 -0
- data/spec/assets/fake_trusted_certs/google.crt +41 -0
- data/spec/assets/win_fake_trusted_cert_script.txt +89 -0
- data/spec/dummy_winrm_connection.rb +21 -0
- data/spec/functional/bootstrap_download_spec.rb +229 -0
- data/spec/spec_helper.rb +93 -0
- data/spec/unit/knife/bootstrap_options_spec.rb +164 -0
- data/spec/unit/knife/bootstrap_template_spec.rb +98 -0
- data/spec/unit/knife/bootstrap_windows_winrm_spec.rb +410 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +292 -0
- data/spec/unit/knife/windows_cert_generate_spec.rb +90 -0
- data/spec/unit/knife/windows_cert_install_spec.rb +51 -0
- data/spec/unit/knife/windows_listener_create_spec.rb +76 -0
- data/spec/unit/knife/winrm_session_spec.rb +101 -0
- data/spec/unit/knife/winrm_spec.rb +494 -0
- data/spec/unit/knife/wsman_test_spec.rb +209 -0
- metadata +157 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIHeTCCBmGgAwIBAgIQC/20CQrXteZAwwsWyVKaJzANBgkqhkiG9w0BAQsFADB1
|
3
|
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
4
|
+
d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
|
5
|
+
IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE2MDMxMDAwMDAwMFoXDTE4MDUxNzEy
|
6
|
+
MDAwMFowgf0xHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
|
7
|
+
BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
|
8
|
+
Ewc1MTU3NTUwMSQwIgYDVQQJExs4OCBDb2xpbiBQIEtlbGx5LCBKciBTdHJlZXQx
|
9
|
+
DjAMBgNVBBETBTk0MTA3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5p
|
10
|
+
YTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMR2l0SHViLCBJbmMu
|
11
|
+
MRMwEQYDVQQDEwpnaXRodWIuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
12
|
+
CgKCAQEA54hc8pZclxgcupjiA/F/OZGRwm/ZlucoQGTNTKmBEgNsrn/mxhngWmPw
|
13
|
+
bAvUaLP//T79Jc+1WXMpxMiz9PK6yZRRFuIo0d2bx423NA6hOL2RTtbnfs+y0PFS
|
14
|
+
/YTpQSelTuq+Fuwts5v6aAweNyMcYD0HBybkkdosFoDccBNzJ92Ac8I5EVDUc3Or
|
15
|
+
/4jSyZwzxu9kdmBlBzeHMvsqdH8SX9mNahXtXxRpwZnBiUjw36PgN+s9GLWGrafd
|
16
|
+
02T0ux9Yzd5ezkMxukqEAQ7AKIIijvaWPAJbK/52XLhIy2vpGNylyni/DQD18bBP
|
17
|
+
T+ZG1uv0QQP9LuY/joO+FKDOTler4wIDAQABo4IDejCCA3YwHwYDVR0jBBgwFoAU
|
18
|
+
PdNQpdagre7zSmAKZdMh1Pj41g8wHQYDVR0OBBYEFIhcSGcZzKB2WS0RecO+oqyH
|
19
|
+
IidbMCUGA1UdEQQeMByCCmdpdGh1Yi5jb22CDnd3dy5naXRodWIuY29tMA4GA1Ud
|
20
|
+
DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdQYDVR0f
|
21
|
+
BG4wbDA0oDKgMIYuaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItZXYtc2Vy
|
22
|
+
dmVyLWcxLmNybDA0oDKgMIYuaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTIt
|
23
|
+
ZXYtc2VydmVyLWcxLmNybDBLBgNVHSAERDBCMDcGCWCGSAGG/WwCATAqMCgGCCsG
|
24
|
+
AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAcGBWeBDAEBMIGI
|
25
|
+
BggrBgEFBQcBAQR8MHowJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
|
26
|
+
LmNvbTBSBggrBgEFBQcwAoZGaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
|
27
|
+
Z2lDZXJ0U0hBMkV4dGVuZGVkVmFsaWRhdGlvblNlcnZlckNBLmNydDAMBgNVHRMB
|
28
|
+
Af8EAjAAMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdgCkuQmQtBhYFIe7E6LM
|
29
|
+
Z3AKPDWYBPkb37jjd80OyA3cEAAAAVNhieoeAAAEAwBHMEUCIQCHHSEY/ROK2/sO
|
30
|
+
ljbKaNEcKWz6BxHJNPOtjSyuVnSn4QIgJ6RqvYbSX1vKLeX7vpnOfCAfS2Y8lB5R
|
31
|
+
NMwk6us2QiAAdgBo9pj4H2SCvjqM7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAVNh
|
32
|
+
iennAAAEAwBHMEUCIQDZpd5S+3to8k7lcDeWBhiJASiYTk2rNAT26lVaM3xhWwIg
|
33
|
+
NUqrkIODZpRg+khhp8ag65B8mu0p4JUAmkRDbiYnRvYAdwBWFAaaL9fC7NP14b1E
|
34
|
+
sj7HRna5vJkRXMDvlJhV1onQ3QAAAVNhieqZAAAEAwBIMEYCIQDnm3WStlvE99GC
|
35
|
+
izSx+UGtGmQk2WTokoPgo1hfiv8zIAIhAPrYeXrBgseA9jUWWoB4IvmcZtshjXso
|
36
|
+
nT8MIG1u1zF8MA0GCSqGSIb3DQEBCwUAA4IBAQCLbNtkxuspqycq8h1EpbmAX0wM
|
37
|
+
5DoW7hM/FVdz4LJ3Kmftyk1yd8j/PSxRrAQN2Mr/frKeK8NE1cMji32mJbBqpWtK
|
38
|
+
/+wC+avPplBUbNpzP53cuTMF/QssxItPGNP5/OT9Aj1BxA/NofWZKh4ufV7cz3pY
|
39
|
+
RDS4BF+EEFQ4l5GY+yp4WJA/xSvYsTHWeWxRD1/nl62/Rd9FN2NkacRVozCxRVle
|
40
|
+
FrBHTFxqIP6kDnxiLElBrZngtY07ietaYZVLQN/ETyqLQftsf8TecwTklbjvm8NT
|
41
|
+
JqbaIVifYwqwNN+4lRxS3F5lNlA/il12IOgbRioLI62o8G0DaEUQgHNf8vSG
|
42
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,41 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIHLzCCBhegAwIBAgIIe8v/Wprl7jIwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE
|
3
|
+
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
|
4
|
+
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTYxMTAzMDExMjAwWhcNMTcwMTI2MDExMjAw
|
5
|
+
WjBmMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
|
6
|
+
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEVMBMGA1UEAwwMKi5n
|
7
|
+
b29nbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7eUw+Kb3fhbNikiv
|
8
|
+
UBVwP1Rqn3EUL2AQULxRgcXUL1qYuP3GHcZNmSdtDvj7Dmr0MPBcKzZ69HyWeH08
|
9
|
+
tCKTGqOCBMcwggTDMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjCCA4YG
|
10
|
+
A1UdEQSCA30wggN5ggwqLmdvb2dsZS5jb22CDSouYW5kcm9pZC5jb22CFiouYXBw
|
11
|
+
ZW5naW5lLmdvb2dsZS5jb22CEiouY2xvdWQuZ29vZ2xlLmNvbYIWKi5nb29nbGUt
|
12
|
+
YW5hbHl0aWNzLmNvbYILKi5nb29nbGUuY2GCCyouZ29vZ2xlLmNsgg4qLmdvb2ds
|
13
|
+
ZS5jby5pboIOKi5nb29nbGUuY28uanCCDiouZ29vZ2xlLmNvLnVrgg8qLmdvb2ds
|
14
|
+
ZS5jb20uYXKCDyouZ29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJygg8qLmdv
|
15
|
+
b2dsZS5jb20uY2+CDyouZ29vZ2xlLmNvbS5teIIPKi5nb29nbGUuY29tLnRygg8q
|
16
|
+
Lmdvb2dsZS5jb20udm6CCyouZ29vZ2xlLmRlggsqLmdvb2dsZS5lc4ILKi5nb29n
|
17
|
+
bGUuZnKCCyouZ29vZ2xlLmh1ggsqLmdvb2dsZS5pdIILKi5nb29nbGUubmyCCyou
|
18
|
+
Z29vZ2xlLnBsggsqLmdvb2dsZS5wdIISKi5nb29nbGVhZGFwaXMuY29tgg8qLmdv
|
19
|
+
b2dsZWFwaXMuY26CFCouZ29vZ2xlY29tbWVyY2UuY29tghEqLmdvb2dsZXZpZGVv
|
20
|
+
LmNvbYIMKi5nc3RhdGljLmNugg0qLmdzdGF0aWMuY29tggoqLmd2dDEuY29tggoq
|
21
|
+
Lmd2dDIuY29tghQqLm1ldHJpYy5nc3RhdGljLmNvbYIMKi51cmNoaW4uY29tghAq
|
22
|
+
LnVybC5nb29nbGUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tgg0qLnlvdXR1
|
23
|
+
YmUuY29tghYqLnlvdXR1YmVlZHVjYXRpb24uY29tggsqLnl0aW1nLmNvbYIaYW5k
|
24
|
+
cm9pZC5jbGllbnRzLmdvb2dsZS5jb22CC2FuZHJvaWQuY29tghtkZXZlbG9wZXIu
|
25
|
+
YW5kcm9pZC5nb29nbGUuY26CBGcuY2+CBmdvby5nbIIUZ29vZ2xlLWFuYWx5dGlj
|
26
|
+
cy5jb22CCmdvb2dsZS5jb22CEmdvb2dsZWNvbW1lcmNlLmNvbYIZcG9saWN5Lm10
|
27
|
+
YS1zdHMuZ29vZ2xlLmNvbYIKdXJjaGluLmNvbYIKd3d3Lmdvby5nbIIIeW91dHUu
|
28
|
+
YmWCC3lvdXR1YmUuY29tghR5b3V0dWJlZWR1Y2F0aW9uLmNvbTALBgNVHQ8EBAMC
|
29
|
+
B4AwaAYIKwYBBQUHAQEEXDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2ds
|
30
|
+
ZS5jb20vR0lBRzIuY3J0MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29v
|
31
|
+
Z2xlLmNvbS9vY3NwMB0GA1UdDgQWBBR5MCCHaX4fFVGbf9djLVzXRIxRIjAMBgNV
|
32
|
+
HRMBAf8EAjAAMB8GA1UdIwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMCEGA1Ud
|
33
|
+
IAQaMBgwDAYKKwYBBAHWeQIFATAIBgZngQwBAgIwMAYDVR0fBCkwJzAloCOgIYYf
|
34
|
+
aHR0cDovL3BraS5nb29nbGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQsFAAOC
|
35
|
+
AQEAKS3dMw7fxdPK6n4q61wnVvTcomfJltDzPuGJj5VrRu/CrUq6DLC3Wgdc3US1
|
36
|
+
wlnlD73QI+6gplL4Zm77LfBILhOmJXnOuW+ktx96bOOhOO5r4V6KX5InpSRBLdWr
|
37
|
+
3hyj9DpfmZEJsNeuiJktfBUPKfZ+wsKrRkiY8QEgDT/0y0SRF5yIW5JOnyJY9pJ6
|
38
|
+
iJmd29rMeHSmN4JzNOFrrx+RbvyhSDUmOIl1skLDhtdsW8ttuKkyz+Iu2wxXxSr6
|
39
|
+
yerkMyqTYXSXs16o1uRo8lEbAnXtV6YIAtK3qbxMZbQUzGkNEiWT7FTasyKC+UlZ
|
40
|
+
URDYCDWBHebcIogs7r6ouYq5qw==
|
41
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,89 @@
|
|
1
|
+
> C:\chef/trusted_certs/google.pem (
|
2
|
+
echo.-----BEGIN CERTIFICATE-----
|
3
|
+
echo.MIIHLzCCBhegAwIBAgIIe8v/Wprl7jIwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE
|
4
|
+
echo.BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
|
5
|
+
echo.cm5ldCBBdXRob3JpdHkgRzIwHhcNMTYxMTAzMDExMjAwWhcNMTcwMTI2MDExMjAw
|
6
|
+
echo.WjBmMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
|
7
|
+
echo.TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEVMBMGA1UEAwwMKi5n
|
8
|
+
echo.b29nbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7eUw+Kb3fhbNikiv
|
9
|
+
echo.UBVwP1Rqn3EUL2AQULxRgcXUL1qYuP3GHcZNmSdtDvj7Dmr0MPBcKzZ69HyWeH08
|
10
|
+
echo.tCKTGqOCBMcwggTDMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjCCA4YG
|
11
|
+
echo.A1UdEQSCA30wggN5ggwqLmdvb2dsZS5jb22CDSouYW5kcm9pZC5jb22CFiouYXBw
|
12
|
+
echo.ZW5naW5lLmdvb2dsZS5jb22CEiouY2xvdWQuZ29vZ2xlLmNvbYIWKi5nb29nbGUt
|
13
|
+
echo.YW5hbHl0aWNzLmNvbYILKi5nb29nbGUuY2GCCyouZ29vZ2xlLmNsgg4qLmdvb2ds
|
14
|
+
echo.ZS5jby5pboIOKi5nb29nbGUuY28uanCCDiouZ29vZ2xlLmNvLnVrgg8qLmdvb2ds
|
15
|
+
echo.ZS5jb20uYXKCDyouZ29vZ2xlLmNvbS5hdYIPKi5nb29nbGUuY29tLmJygg8qLmdv
|
16
|
+
echo.b2dsZS5jb20uY2+CDyouZ29vZ2xlLmNvbS5teIIPKi5nb29nbGUuY29tLnRygg8q
|
17
|
+
echo.Lmdvb2dsZS5jb20udm6CCyouZ29vZ2xlLmRlggsqLmdvb2dsZS5lc4ILKi5nb29n
|
18
|
+
echo.bGUuZnKCCyouZ29vZ2xlLmh1ggsqLmdvb2dsZS5pdIILKi5nb29nbGUubmyCCyou
|
19
|
+
echo.Z29vZ2xlLnBsggsqLmdvb2dsZS5wdIISKi5nb29nbGVhZGFwaXMuY29tgg8qLmdv
|
20
|
+
echo.b2dsZWFwaXMuY26CFCouZ29vZ2xlY29tbWVyY2UuY29tghEqLmdvb2dsZXZpZGVv
|
21
|
+
echo.LmNvbYIMKi5nc3RhdGljLmNugg0qLmdzdGF0aWMuY29tggoqLmd2dDEuY29tggoq
|
22
|
+
echo.Lmd2dDIuY29tghQqLm1ldHJpYy5nc3RhdGljLmNvbYIMKi51cmNoaW4uY29tghAq
|
23
|
+
echo.LnVybC5nb29nbGUuY29tghYqLnlvdXR1YmUtbm9jb29raWUuY29tgg0qLnlvdXR1
|
24
|
+
echo.YmUuY29tghYqLnlvdXR1YmVlZHVjYXRpb24uY29tggsqLnl0aW1nLmNvbYIaYW5k
|
25
|
+
echo.cm9pZC5jbGllbnRzLmdvb2dsZS5jb22CC2FuZHJvaWQuY29tghtkZXZlbG9wZXIu
|
26
|
+
echo.YW5kcm9pZC5nb29nbGUuY26CBGcuY2+CBmdvby5nbIIUZ29vZ2xlLWFuYWx5dGlj
|
27
|
+
echo.cy5jb22CCmdvb2dsZS5jb22CEmdvb2dsZWNvbW1lcmNlLmNvbYIZcG9saWN5Lm10
|
28
|
+
echo.YS1zdHMuZ29vZ2xlLmNvbYIKdXJjaGluLmNvbYIKd3d3Lmdvby5nbIIIeW91dHUu
|
29
|
+
echo.YmWCC3lvdXR1YmUuY29tghR5b3V0dWJlZWR1Y2F0aW9uLmNvbTALBgNVHQ8EBAMC
|
30
|
+
echo.B4AwaAYIKwYBBQUHAQEEXDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2ds
|
31
|
+
echo.ZS5jb20vR0lBRzIuY3J0MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29v
|
32
|
+
echo.Z2xlLmNvbS9vY3NwMB0GA1UdDgQWBBR5MCCHaX4fFVGbf9djLVzXRIxRIjAMBgNV
|
33
|
+
echo.HRMBAf8EAjAAMB8GA1UdIwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMCEGA1Ud
|
34
|
+
echo.IAQaMBgwDAYKKwYBBAHWeQIFATAIBgZngQwBAgIwMAYDVR0fBCkwJzAloCOgIYYf
|
35
|
+
echo.aHR0cDovL3BraS5nb29nbGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQsFAAOC
|
36
|
+
echo.AQEAKS3dMw7fxdPK6n4q61wnVvTcomfJltDzPuGJj5VrRu/CrUq6DLC3Wgdc3US1
|
37
|
+
echo.wlnlD73QI+6gplL4Zm77LfBILhOmJXnOuW+ktx96bOOhOO5r4V6KX5InpSRBLdWr
|
38
|
+
echo.3hyj9DpfmZEJsNeuiJktfBUPKfZ+wsKrRkiY8QEgDT/0y0SRF5yIW5JOnyJY9pJ6
|
39
|
+
echo.iJmd29rMeHSmN4JzNOFrrx+RbvyhSDUmOIl1skLDhtdsW8ttuKkyz+Iu2wxXxSr6
|
40
|
+
echo.yerkMyqTYXSXs16o1uRo8lEbAnXtV6YIAtK3qbxMZbQUzGkNEiWT7FTasyKC+UlZ
|
41
|
+
echo.URDYCDWBHebcIogs7r6ouYq5qw==
|
42
|
+
echo.-----END CERTIFICATE-----
|
43
|
+
|
44
|
+
)
|
45
|
+
> C:\chef/trusted_certs/github.pem (
|
46
|
+
echo.-----BEGIN CERTIFICATE-----
|
47
|
+
echo.MIIHeTCCBmGgAwIBAgIQC/20CQrXteZAwwsWyVKaJzANBgkqhkiG9w0BAQsFADB1
|
48
|
+
echo.MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
49
|
+
echo.d3cuZGlnaWNlcnQuY29tMTQwMgYDVQQDEytEaWdpQ2VydCBTSEEyIEV4dGVuZGVk
|
50
|
+
echo.IFZhbGlkYXRpb24gU2VydmVyIENBMB4XDTE2MDMxMDAwMDAwMFoXDTE4MDUxNzEy
|
51
|
+
echo.MDAwMFowgf0xHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYLKwYB
|
52
|
+
echo.BAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQITCERlbGF3YXJlMRAwDgYDVQQF
|
53
|
+
echo.Ewc1MTU3NTUwMSQwIgYDVQQJExs4OCBDb2xpbiBQIEtlbGx5LCBKciBTdHJlZXQx
|
54
|
+
echo.DjAMBgNVBBETBTk0MTA3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5p
|
55
|
+
echo.YTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEChMMR2l0SHViLCBJbmMu
|
56
|
+
echo.MRMwEQYDVQQDEwpnaXRodWIuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
57
|
+
echo.CgKCAQEA54hc8pZclxgcupjiA/F/OZGRwm/ZlucoQGTNTKmBEgNsrn/mxhngWmPw
|
58
|
+
echo.bAvUaLP//T79Jc+1WXMpxMiz9PK6yZRRFuIo0d2bx423NA6hOL2RTtbnfs+y0PFS
|
59
|
+
echo./YTpQSelTuq+Fuwts5v6aAweNyMcYD0HBybkkdosFoDccBNzJ92Ac8I5EVDUc3Or
|
60
|
+
echo./4jSyZwzxu9kdmBlBzeHMvsqdH8SX9mNahXtXxRpwZnBiUjw36PgN+s9GLWGrafd
|
61
|
+
echo.02T0ux9Yzd5ezkMxukqEAQ7AKIIijvaWPAJbK/52XLhIy2vpGNylyni/DQD18bBP
|
62
|
+
echo.T+ZG1uv0QQP9LuY/joO+FKDOTler4wIDAQABo4IDejCCA3YwHwYDVR0jBBgwFoAU
|
63
|
+
echo.PdNQpdagre7zSmAKZdMh1Pj41g8wHQYDVR0OBBYEFIhcSGcZzKB2WS0RecO+oqyH
|
64
|
+
echo.IidbMCUGA1UdEQQeMByCCmdpdGh1Yi5jb22CDnd3dy5naXRodWIuY29tMA4GA1Ud
|
65
|
+
echo.DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdQYDVR0f
|
66
|
+
echo.BG4wbDA0oDKgMIYuaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItZXYtc2Vy
|
67
|
+
echo.dmVyLWcxLmNybDA0oDKgMIYuaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTIt
|
68
|
+
echo.ZXYtc2VydmVyLWcxLmNybDBLBgNVHSAERDBCMDcGCWCGSAGG/WwCATAqMCgGCCsG
|
69
|
+
echo.AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAcGBWeBDAEBMIGI
|
70
|
+
echo.BggrBgEFBQcBAQR8MHowJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
|
71
|
+
echo.LmNvbTBSBggrBgEFBQcwAoZGaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Rp
|
72
|
+
echo.Z2lDZXJ0U0hBMkV4dGVuZGVkVmFsaWRhdGlvblNlcnZlckNBLmNydDAMBgNVHRMB
|
73
|
+
echo.Af8EAjAAMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdgCkuQmQtBhYFIe7E6LM
|
74
|
+
echo.Z3AKPDWYBPkb37jjd80OyA3cEAAAAVNhieoeAAAEAwBHMEUCIQCHHSEY/ROK2/sO
|
75
|
+
echo.ljbKaNEcKWz6BxHJNPOtjSyuVnSn4QIgJ6RqvYbSX1vKLeX7vpnOfCAfS2Y8lB5R
|
76
|
+
echo.NMwk6us2QiAAdgBo9pj4H2SCvjqM7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAVNh
|
77
|
+
echo.iennAAAEAwBHMEUCIQDZpd5S+3to8k7lcDeWBhiJASiYTk2rNAT26lVaM3xhWwIg
|
78
|
+
echo.NUqrkIODZpRg+khhp8ag65B8mu0p4JUAmkRDbiYnRvYAdwBWFAaaL9fC7NP14b1E
|
79
|
+
echo.sj7HRna5vJkRXMDvlJhV1onQ3QAAAVNhieqZAAAEAwBIMEYCIQDnm3WStlvE99GC
|
80
|
+
echo.izSx+UGtGmQk2WTokoPgo1hfiv8zIAIhAPrYeXrBgseA9jUWWoB4IvmcZtshjXso
|
81
|
+
echo.nT8MIG1u1zF8MA0GCSqGSIb3DQEBCwUAA4IBAQCLbNtkxuspqycq8h1EpbmAX0wM
|
82
|
+
echo.5DoW7hM/FVdz4LJ3Kmftyk1yd8j/PSxRrAQN2Mr/frKeK8NE1cMji32mJbBqpWtK
|
83
|
+
echo./+wC+avPplBUbNpzP53cuTMF/QssxItPGNP5/OT9Aj1BxA/NofWZKh4ufV7cz3pY
|
84
|
+
echo.RDS4BF+EEFQ4l5GY+yp4WJA/xSvYsTHWeWxRD1/nl62/Rd9FN2NkacRVozCxRVle
|
85
|
+
echo.FrBHTFxqIP6kDnxiLElBrZngtY07ietaYZVLQN/ETyqLQftsf8TecwTklbjvm8NT
|
86
|
+
echo.JqbaIVifYwqwNN+4lRxS3F5lNlA/il12IOgbRioLI62o8G0DaEUQgHNf8vSG
|
87
|
+
echo.-----END CERTIFICATE-----
|
88
|
+
|
89
|
+
)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Dummy
|
2
|
+
class WinRMTransport
|
3
|
+
attr_reader :httpcli
|
4
|
+
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@httpcli = HTTPClient.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Connection
|
12
|
+
attr_reader :transport
|
13
|
+
attr_accessor :logger
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@transport = WinRMTransport.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def shell; end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,229 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-windows author:: Adam Edwards (<adamed@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2012-2016 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
15
|
+
# implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'dummy_winrm_connection'
|
21
|
+
require 'spec_helper'
|
22
|
+
require 'tmpdir'
|
23
|
+
|
24
|
+
# These test cases exercise the Knife::Windows knife plugin's ability
|
25
|
+
# to download a bootstrap msi as part of the bootstrap process on
|
26
|
+
# Windows nodes. The test modifies the Windows batch file generated
|
27
|
+
# from an erb template in the plugin source in order to enable execution
|
28
|
+
# of only the download functionality contained in the bootstrap template.
|
29
|
+
# The test relies on knowledge of the fields of the template itself and
|
30
|
+
# also on knowledge of the contents and structure of the Windows batch
|
31
|
+
# file generated by the template.
|
32
|
+
#
|
33
|
+
# Note that if the bootstrap template changes substantially, the tests
|
34
|
+
# should fail and will require re-implementation. If such changes
|
35
|
+
# occur, the bootstrap code should be refactored to explicitly expose
|
36
|
+
# the download funcitonality separately from other tasks to make the
|
37
|
+
# test more robust.
|
38
|
+
describe 'Knife::Windows::Core msi download functionality for knife Windows winrm bootstrap template' do
|
39
|
+
|
40
|
+
before(:all) do
|
41
|
+
# Since we're always running 32-bit Ruby, fix the
|
42
|
+
# PROCESSOR_ARCHITECTURE environment variable.
|
43
|
+
|
44
|
+
if ENV["PROCESSOR_ARCHITEW6432"]
|
45
|
+
ENV["PROCESSOR_ARCHITECTURE"] = ENV["PROCESSOR_ARCHITEW6432"]
|
46
|
+
end
|
47
|
+
|
48
|
+
# All file artifacts from this test will be written into this directory
|
49
|
+
@temp_directory = Dir.mktmpdir("bootstrap_test")
|
50
|
+
|
51
|
+
# Location to which the download script will be modified to write
|
52
|
+
# the downloaded msi
|
53
|
+
@local_file_download_destination = "#{@temp_directory}/chef-client-latest.msi"
|
54
|
+
|
55
|
+
source_code_directory = File.dirname(__FILE__)
|
56
|
+
@template_file_path ="#{source_code_directory}/../../lib/chef/knife/bootstrap/windows-chef-client-msi.erb"
|
57
|
+
end
|
58
|
+
|
59
|
+
after(:all) do
|
60
|
+
# Clear the temp directory upon exit
|
61
|
+
if Dir.exists?(@temp_directory)
|
62
|
+
FileUtils::remove_dir(@temp_directory)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "running on any version of the Windows OS", :windows_only do
|
67
|
+
let(:mock_bootstrap_context) { Chef::Knife::Core::WindowsBootstrapContext.new({ }, nil, { :knife => {} }) }
|
68
|
+
let(:mock_winrm) { Chef::Knife::Winrm.new }
|
69
|
+
|
70
|
+
before do
|
71
|
+
# Stub the bootstrap context and prevent config related sections
|
72
|
+
# from being populated, i.e. chef installation and first chef
|
73
|
+
# run sections
|
74
|
+
allow(mock_bootstrap_context).to receive(:validation_key).and_return("echo.validation_key")
|
75
|
+
allow(mock_bootstrap_context).to receive(:secret).and_return("echo.encrypted_data_bag_secret")
|
76
|
+
allow(mock_bootstrap_context).to receive(:config_content).and_return("echo.config_content")
|
77
|
+
allow(mock_bootstrap_context).to receive(:start_chef).and_return("echo.echo start_chef_command")
|
78
|
+
allow(mock_bootstrap_context).to receive(:run_list).and_return("echo.run_list")
|
79
|
+
allow(mock_bootstrap_context).to receive(:install_chef).and_return("echo.echo install_chef_command")
|
80
|
+
|
81
|
+
# Change the directories where bootstrap files will be created
|
82
|
+
allow(mock_bootstrap_context).to receive(:bootstrap_directory).and_return(@temp_directory.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR))
|
83
|
+
allow(mock_bootstrap_context).to receive(:local_download_path).and_return(@local_file_download_destination.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR))
|
84
|
+
|
85
|
+
# Prevent password prompt during bootstrap process
|
86
|
+
allow(mock_winrm.ui).to receive(:ask).and_return(nil)
|
87
|
+
allow(Chef::Knife::Winrm).to receive(:new).and_return(mock_winrm)
|
88
|
+
|
89
|
+
allow(Chef::Knife::Core::WindowsBootstrapContext).to receive(:new).and_return(mock_bootstrap_context)
|
90
|
+
Chef::Config[:knife] = {:winrm_transport => 'plaintext', :chef_node_name => 'foo.example.com', :winrm_authentication_protocol => 'negotiate'}
|
91
|
+
end
|
92
|
+
|
93
|
+
it "downloads the chef-client MSI from the default location during winrm bootstrap" do
|
94
|
+
run_download_scenario
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when provided a custom msi_url to fetch from" do
|
98
|
+
let(:mock_bootstrap_context) { Chef::Knife::Core::WindowsBootstrapContext.new(
|
99
|
+
{ :msi_url => "file:///C:/Windows/System32/xcopy.exe" }, nil, { :knife => {} }) }
|
100
|
+
it "downloads the chef-client MSI from a custom path during winrm bootstrap" do
|
101
|
+
run_download_scenario
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when provided a custom msi_url with space in path to fetch from" do
|
106
|
+
let(:mock_bootstrap_context) { Chef::Knife::Core::WindowsBootstrapContext.new(
|
107
|
+
{ :msi_url => "file:///C:/Program Files/Windows NT/Accessories/wordpad.exe" }, nil, { :knife => {} }) }
|
108
|
+
it "downloads the chef-client MSI from a custom path with spaces during winrm bootstrap" do
|
109
|
+
run_download_scenario
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def download_succeeded?
|
115
|
+
File.exists?(@local_file_download_destination) && ! File.zero?(@local_file_download_destination)
|
116
|
+
end
|
117
|
+
|
118
|
+
# Remove file artifacts generated by individual test cases
|
119
|
+
def clean_test_case
|
120
|
+
if File.exists?(@local_file_download_destination)
|
121
|
+
File.delete(@local_file_download_destination)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def run_download_scenario
|
126
|
+
clean_test_case
|
127
|
+
|
128
|
+
winrm_bootstrapper = Chef::Knife::BootstrapWindowsWinrm.new([ "127.0.0.1" ])
|
129
|
+
winrm_bootstrapper.client_builder = instance_double("Chef::Knife::Bootstrap::ClientBuilder", :run => nil, :client_path => nil)
|
130
|
+
|
131
|
+
allow(WinRM::Connection).to receive(:new).and_return(Dummy::Connection.new)
|
132
|
+
allow(winrm_bootstrapper).to receive(:wait_for_remote_response)
|
133
|
+
allow(winrm_bootstrapper).to receive(:validate_options!)
|
134
|
+
allow(winrm_bootstrapper.ui).to receive(:ask).and_return(nil)
|
135
|
+
winrm_bootstrapper.config[:template_file] = @template_file_path
|
136
|
+
winrm_bootstrapper.config[:run_list] = []
|
137
|
+
# Execute the commands locally that would normally be executed via WinRM
|
138
|
+
allow(winrm_bootstrapper).to receive(:run_command) do |command|
|
139
|
+
system(command)
|
140
|
+
end
|
141
|
+
|
142
|
+
winrm_bootstrapper.run
|
143
|
+
|
144
|
+
# Download should succeed
|
145
|
+
expect(download_succeeded?).to be true
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "bootstrap_install_command functionality through WinRM protocol" do
|
150
|
+
context "bootstrap_install_command option is not specified" do
|
151
|
+
let(:bootstrap) { Chef::Knife::BootstrapWindowsWinrm.new([]) }
|
152
|
+
before do
|
153
|
+
@template_file_path ="../../lib/chef/knife/bootstrap/windows-chef-client-msi.erb"
|
154
|
+
@template_input = sample_data(@template_file_path)
|
155
|
+
end
|
156
|
+
|
157
|
+
it "bootstrap_install_command option is not rendered in the windows-chef-client-msi.erb template as its value is nil", :chef_lt_12_5_only => true do
|
158
|
+
expect(bootstrap.send(:render_template,@template_input)).not_to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
159
|
+
end
|
160
|
+
|
161
|
+
context "when running chef-client ~12.5", :chef_gte_12_5_only => true, :chef_lt_13_only => true do
|
162
|
+
it "bootstrap_install_command option is not rendered in the windows-chef-client-msi.erb template as its value is nil" do
|
163
|
+
expect(bootstrap.send(:render_template,@template_input)).not_to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context "when running chef-client 13.0 or greater", :chef_gte_13_only => true do
|
168
|
+
it "bootstrap_install_command option is not rendered in the windows-chef-client-msi.erb template as its value is nil" do
|
169
|
+
expect(bootstrap.send(:render_template,@template_input)).not_to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "bootstrap_install_command option is specified" do
|
175
|
+
let(:bootstrap) { Chef::Knife::BootstrapWindowsWinrm.new(['--bootstrap-install-command', 'chef-client -o recipe[cbk1::rec2]']) }
|
176
|
+
before do
|
177
|
+
bootstrap.config[:bootstrap_install_command] = "chef-client -o recipe[cbk1::rec2]"
|
178
|
+
@template_file_path ="../../lib/chef/knife/bootstrap/windows-chef-client-msi.erb"
|
179
|
+
@template_input = sample_data(@template_file_path)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "bootstrap_install_command option is rendered in the windows-chef-client-msi.erb template", :chef_lt_12_5_only => true do
|
183
|
+
expect(bootstrap.send(:render_template,@template_input)).to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when running chef-client 12.5.0 or greater", :chef_gte_12_5_only => true do
|
187
|
+
it "bootstrap_install_command option is rendered in the windows-chef-client-msi.erb template" do
|
188
|
+
expect(bootstrap.send(:render_template,@template_input)).to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
after do
|
193
|
+
bootstrap.config.delete(:bootstrap_install_command)
|
194
|
+
Chef::Config[:knife].delete(:bootstrap_install_command)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "bootstrap_install_command functionality through SSH protocol", :chef_lt_12_5_only => true do
|
200
|
+
context "bootstrap_install_command option is not specified" do
|
201
|
+
let(:bootstrap) { Chef::Knife::BootstrapWindowsSsh.new([]) }
|
202
|
+
before do
|
203
|
+
@template_file_path ="../../lib/chef/knife/bootstrap/windows-chef-client-msi.erb"
|
204
|
+
@template_input = sample_data(@template_file_path)
|
205
|
+
end
|
206
|
+
|
207
|
+
it "bootstrap_install_command option is not rendered in the windows-chef-client-msi.erb template as its value is nil" do
|
208
|
+
expect(bootstrap.send(:render_template,@template_input)).not_to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context "bootstrap_install_command option is specified" do
|
213
|
+
let(:bootstrap) { Chef::Knife::BootstrapWindowsSsh.new(['--bootstrap-install-command', 'chef-client -o recipe[cbk1::rec2]']) }
|
214
|
+
before do
|
215
|
+
bootstrap.config[:bootstrap_install_command] = "chef-client -o recipe[cbk1::rec2]"
|
216
|
+
@template_file_path ="../../lib/chef/knife/bootstrap/windows-chef-client-msi.erb"
|
217
|
+
@template_input = sample_data(@template_file_path)
|
218
|
+
end
|
219
|
+
|
220
|
+
it "bootstrap_install_command option is rendered in the windows-chef-client-msi.erb template" do
|
221
|
+
expect(bootstrap.send(:render_template,@template_input)).to include("CHEF_CUSTOM_INSTALL_COMMAND")
|
222
|
+
end
|
223
|
+
|
224
|
+
after do
|
225
|
+
bootstrap.config.delete(:bootstrap_install_command)
|
226
|
+
Chef::Config[:knife].delete(:bootstrap_install_command)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
|
2
|
+
# Original knife-windows author:: Adam Edwards (<adamed@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2012-2016 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
15
|
+
# implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
def windows?
|
21
|
+
!!(RUBY_PLATFORM =~ /mswin|mingw|windows/)
|
22
|
+
end
|
23
|
+
|
24
|
+
require_relative '../lib/chef/knife/core/windows_bootstrap_context'
|
25
|
+
require_relative '../lib/chef/knife/bootstrap_windows_winrm'
|
26
|
+
require_relative '../lib/chef/knife/bootstrap_windows_ssh'
|
27
|
+
require_relative '../lib/chef/knife/wsman_test'
|
28
|
+
|
29
|
+
if windows?
|
30
|
+
require 'ruby-wmi'
|
31
|
+
end
|
32
|
+
|
33
|
+
def windows2012?
|
34
|
+
is_win2k12 = false
|
35
|
+
|
36
|
+
if windows?
|
37
|
+
this_operating_system = WMI::Win32_OperatingSystem.find(:first)
|
38
|
+
os_version = this_operating_system.send('Version')
|
39
|
+
|
40
|
+
# The operating system version is a string in the following form
|
41
|
+
# that can be split into components based on the '.' delimiter:
|
42
|
+
# MajorVersionNumber.MinorVersionNumber.BuildNumber
|
43
|
+
os_version_components = os_version.split('.')
|
44
|
+
|
45
|
+
if os_version_components.length < 2
|
46
|
+
raise 'WMI returned a Windows version from Win32_OperatingSystem.Version ' +
|
47
|
+
'with an unexpected format. The Windows version could not be determined.'
|
48
|
+
end
|
49
|
+
|
50
|
+
# Windows 6.2 is Windows Server 2012, so test the major and
|
51
|
+
# minor version components
|
52
|
+
is_win2k12 = os_version_components[0] == '6' && os_version_components[1] == '2'
|
53
|
+
end
|
54
|
+
|
55
|
+
is_win2k12
|
56
|
+
end
|
57
|
+
|
58
|
+
def chef_lt_12_5?
|
59
|
+
Gem::Version.new(Chef::VERSION) < Gem::Version.new('12.5')
|
60
|
+
end
|
61
|
+
|
62
|
+
def chef_gte_12_5?
|
63
|
+
Gem::Version.new(Chef::VERSION) >= Gem::Version.new('12.5')
|
64
|
+
end
|
65
|
+
|
66
|
+
def chef_gte_12_7?
|
67
|
+
Gem::Version.new(Chef::VERSION) >= Gem::Version.new('12.7')
|
68
|
+
end
|
69
|
+
|
70
|
+
def chef_gte_13?
|
71
|
+
Gem::Version.new(Chef::VERSION) >= Gem::Version.new('13')
|
72
|
+
end
|
73
|
+
|
74
|
+
def chef_lt_13?
|
75
|
+
Gem::Version.new(Chef::VERSION) < Gem::Version.new('13')
|
76
|
+
end
|
77
|
+
|
78
|
+
def sample_data(file_name)
|
79
|
+
file = File.expand_path(File.dirname("spec/assets/*"))+"/#{file_name}"
|
80
|
+
File.read(file)
|
81
|
+
end
|
82
|
+
|
83
|
+
RSpec.configure do |config|
|
84
|
+
config.run_all_when_everything_filtered = true
|
85
|
+
config.filter_run :focus => true
|
86
|
+
config.filter_run_excluding :windows_only => true unless windows?
|
87
|
+
config.filter_run_excluding :windows_2012_only => true unless windows2012?
|
88
|
+
config.filter_run_excluding :chef_gte_12_5_only => true unless chef_gte_12_5?
|
89
|
+
config.filter_run_excluding :chef_gte_12_7_only => true unless chef_gte_12_7?
|
90
|
+
config.filter_run_excluding :chef_gte_13_only => true unless chef_gte_13?
|
91
|
+
config.filter_run_excluding :chef_lt_12_5_only => true unless chef_lt_12_5?
|
92
|
+
config.filter_run_excluding :chef_lt_13_only => true unless chef_lt_13?
|
93
|
+
end
|