|
1 | 1 | # I dislike this but 2008 doesn't support the Win32_PowerPlan WMI provider
|
| 2 | +- name: set fact for getting plan info |
| 3 | + ansible.builtin.set_fact: |
| 4 | + plan_info_script: | |
| 5 | + $infoPattern = 'Power Scheme GUID: (?<guid>[a-fA-F0-9]{8}-(?>[a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})\s+\((?<name>.*)\)(?<active>\s+\*)?' |
| 6 | +
|
| 7 | + powercfg.exe /list | ForEach-Object { |
| 8 | + if ($_ -match $infoPattern) { |
| 9 | + [PSCustomObject]@{ |
| 10 | + name = $Matches['name'] |
| 11 | + guid = $Matches['guid'] |
| 12 | + active = (-not [string]::IsNullOrEmpty($Matches['active'])) |
| 13 | + } |
| 14 | + } |
| 15 | + } | Sort-Object -Property active -Descending |
| 16 | +
|
2 | 17 | - name: get current plan details
|
3 |
| - ansible.windows.win_shell: | |
4 |
| - $plan_info = powercfg.exe /list |
5 |
| - ($plan_info | Select-String -Pattern '\(([\w\s]*)\) \*$').Matches.Groups[1].Value |
6 |
| - ($plan_info | Select-String -Pattern '\(([\w\s]*)\)$').Matches.Groups[1].Value |
| 18 | + ansible.windows.win_powershell: |
| 19 | + script: '{{ plan_info_script }}' |
| 20 | + changed_when: False |
7 | 21 | register: plan_info
|
8 | 22 |
|
9 | 23 | - set_fact:
|
10 |
| - original_plan: '{{ plan_info.stdout_lines[0] }}' |
11 |
| - name: '{{ plan_info.stdout_lines[1] }}' |
| 24 | + original_plan: '{{ plan_info.output[0] }}' |
| 25 | + new_plan: '{{ plan_info.output[1] }}' |
12 | 26 |
|
13 | 27 | - block:
|
14 | 28 | #Test that plan detects change is needed, but doesn't actually apply change
|
15 | 29 | - name: set power plan (check mode)
|
16 | 30 | win_power_plan:
|
17 |
| - name: "{{ name }}" |
| 31 | + name: "{{ new_plan.name }}" |
18 | 32 | register: set_plan_check
|
19 | 33 | check_mode: yes
|
20 | 34 |
|
21 | 35 | - name: get result of set power plan (check mode)
|
22 |
| - ansible.windows.win_shell: (powercfg.exe /list | Select-String -Pattern '\({{ name }}\)').Line |
| 36 | + ansible.windows.win_powershell: |
| 37 | + script: '{{ plan_info_script }}' |
23 | 38 | register: set_plan_check_result
|
24 | 39 | changed_when: False
|
25 | 40 |
|
|
28 | 43 | assert:
|
29 | 44 | that:
|
30 | 45 | - set_plan_check is changed
|
31 |
| - - not set_plan_check_result.stdout_lines[0].endswith('*') |
| 46 | + - set_plan_check_result.output[0].guid == original_plan.guid |
32 | 47 |
|
33 | 48 | #Test that setting plan and that change is applied
|
34 | 49 | - name: set power plan
|
35 | 50 | win_power_plan:
|
36 |
| - name: "{{ name }}" |
| 51 | + name: "{{ new_plan.name }}" |
37 | 52 | register: set_plan
|
38 | 53 |
|
39 | 54 | - name: get result of set power plan
|
40 |
| - ansible.windows.win_shell: (powercfg.exe /list | Select-String -Pattern '\({{ name }}\)').Line |
| 55 | + ansible.windows.win_powershell: |
| 56 | + script: '{{ plan_info_script }}' |
41 | 57 | register: set_plan_result
|
42 | 58 | changed_when: False
|
43 | 59 |
|
44 | 60 | - name: assert setting plan
|
45 | 61 | assert:
|
46 | 62 | that:
|
47 | 63 | - set_plan is changed
|
48 |
| - - set_plan_result.stdout_lines[0].endswith('*') |
| 64 | + - set_plan_result.output[0].guid == new_plan.guid |
49 | 65 |
|
50 | 66 | #Test that plan doesn't apply change if it is already set
|
51 | 67 | - name: set power plan (idempotent)
|
52 | 68 | win_power_plan:
|
53 |
| - name: "{{ name }}" |
| 69 | + name: "{{ new_plan.name }}" |
54 | 70 | register: set_plan_idempotent
|
55 | 71 |
|
56 | 72 | - name: assert setting plan (idempotent)
|
|
61 | 77 | always:
|
62 | 78 | - name: always change back plan to the original when done testing
|
63 | 79 | win_power_plan:
|
64 |
| - name: '{{ original_plan }}' |
65 |
| - |
66 |
| -- name: get current plan guid details |
67 |
| - ansible.windows.win_shell: | |
68 |
| - $plan_info = powercfg.exe /list |
69 |
| - ($plan_info | Select-String -Pattern '([a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+).+\*').Matches.Groups[1].Value |
70 |
| - ($plan_info | Select-String -Pattern '([a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+\-[a-z0-9]+)').Matches.Groups[1].Value |
71 |
| - register: guid_plan_info |
72 |
| - |
73 |
| -- set_fact: |
74 |
| - original_plan: '{{ guid_plan_info.stdout_lines[0] }}' |
75 |
| - name: '{{ guid_plan_info.stdout_lines[1] }}' |
| 80 | + name: '{{ original_plan.name }}' |
76 | 81 |
|
77 | 82 | - block:
|
78 | 83 | #Test that plan detects change is needed, but doesn't actually apply change
|
79 | 84 | - name: set power plan guid (check mode)
|
80 | 85 | win_power_plan:
|
81 |
| - guid: "{{ name }}" |
| 86 | + guid: "{{ new_plan.guid }}" |
82 | 87 | register: set_plan_check_guid
|
83 | 88 | check_mode: yes
|
84 | 89 |
|
85 | 90 | - name: get result of set power plan guid (check mode)
|
86 |
| - ansible.windows.win_shell: (powercfg.exe /list | Select-String -Pattern '{{ name }}').Line |
| 91 | + ansible.windows.win_powershell: |
| 92 | + script: '{{ plan_info_script }}' |
87 | 93 | register: set_plan_check_result_guid
|
88 | 94 | changed_when: False
|
89 | 95 |
|
|
92 | 98 | assert:
|
93 | 99 | that:
|
94 | 100 | - set_plan_check_guid is changed
|
95 |
| - - not set_plan_check_result_guid.stdout_lines[0].endswith('*') |
| 101 | + - set_plan_check_result_guid.output[0].guid == original_plan.guid |
96 | 102 |
|
97 | 103 | #Test that setting plan and that change is applied
|
98 | 104 | - name: set power plan guid
|
99 | 105 | win_power_plan:
|
100 |
| - guid: "{{ name }}" |
| 106 | + guid: "{{ new_plan.guid }}" |
101 | 107 | register: set_plan_guid
|
102 | 108 |
|
103 | 109 | - name: get result of set power plan guid
|
104 |
| - ansible.windows.win_shell: (powercfg.exe /list | Select-String -Pattern '{{ name }}').Line |
| 110 | + ansible.windows.win_powershell: |
| 111 | + script: '{{ plan_info_script }}' |
105 | 112 | register: set_plan_result_guid
|
106 | 113 | changed_when: False
|
107 | 114 |
|
108 | 115 | - name: assert setting plan guid
|
109 | 116 | assert:
|
110 | 117 | that:
|
111 | 118 | - set_plan_guid is changed
|
112 |
| - - set_plan_result_guid.stdout_lines[0].endswith('*') |
| 119 | + - set_plan_result_guid.output[0].guid == new_plan.guid |
113 | 120 |
|
114 | 121 | #Test that plan doesn't apply change if it is already set
|
115 | 122 | - name: set power plan guid (idempotent)
|
116 | 123 | win_power_plan:
|
117 |
| - guid: "{{ name }}" |
| 124 | + guid: "{{ new_plan.guid }}" |
118 | 125 | register: set_plan_idempotent_guid
|
119 | 126 |
|
120 | 127 | - name: assert setting plan guid (idempotent)
|
|
125 | 132 | always:
|
126 | 133 | - name: always change back plan to the original when done testing guid
|
127 | 134 | win_power_plan:
|
128 |
| - guid: '{{ original_plan }}' |
| 135 | + guid: '{{ original_plan.guid }}' |
0 commit comments