feat: OS Release Module (#417)
* feat: OS Release Module * docs: clearer description * chore: update shortdesc to match new description --------- Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com>
This commit is contained in:
parent
5cd482353b
commit
1e6588c5dc
5 changed files with 69 additions and 0 deletions
|
|
@ -11,6 +11,7 @@
|
|||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/justfiles/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/rpm-ostree/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/dnf/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/os-release/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/kargs/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/initramfs/module.yml",
|
||||
"https://raw.githubusercontent.com/blue-build/modules/main/modules/script/module.yml",
|
||||
|
|
|
|||
13
modules/os-release/README.md
Normal file
13
modules/os-release/README.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# **`os-release` Module**
|
||||
|
||||
The `os-release` module offers a way to modify and set values in the [`/etc/os-release`](https://www.freedesktop.org/software/systemd/man/latest/os-release.html) file in your image. This file contains metadata about the running Linux operating system and is read by various programs.
|
||||
|
||||
## Example
|
||||
|
||||
```yaml
|
||||
type: os-release
|
||||
properties:
|
||||
ID: blue_build
|
||||
NAME: BlueBuild
|
||||
PRETTY_NAME: BlueBuild Image
|
||||
```
|
||||
8
modules/os-release/module.yml
Normal file
8
modules/os-release/module.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
name: os-release
|
||||
shortdesc: The `os-release` module offers a way to modify and set values in the /etc/os-release file in your image.
|
||||
example: |
|
||||
type: os-release
|
||||
properties:
|
||||
ID: blue_build
|
||||
NAME: BlueBuild
|
||||
PRETTY_NAME: BlueBuild Image
|
||||
34
modules/os-release/os-release.nu
Normal file
34
modules/os-release/os-release.nu
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env nu
|
||||
|
||||
def main [config: string]: nothing -> nothing {
|
||||
let config = $config
|
||||
| from json
|
||||
| default {} properties
|
||||
mut os_release = open --raw /etc/os-release
|
||||
| lines
|
||||
| parse '{key}={value}'
|
||||
| transpose --ignore-titles -dr
|
||||
| str trim -c '"'
|
||||
| str trim -c "'"
|
||||
print $'(ansi green)Original release:(ansi reset)'
|
||||
print $os_release
|
||||
|
||||
for $item in ($config.properties | transpose key value) {
|
||||
if $item.key in $os_release {
|
||||
print $'(ansi green)Updating (ansi cyan)($item.key)(ansi green) with value (ansi yellow)($item.value)(ansi reset)'
|
||||
$os_release = $os_release | update $item.key $item.value
|
||||
} else {
|
||||
print $'(ansi green)Adding (ansi cyan)($item.key)(ansi green) with value (ansi yellow)($item.value)(ansi reset)'
|
||||
$os_release = $os_release | insert $item.key $item.value
|
||||
}
|
||||
}
|
||||
|
||||
print $'(ansi green)New release:(ansi reset)'
|
||||
print $os_release
|
||||
|
||||
$os_release
|
||||
| transpose key value
|
||||
| each { $'($in.key)="($in.value)"' }
|
||||
| str join "\n"
|
||||
| save --force /etc/os-release
|
||||
}
|
||||
13
modules/os-release/os-release.tsp
Normal file
13
modules/os-release/os-release.tsp
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import "@typespec/json-schema";
|
||||
using TypeSpec.JsonSchema;
|
||||
|
||||
@jsonSchema("/modules/os-release-latest.json")
|
||||
model OsReleaseLatest {
|
||||
...OsReleaseV1;
|
||||
}
|
||||
|
||||
@jsonSchema("/modules/os-release-v1.json")
|
||||
model OsReleaseV1 {
|
||||
/** The properties of the `/etc/os-release` file to set. */
|
||||
properties: Record<string>;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue