Module: PSWindows::Exec
- Includes:
- Beaker::CommandFactory, Beaker::DSL::Wrappers
- Included in:
- Host
- Defined in:
- lib/beaker/host/pswindows/exec.rb
Constant Summary collapse
- ABS_CMD =
'c:\\\\windows\\\\system32\\\\cmd.exe'
- CMD =
'cmd.exe'
Instance Attribute Summary
Attributes included from Beaker::CommandFactory
Instance Method Summary collapse
-
#add_env_var(key, val) ⇒ Object
Add the provided key/val to the current ssh environment.
-
#clear_env_var(key) ⇒ Object
Delete the environment variable from the current ssh environment.
-
#delete_env_var(key, val) ⇒ Object
Delete the provided key/val from the current ssh environment.
- #echo(msg, abs = true) ⇒ Object
-
#get_env_var(key, clean = false) ⇒ Object
Return the value of a specific env var.
- #get_ip ⇒ Object
-
#mkdir_p(dir) ⇒ Boolean
Create the provided directory structure on the host.
-
#mv(orig, dest, rm = true) ⇒ Object
Move the origin to destination.
- #path ⇒ Object
-
#ping(target, attempts = 5) ⇒ Boolean
Attempt to ping the provided target hostname.
- #reboot ⇒ Object
- #rm_rf(path) ⇒ Object
- #touch(file, abs = true) ⇒ Object
Methods included from Beaker::DSL::Wrappers
#cfacter, #facter, #hiera, #powershell, #puppet
Methods included from Beaker::CommandFactory
Instance Method Details
#add_env_var(key, val) ⇒ Object
Add the provided key/val to the current ssh environment
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/beaker/host/pswindows/exec.rb', line 79 def add_env_var key, val key = key.to_s.upcase #see if the key/value pair already exists cur_val = subbed_val = get_env_var(key, true) subbed_val = cur_val.gsub(/#{Regexp.escape(val.gsub(/'|"/, ''))}/, '') if cur_val.empty? exec(powershell("[Environment]::SetEnvironmentVariable('#{key}', '#{val}', 'Machine')")) self.close #refresh the state elsif subbed_val == cur_val #not present, add it exec(powershell("[Environment]::SetEnvironmentVariable('#{key}', '#{val};#{cur_val}', 'Machine')")) self.close #refresh the state end end |
#clear_env_var(key) ⇒ Object
Delete the environment variable from the current ssh environment
135 136 137 138 139 140 141 |
# File 'lib/beaker/host/pswindows/exec.rb', line 135 def clear_env_var key key = key.to_s.upcase exec(powershell("[Environment]::SetEnvironmentVariable('#{key}', $null, 'Machine')")) exec(powershell("[Environment]::SetEnvironmentVariable('#{key}', $null, 'User')")) exec(powershell("[Environment]::SetEnvironmentVariable('#{key}', $null, 'Process')")) self.close #refresh the state end |
#delete_env_var(key, val) ⇒ Object
Delete the provided key/val from the current ssh environment
98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/beaker/host/pswindows/exec.rb', line 98 def delete_env_var key, val key = key.to_s.upcase #get the current value of the key cur_val = subbed_val = get_env_var(key, true) subbed_val = (cur_val.split(';') - [val.gsub(/'|"/, '')]).join(';') if subbed_val != cur_val #remove the current key value self.clear_env_var(key) #set to the truncated value self.add_env_var(key, subbed_val) end end |
#echo(msg, abs = true) ⇒ Object
12 13 14 |
# File 'lib/beaker/host/pswindows/exec.rb', line 12 def echo(msg, abs=true) (abs ? ABS_CMD : CMD) + " /c echo #{msg}" end |
#get_env_var(key, clean = false) ⇒ Object
Return the value of a specific env var
116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/beaker/host/pswindows/exec.rb', line 116 def get_env_var key, clean = false self.close #refresh the state key = key.to_s.upcase val = exec(Beaker::Command.new("set #{key}"), :accept_all_exit_codes => true).stdout.chomp if val.empty? return '' else if clean val.gsub(/#{key}=/,'') else val end end end |
#get_ip ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/beaker/host/pswindows/exec.rb', line 37 def get_ip ip = execute("for /f \"tokens=14\" %f in ('ipconfig ^| find \"IP Address\"') do @echo %f", :accept_all_exit_codes => true).strip if ip == '' ip = execute("for /f \"tokens=14\" %f in ('ipconfig ^| find \"IPv4 Address\"') do @echo %f", :accept_all_exit_codes => true).strip end if ip == '' ip = execute("for /f \"tokens=14\" %f in ('ipconfig ^| find \"IPv6 Address\"') do @echo %f").strip end ip end |
#mkdir_p(dir) ⇒ Boolean
Create the provided directory structure on the host
67 68 69 70 71 72 |
# File 'lib/beaker/host/pswindows/exec.rb', line 67 def mkdir_p dir windows_dirstring = dir.gsub('/','\\') cmd = "if not exist #{windows_dirstring} (md #{windows_dirstring})" result = exec(Beaker::Command.new(cmd), :acceptable_exit_codes => [0, 1]) result.exit_code == 0 end |
#mv(orig, dest, rm = true) ⇒ Object
Move the origin to destination. The destination is removed prior to moving.
28 29 30 31 |
# File 'lib/beaker/host/pswindows/exec.rb', line 28 def mv(orig, dest, rm=true) rm_rf dest unless !rm execute("move /y #{orig} #{dest}") end |
#path ⇒ Object
33 34 35 |
# File 'lib/beaker/host/pswindows/exec.rb', line 33 def path 'c:/windows/system32;c:/windows' end |
#ping(target, attempts = 5) ⇒ Boolean
Attempt to ping the provided target hostname
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/beaker/host/pswindows/exec.rb', line 52 def ping target, attempts=5 try = 0 while try < attempts do result = exec(Beaker::Command.new("ping -n 1 #{target}"), :accept_all_exit_codes => true) if result.exit_code == 0 return true end try+=1 end result.exit_code == 0 end |
#reboot ⇒ Object
5 6 7 |
# File 'lib/beaker/host/pswindows/exec.rb', line 5 def reboot exec(Beaker::Command.new("shutdown /r /t 0"), :expect_connection_failure => true) end |
#rm_rf(path) ⇒ Object
20 21 22 |
# File 'lib/beaker/host/pswindows/exec.rb', line 20 def rm_rf path execute("del /s /q #{path}") end |