|
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