Änderungen von Dokument Eigene Autoconf-Rolle erstellen

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

Von Version 17.9
bearbeitet von Tom Altenbrunn
am 2023/03/15 14:03
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 29.1
bearbeitet von Jonas Mayer
am 2023/03/16 07:58
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Dokument-Autor
... ... @@ -1,1 +1,1 @@
1 -XWiki.TomAltenbrunn@sbede
1 +XWiki.jonasmayer@sbede
Inhalt
... ... @@ -1,6 +1,8 @@
1 1  {{toc depth="3"/}}
2 2  
3 +----
3 3  
5 +
4 4  = (% style="font-size:22px" %)__**Allgemeines**__(%%) =
5 5  
6 6  
... ... @@ -17,9 +17,8 @@
17 17  * bis Puppet-Version **1.4.x** : {{code language="bash"}}/var/lib/ld-autoconf/custom/{{/code}}
18 18  * ab Puppet-Version **1.5.x **:  {{code language="bash" layout="LINENUMBERS"}}/data/ld/autoconf/custom/{{/code}}
19 19  
22 +Der Aufbau einer Autoconf-Rolle unterliegt einer vordefinierten Struktur, bestehend aus einer Beschreibungsdatei {{box}}meta/logodidact.yml{{/box}}, welche die Informationen zu Namen, Beschreibung, Ersteller, Variablen, usw. definiert, sowie zugehörige Skript-Dateien (PowerShell). Diese Skript-Dateien müssen - abhängig vom vorgesehen Ziel-Betriebssystem - in einem Unterordner {{box}} win/ {{/box}} (//Windows//) oder {{box}} lin/ {{/box}} (//Linux//) abgespeichert sein. Zusätzlich besteht auch die Möglichkeit, in einem weiteren Unterordner {{box}} files/ {{/box}} beliebige Dateien in der Autoconf-Rolle mitzuliefern, wie zum Beispiel Bilder, Videos, etc.
20 20  
21 -Der Aufbau einer Autoconf-Rolle unterliegt einer vordefinierten Struktur, bestehend aus einer Beschreibungsdatei {{box}}meta/logodidact.yml{{/box}}, welche die Informationen zu Namen, Beschreibung, Ersteller, Variablen, usw. definiert, sowie zugehörige Skript-Dateien (PowerShell). Diese Skript-Dateien müssen - abhängig vom vorgesehen Ziel-Betriebssystem - in einem Unterordner {{box}} win/ {{/box}} (//Windows//) oder {{box}} lin/ {{/box}} (//Linux//) abgespeichert sein.  Zusätzlich besteht auch die Möglichkeit, in einem weiteren Unterordner {{box}} files/ {{/box}} beliebige Dateien in der Autoconf-Rolle mitzuliefern, wie zum Beispiel Bilder, Videos, etc.
22 -
23 23  __Der strukturelle Aufbau eines AutoConf-Verzeichnisses grafisch dargestellt:__
24 24  
25 25  [[image:attach:autoconf-struktur.PNG||data-xwiki-image-style-border="true" data-xwiki-image-style-text-wrap="true" height="348" width="642" class="img-thumbnail"]]
... ... @@ -32,7 +32,7 @@
32 32  * (% 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.
33 33  * (% 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.
34 34  * (% 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.
35 -* (% style="color:#8e44ad" %)**audit.ps1**(%%) - Skript wird ausschließlich in der AUDIT-Phase ausgeführt. Das bedeutet, erst dann, wenn man an einem Client in den Audit-Modus zur Imagebearbeitung wechselt.
36 +* (% style="color:#8e44ad" %)**audit.ps1**(%%) - Skript wird ausschließlich in der AUDIT-Phase ausgeführt. Das bedeutet erst dann, wenn man an einem Client in den Audit-Modus zur Imagebearbeitung wechselt.
36 36  * **collect.ps1** - Sonderfall. Dieses Skript wird ausgeführt, wenn durch einen Anwender aktiv die Phase COLLECT zum Einsammeln von Einstellungen am Client aufgerufen wird.
37 37  
38 38  (% class="box warningmessage" %)
... ... @@ -40,15 +40,15 @@
40 40  (% style="font-size:12px" %)**Hinweis: **Skripte, die durch ihren Dateinamen auf einzelne Phasen eingeschränkt sind ((% style="color:#8e44ad; font-size:12px" %)lila eingefärbt(% style="font-size:12px" %)), dürfen sich inhaltlich zueinander unterscheiden. Dadurch kann eine Autoconf-Rolle sehr flexibel gestaltet werden und in den verschiedenen Phasen des Deployments unterschiedliche Aktionen ausführen.
41 41  )))
42 42  
43 -
44 44  ----
45 45  
46 +
46 46  = (% style="font-size:22px" %)__**Beispielaufbau einer logodidact.yml**__(%%) =
47 47  
48 48  
49 49  Eine Autoconf-Beispielvorlage liegt serverseitig im Unterordner {{box}}/data/ld/autoconf/custom/example/{{/box}} abgespeichert. Darin wird die Verwendung verschiedener Variablentypen aufgezeigt, die als Parameter an die Skript-Dateien weitergegeben werden können. Die Verwendung solcher Variablen innerhalb einer Autoconf-Rolle ist optional, je nach Zweck jedoch häufig sinnvoll.
50 50  
51 -== (% style="font-size:16px" %)**Beispiel zur Deklaration einer Autoconf Variable in logodidact.yml:**(%%) ==
52 +== (% style="font-size:16px" %)**Beispiel zur Deklaration einer Autoconf Variable in logodidact.yml**(%%) ==
52 52  
53 53  (% class="box" %)
54 54  (((
... ... @@ -73,9 +73,9 @@
73 73  **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.
74 74  )))
75 75  
76 -
77 77  ----
78 78  
79 +
79 79  = (% style="font-size:22px" %)__**Neue AutoConf-Rollen nach Fertigstellung freigeben**__(%%) =
80 80  
81 81  
... ... @@ -92,13 +92,13 @@
92 92  [[image:attach:autoconf.png||data-xwiki-image-style-border="true" class="img-thumbnail"]]
93 93  
94 94  
95 -
96 96  ----
97 97  
98 +
98 98  = (% style="font-size:22px" %)__**Weiteres, funktionsfertiges Beispiel: Rolle „WLAN Profil mit PSK anlegen“**__(%%) =
99 99  
100 100  
101 -Zum besseren Verständnis wird nachfolgend eine mitgelieferte Autoconf-Rolle zur Konfiguration eines WLAN-Profils (SSID inkl. PSK) an Clients näher beleuchtet.
102 +Zum besseren Verständnis wird nachfolgend eine feste Autoconf-Rolle zur Konfiguration eines WLAN-Profils (SSID inkl. PSK) an Clients näher beleuchtet.
102 102  
103 103  (% class="box" %)
104 104  (((
... ... @@ -105,6 +105,8 @@
105 105  root@ctrl-g1:~~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/meta/logodidact.yml
106 106  )))
107 107  
109 +== (% style="font-size:16px" %)**Struktureller Aufbau der logodidact.yml**(%%) ==
110 +
108 108  (% class="box" %)
109 109  (((
110 110  ld_info:
... ... @@ -111,13 +111,13 @@
111 111   authors:
112 112   - Marcel Petersen
113 113   company: SBE network solutions GmbH
114 -(% style="color:#1abc9c" %)display_name:(%%) WLAN Profil mit PSK anlegen
117 +(% style="color:#1abc9c" %) display_name:(%%) WLAN Profil mit PSK anlegen
115 115   license: SBE
116 -(% style="color:#8e44ad" %) uuid:(%%) 52318636-c4f5-11ea-baf9-0bff00c66ff4
119 +(% style="color:#8e44ad" %) uuid:(%%) 52318636-c4f5-11ea-baf9-0bff00c66ff4
117 117   visible: true
118 - priority: 0
121 +(% style="color:#19177c" %) priority:(%%) 0
119 119   applyAlways: false
120 -(% style="color:#f1c40f" %) tags:(%%)
123 +(% style="color:#f1c40f" %) tags:(%%)
121 121   - CUSTOM
122 122  (% style="color:#e74c3c" %) vars:(%%)
123 123   ssid:
... ... @@ -128,35 +128,44 @@
128 128   display_name: Passwort
129 129   optional: false
130 130   type: PASSWORD
131 -(% style="color:#2980b9" %)systems:(%%)
134 +(% style="color:#2980b9" %) systems:(%%)
132 132   - WINDOWS
133 133   - LINUX
134 134  )))
135 135  
136 -(% style="color:#1abc9c" %)display_name(%%) = Anzeigename der Autoconf-Rolle im LD Control Center
139 +(% style="color:#1abc9c" %)**display_name**(%%) = Anzeigename der Autoconf-Rolle im LD Control Center
137 137  
138 -(% 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/]]
141 +(% 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/]]
139 139  
140 -(% style="color:#f1c40f" %)tags(%%) = beschreibt, in welchen Phasen die Autoconf-Regel ausgeführt wird.
143 +(% 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.
141 141  
142 -(% style="color:#e74c3c" %)vars(%%) = definiert mögliche Variablen, die den Skripten übergeben werden
145 +(% style="color:#f1c40f" %)**tags**(%%) = beschreibt, in welchen Phasen die Autoconf-Regel ausgeführt wird.
143 143  
147 +(% style="color:#e74c3c" %)**vars**(%%)** **= definiert mögliche Variablen, die den Skripten übergeben werden
148 +
144 144  * display_name = Name der konfigurierbaren Variable im Control Center
145 145  * optional = bestimmt, ob die Variable zwingend mit einem Wert belegt werden muss
146 146  * type = bestimmt den Typ der Variable. Gültige Typen sind: STRING, PASSWORD, BOOLEAN, ENUM, ARRAY, INTEGER
147 147  * example = Zeigt einen grau eingefärbten Beispieltext innerhalb der definierten Variable an, ohne dass dieser als Wert festgelegt ist (Hilfsmittel für Anwender).
148 148  
149 -(% 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.
154 +(% 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.
150 150  
151 151  ----
152 152  
153 -===== **Aufbau der main.ps1** =====
154 154  
155 -Im Verzeichnis {{box}} win/ {{/box}} nnen sich unterschiedliche Powershell-Skripte befinden. In dieser Rolle liegt das allgemeingültige Skript main.ps1 vor.
159 +== (% style="font-size:16px" %)**Inhalt des PowerShell-Skripts main.ps1, das die Variablen entgegennimmt**(%%) ==
156 156  
157 -{{code width="50%"}}
161 +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.
162 +In dieser Rolle liegt konkret das allgemeingültige Skript {{box}}main.ps1{{/box}} vor, welches die Variablen als Parameter ##$ssid## und ##$psk## intern verwendet.
163 +
164 +
165 +(% style="color:#19177c" %)**Windows Variante**
166 +
167 +{{code language="text" width="50%"}}
158 158  root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/win/main.ps1
169 +{{/code}}
159 159  
171 +{{code width="50%" language="powershell"}}
160 160  Param
161 161  (
162 162   [parameter(Mandatory=$false)]
... ... @@ -209,22 +209,71 @@
209 209  
210 210   Remove-Item -Path $file -Force
211 211  }
212 -
213 -Param() = hier werden die übergebenen Parameter von meta/logodidact.yml zu lokalen Variablen.
214 214  {{/code}}
215 215  
216 -==== ====
217 217  
218 -==== ====
227 +(% style="color:#19177c" %)**Linux Variante (Network Manager)**
219 219  
220 -==== ====
229 +{{code language="text" width="50%"}}
230 +root@ctrl-g1:~ # cat /usr/lib/ld-autoconf/logodidact/roles/ld_wlan_psk/lin/main.ps1
231 +{{/code}}
221 221  
222 -==== ====
233 +{{code language="powershell" width="50%"}}
234 +Param
235 +(
236 + [parameter(Mandatory=$false)]
237 + [String]
238 + $ssid,
239 + [parameter(Mandatory=$false)]
240 + [String]
241 + $psk
242 +)
223 223  
224 -==== ====
244 +if ($ssid -ne '' -and $psk -ne '') {
245 + if (Get-Command "nmcli" -ErrorAction SilentlyContinue) {
246 + # Check if kernel modules are up
247 + nmcli dev wifi rescan
248 + if ($LASTEXITCODE -ne 0) {
249 + Start-Sleep -Seconds 30
250 + }
251 +
252 + # Check again
253 + nmcli dev wifi rescan
254 + if ($LASTEXITCODE -ne 0) {
255 + Write-Verbose "Skipping role. There might be no WiFi device installed."
256 + exit 0
257 + }
258 +
259 + $config = "/etc/NetworkManager/system-connections/$ssid"
225 225  
226 -==== ====
261 + if (Test-Path -Path $config) {
262 + Write-Verbose "Removing '$config'"
263 + Remove-Item -Path $config -Recurse -Force
264 + }
227 227  
228 -==== ====
266 + Write-Verbose "Connecting to '$ssid'"
267 +
268 + nmcli device wifi connect """$ssid""" password """$psk"""
269 +
270 + if ($LASTEXITCODE -eq 0) {
271 + Start-Sleep -Seconds 5
272 + nmcli con up """$ssid"""
229 229  
230 -==== ====
274 + if ($LASTEXITCODE -ne 0) {
275 + Write-Verbose "Error: Credentials wrong?"
276 +
277 + if (Test-Path -Path $config) {
278 + Write-Verbose "Removing '$config'"
279 + Remove-Item -Path $config -Recurse -Force
280 + }
281 + }
282 + }
283 +
284 + Write-Verbose "Exiting with code: $LASTEXITCODE"
285 + exit $LASTEXITCODE
286 + }
287 +
288 + Write-Verbose "No suitable implementation found"
289 + exit 1
290 +}
291 +{{/code}}