Änderungen von Dokument Eigene Autoconf-Rolle erstellen

Zuletzt geändert von Tom Altenbrunn am 2023/03/17 08:03

Von Version 25.1
bearbeitet von Jonas Mayer
am 2023/03/15 21:53
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 50.2
bearbeitet von Tom Altenbrunn
am 2023/03/16 16:40
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Dokument-Autor
... ... @@ -1,1 +1,1 @@
1 -XWiki.jonasmayer@sbede
1 +XWiki.TomAltenbrunn@sbede
Inhalt
... ... @@ -1,5 +1,6 @@
1 1  {{toc depth="3"/}}
2 2  
3 +----
3 3  
4 4  = (% style="font-size:22px" %)__**Allgemeines**__(%%) =
5 5  
... ... @@ -27,7 +27,7 @@
27 27  
28 28  Für die Funktionalität der Autoconf-Rolle ist es also nötig, PowerShell-Skripte am Server abzuspeichern, die die Instruktionen an den Arbeitsstationen ausführen. Für diese Skripte sind folgende Dateinamen zulässig:
29 29  
30 -* **main.ps1** - Skript wird in allen Phasen ausgeführt, die innerhalb der Beschreibungsdatei {{box}}meta/logodidact.yml{{/box}} festgelegt sind
31 +* **main.ps1** - Skript wird in allen Phasen ausgeführt, die innerhalb der Beschreibungsdatei (% data-xwiki-non-generated-content="java.util.List" %){{box}}meta/logodidact.yml{{/box}}(%%) festgelegt sind. Eine solche Datei folgt dem Prinzip „in jeder Phase soll genau das gleiche stattfinden“.
31 31  * (% style="color:#8e44ad" %)**setup.ps1**(%%) - Skript wird ausschließlich in der SETUP-Phase während des Deployments ausgeführt. In der Setup-Phase ist der Client noch veränderlich und besitzt noch keine Schutzfunktion, selbst wenn der Schutz aktiviert ist.
32 32  * (% style="color:#8e44ad" %)**custom.ps1**(%%) - Skript wird ausschließlich in der CUSTOM-Phase ausgeführt. Dies geschieht sowohl 1x während des Deployments als auch später nach jedem Hochfahren des PCs 1x im Hintergrund.
33 33  * (% style="color:#8e44ad" %)**user.ps1**(%%) - Skript wird ausschließlich in der USER-Phase ausgeführt. Diese Phase wird nicht direkt während des Deployments durchlaufen, sondern erst später während der Benutzeranmeldung an betriebsbereiten PCs.
... ... @@ -40,8 +40,13 @@
40 40  )))
41 41  
42 42  
44 + Nachfolgend sind grafisch die diversen Deploy-Phasen dargestellt, welche ein Client während des Imaging-Vorgangs durchläuft. Die Abarbeitung von AutoConf-Rollen beginnen ab der Phase "**Re-Setup**"
45 +
46 + [[image:image-20230316155817-1.png]]
47 +
43 43  ----
44 44  
50 +
45 45  = (% style="font-size:22px" %)__**Beispielaufbau einer logodidact.yml**__(%%) =
46 46  
47 47  
... ... @@ -72,9 +72,9 @@
72 72  **Tipp:** Der Variablentyp ENUM aus dem Beispiel ergibt ein Dropdown-Menü, in dem man aus den vordefinierten 4 Werten (none / compact / detailed / verbose) auswählen kann.
73 73  )))
74 74  
75 -
76 76  ----
77 77  
83 +
78 78  = (% style="font-size:22px" %)__**Neue AutoConf-Rollen nach Fertigstellung freigeben**__(%%) =
79 79  
80 80  
... ... @@ -91,12 +91,12 @@
91 91  [[image:attach:autoconf.png||data-xwiki-image-style-border="true" class="img-thumbnail"]]
92 92  
93 93  
94 -
95 95  ----
96 96  
97 -= (% style="font-size:22px" %)__**Weiteres, funktionsfertiges Beispiel: Rolle „WLAN Profil mit PSK anlegen“**__(%%) =
98 98  
103 += (% style="font-size:22px" %)__**Funktionsfertiges Beispiel: Rolle „WLAN Profil mit PSK anlegen“**__(%%) =
99 99  
105 +
100 100  Zum besseren Verständnis wird nachfolgend eine feste Autoconf-Rolle zur Konfiguration eines WLAN-Profils (SSID inkl. PSK) an Clients näher beleuchtet.
101 101  
102 102  (% class="box" %)
... ... @@ -116,8 +116,8 @@
116 116   license: SBE
117 117  (% style="color:#8e44ad" %) uuid:(%%) 52318636-c4f5-11ea-baf9-0bff00c66ff4
118 118   visible: true
119 - priority: 0
120 - applyAlways: false
125 +(% style="color:#19177c" %) priority:(%%) 0
126 + apply_always: false
121 121  (% style="color:#f1c40f" %) tags:(%%)
122 122   - CUSTOM
123 123  (% style="color:#e74c3c" %) vars:(%%)
... ... @@ -138,6 +138,8 @@
138 138  
139 139  (% style="color:#8e44ad" %)**uuid**(%%) = ID der Autoconf-Regel. Muss einmalig sein. Bei einer eigenen Autoconf-Rolle sollte der Wert am besten neu generiert werden. [[https:~~/~~/www.uuidgenerator.net/>>url:https://www.uuidgenerator.net/]]
140 140  
147 +(% style="color:#19177c" %)**priority**(% style="color:#2980b9" %)** **(%%)= Legt die Verarbeitungsreihenfolge der Autoconf-Rolle gegenüber weiteren Rollen fest, die in derselben Phase ausgeführt werden. Bei gleicher Priorität findet die Abarbeitung alphabetisch statt. Eine höhere Priorität führt zu früherer Ausführung.
148 +
141 141  (% style="color:#f1c40f" %)**tags**(%%) = beschreibt, in welchen Phasen die Autoconf-Regel ausgeführt wird.
142 142  
143 143  (% style="color:#e74c3c" %)**vars**(%%)** **= definiert mögliche Variablen, die den Skripten übergeben werden
... ... @@ -147,19 +147,24 @@
147 147  * type = bestimmt den Typ der Variable. Gültige Typen sind: STRING, PASSWORD, BOOLEAN, ENUM, ARRAY, INTEGER
148 148  * example = Zeigt einen grau eingefärbten Beispieltext innerhalb der definierten Variable an, ohne dass dieser als Wert festgelegt ist (Hilfsmittel für Anwender).
149 149  
150 -(% style="color:#2980b9" %) **systems **(%%)= Legt fest, welche Betriebssystem-Typen durch die Autoconf-Rolle unterstützt werden. Gültige Systeme sind WINDOWS / LINUX. Die Rolle aus dem Beispiel unterstützt beide Betriebssysteme gleichzeitig.
158 +(% style="color:#2980b9" %)**systems **(%%)= Legt fest, welche Betriebssystem-Typen durch die Autoconf-Rolle unterstützt werden. Gültige Systeme sind WINDOWS / LINUX. Die Rolle aus dem Beispiel unterstützt beide Betriebssysteme gleichzeitig.
151 151  
152 -
153 153  ----
154 154  
162 +
155 155  == (% style="font-size:16px" %)**Inhalt des PowerShell-Skripts main.ps1, das die Variablen entgegennimmt**(%%) ==
156 156  
165 +Im Unterverzeichnis {{box}} win/ {{/box}} oder {{box}} lin/ {{/box}} der Autoconf-Rolle können sich wie erläutert unterschiedliche PowerShell-Skripte zur Ausführung in den verschiedenen Phasen befinden.
166 +In dieser Rolle liegt konkret das allgemeingültige Skript {{box}}main.ps1{{/box}} vor, welches die Variablen als Parameter ##$ssid## und ##$psk## intern verwendet.
157 157  
158 -Im Verzeichnis {{box}} win/ {{/box}} können sich unterschiedliche Powershell-Skripte befinden. In dieser Rolle liegt das allgemeingültige Skript main.ps1 vor, welches die Variablen als Parameter ##$ssid## und ##$psk## intern verwendet.
159 159  
160 -{{code width="50%"}}
169 +(% style="color:#19177c" %)**Windows Variante**
170 +
171 +{{code language="text" width="50%"}}
161 161  root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/win/main.ps1
173 +{{/code}}
162 162  
175 +{{code width="50%" language="powershell"}}
163 163  Param
164 164  (
165 165   [parameter(Mandatory=$false)]
... ... @@ -212,22 +212,159 @@
212 212  
213 213   Remove-Item -Path $file -Force
214 214  }
228 +{{/code}}
215 215  
216 -Param() = hier werden die übergebenen Parameter von meta/logodidact.yml zu lokalen Variablen.
230 +
231 +(% style="color:#19177c" %)**Linux Variante (Network Manager)**
232 +
233 +{{code language="text" width="50%"}}
234 +root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/lin/main.ps1
217 217  {{/code}}
218 218  
219 -==== ====
237 +{{code language="powershell" width="50%"}}
238 +Param
239 +(
240 + [parameter(Mandatory=$false)]
241 + [String]
242 + $ssid,
243 + [parameter(Mandatory=$false)]
244 + [String]
245 + $psk
246 +)
220 220  
221 -==== ====
248 +if ($ssid -ne '' -and $psk -ne '') {
249 + if (Get-Command "nmcli" -ErrorAction SilentlyContinue) {
250 + # Check if kernel modules are up
251 + nmcli dev wifi rescan
252 + if ($LASTEXITCODE -ne 0) {
253 + Start-Sleep -Seconds 30
254 + }
255 +
256 + # Check again
257 + nmcli dev wifi rescan
258 + if ($LASTEXITCODE -ne 0) {
259 + Write-Verbose "Skipping role. There might be no WiFi device installed."
260 + exit 0
261 + }
262 +
263 + $config = "/etc/NetworkManager/system-connections/$ssid"
222 222  
223 -==== ====
265 + if (Test-Path -Path $config) {
266 + Write-Verbose "Removing '$config'"
267 + Remove-Item -Path $config -Recurse -Force
268 + }
224 224  
225 -==== ====
270 + Write-Verbose "Connecting to '$ssid'"
271 +
272 + nmcli device wifi connect """$ssid""" password """$psk"""
273 +
274 + if ($LASTEXITCODE -eq 0) {
275 + Start-Sleep -Seconds 5
276 + nmcli con up """$ssid"""
226 226  
227 -==== ====
278 + if ($LASTEXITCODE -ne 0) {
279 + Write-Verbose "Error: Credentials wrong?"
228 228  
229 -==== ====
281 + if (Test-Path -Path $config) {
282 + Write-Verbose "Removing '$config'"
283 + Remove-Item -Path $config -Recurse -Force
284 + }
285 + }
286 + }
287 +
288 + Write-Verbose "Exiting with code: $LASTEXITCODE"
289 + exit $LASTEXITCODE
290 + }
230 230  
231 -==== ====
292 + Write-Verbose "No suitable implementation found"
293 + exit 1
294 +}
295 +{{/code}}
232 232  
233 -==== ====
297 +----
298 +
299 +
300 +
301 += (% style="font-size:22px" %)__**Weiteres Beispiel: eigene AutoConf-Rolle zur „Deaktivierung der Suchhervorhebung in Windows“**__(%%) =
302 +
303 +Im nachfolgenden Beispiel wird eine einfache Rolle zur Deaktivierung der Suchvorhebung in Windows deklariert.
304 +\\[[image:image-20230316103442-2.png||height="530" width="1142" class="img-thumbnail"]]
305 +
306 +----
307 +
308 +== (% style="font-size:16px" %)**Aufbau der logodidact.yml**(%%) ==
309 +
310 +Neben den allgemeinen Informationen über die Autoren (authors), Unternehmen (company), einer Beschreibung (description), dem Anzeigenamen (display_name) im LD Control Center, usw, beginnt im Abschnitt {{code language="bash"}}vars{{/code}} die eigentliche Definition der Variable
311 +"**{{code}}disableSearchHighlight{{/code}}**".
312 +
313 +
314 +{{code language="yaml" width="45%"}}
315 +#logodidact.yml
316 +
317 +ld_info:
318 + authors:
319 + - Tom Altenbrunn
320 + - Olav Krapp
321 + - Marcel Petersen
322 + - Kerim Ekin
323 + company: SBE network solutions GmbH
324 + description: | #Beschreibung
325 + Die Suchhervorhebung in der Windows Suchleiste wird deaktiviert
326 + display_name: Windows Suchhervorhebung #Anzeigename im LD Control Center
327 + license: SBE
328 + uuid: fec4ff30-b2a6-407f-a6b3-0a621cd7eaf7 #einmalige UUID
329 + vars: #Deklaration der Variablen
330 + disableSearchHighlight: #Name der Variable
331 + display_name: Suchhervorhebung im Suchfeld deaktivieren #Anzeigename im LD Control Center
332 + optional: true #Auswahl optional
333 + type: BOOLEAN #Variablentyp Boolean = True/False
334 + value: false #Standardwert false
335 + visible: true #Sichtbarkeit der Variable im LD Control Center
336 + priority: 0 #Abarbeitungspriorität
337 + apply_always: false
338 + tags:
339 + - CUSTOM #Ausführungszeitpunkt während der/den Phase(n)
340 + systems:
341 + - WINDOWS #Betriebssystem
342 +{{/code}}
343 +
344 +----
345 +
346 +== (% style="font-size:16px" %)**Aufbau der main.ps1**(%%) ==
347 +
348 +Danach erfolgt die Erstellung des ausführbaren Codes per Powershell. Im ersten Abschnitt (% style="color:#008000" %)**Param** (%%)werden die in der im vorigen Abschnitt definierten Variablen {{code}}vars{{/code}} aus der logodidact.yml aufgeführt und definiert. Bei der Variable "**{{code}}disableSearchHighlight{{/code}}**" handelt es sich um ein Boolean (True/False). Die Bedingung "**[parameter(Mandatory=$false)]**" setzt das Vorhandensein der Variable während dem Ablauf des Skriptes nicht als zwingend notwendig voraus, sodass bei einem darauffolgenden Verarbeitungsfehler o.ä. die Abarbeitung weiter erfolgt.
349 +
350 +{{code language="powershell"}}
351 +#main.ps1
352 +
353 +Param
354 +(
355 + [parameter(Mandatory=$false)] #Variable zwingend erforderlich?
356 + [bool] #Variablentyp
357 + $disableSearchHighlight #Name der def. Variable aus logodidact.yml
358 +)
359 +
360 +$SystemVersion=[System.Environment]::OSVersion.Version #Hole Windows Systemversion
361 +
362 +#Beginn des eigentlichen Codes
363 +if ($SystemVersion.Major -eq 10 -and $SystemVersion.Build -ge 19044) {
364 + $val = [int]!$disableSearchHighlight
365 + Write-Verbose "Setting EnableDynamicContentInWSB to '$val'"
366 + [Microsoft.Win32.Registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search","EnableDynamicContentInWSB",$val,[Microsoft.Win32.RegistryValueKind]::DWord)
367 +} else {
368 + Write-Host "Feature ist erst ab dem Release 21H2 verfügbar."
369 +}
370 +{{/code}}
371 +
372 +----
373 +
374 +== (% style="font-size:16px" %)**Einlesen der AutoConf-Rollen am Server**(%%) ==
375 +
376 +[[image:image-20230316110425-1.png||height="124" width="1186" class="img-thumbnail"]]
377 +
378 +
379 +== (% style="font-size:16px" %)**Ansicht im LD Control Center**(%%) ==
380 +
381 +[[image:image-20230316110525-2.png||class="img-thumbnail"]]
382 +
383 +
image-20230316094933-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +43.3 KB
Inhalt
image-20230316095106-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +47.8 KB
Inhalt
image-20230316102252-3.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +166.3 KB
Inhalt
image-20230316102302-4.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +166.3 KB
Inhalt
image-20230316103224-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +166.3 KB
Inhalt
image-20230316103442-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +201.2 KB
Inhalt
image-20230316110425-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +166.3 KB
Inhalt
image-20230316110525-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.TomAltenbrunn@sbede
Größe
... ... @@ -1,0 +1,1 @@
1 +48.3 KB
Inhalt