119 lines
2.6 KiB
Plaintext
119 lines
2.6 KiB
Plaintext
import "golang"
|
|
import "net"
|
|
import "os"
|
|
|
|
# ssh_keygen creates an ssh key pair in the user's home directory if the private
|
|
# key doesn't exist.
|
|
# TODO: add more parameters such as key size and type in the future
|
|
class ssh_keygen($user) {
|
|
panic($user == "") # panic if $user is empty
|
|
$p = os.expand_home("~${user}/") # eg: ~james/
|
|
exec "ssh-keygen-${user}" {
|
|
cmd => "/usr/bin/ssh-keygen",
|
|
args => [
|
|
"-t", "rsa", # type
|
|
"-f", "${p}.ssh/id_rsa", # private key file
|
|
"-N", "", # empty password
|
|
],
|
|
creates => "${p}.ssh/id_rsa",
|
|
user => $user,
|
|
|
|
Before => File["${p}.ssh/id_rsa"],
|
|
}
|
|
# This also serves as a "handle" so that other resources can depend on
|
|
# this file getting created before they run.
|
|
file "${p}.ssh/" {
|
|
state => "exists",
|
|
mode => "u=rwx,go=",
|
|
owner => $user,
|
|
}
|
|
file "${p}.ssh/id_rsa" {
|
|
mode => "u=rw,go=",
|
|
owner => $user,
|
|
}
|
|
}
|
|
|
|
# network_rename takes the device with the $mac address and renames it to $dev.
|
|
class network_rename($mac, $dev) {
|
|
#panic(not net.is_mac("${mac}"))
|
|
|
|
file "/etc/systemd/network/70-rename-${dev}.link" {
|
|
state => "exists",
|
|
content => "
|
|
# Pick the device name based on the mac address.
|
|
[Match]
|
|
MACAddress=${mac}
|
|
|
|
[Link]
|
|
Name=${dev}
|
|
",
|
|
mode => "u=rw,go=r",
|
|
owner => "root",
|
|
group => "root",
|
|
|
|
Notify => Exec["udevadm trigger"],
|
|
}
|
|
|
|
# TODO: we only want to run this once, but it's harmless for now
|
|
exec "udevadm trigger" {
|
|
cmd => "/usr/sbin/udevadm trigger --type=all --action=add --prioritized-subsystem=net --settle",
|
|
}
|
|
}
|
|
|
|
# network_manager_static sets up a static ip address with network manager.
|
|
# NOTE: To see what it's using run: `nmcli -f name,uuid,filename connection`.
|
|
class network_manager_static($st) {
|
|
$uuid = $st->uuid || "" # 01234567-89ab-cdef-0123-456789abcdef
|
|
$mac = $st->mac || ""
|
|
$dev = $st->dev || "eth0"
|
|
$cidr = $st->cidr # cidr
|
|
$ip = net.cidr_to_ip($cidr)
|
|
$prefix = net.cidr_to_prefix($cidr)
|
|
$router = $st->router || ""
|
|
$dns = $st->dns || "8.8.8.8"
|
|
|
|
$tmpl =
|
|
"
|
|
[connection]
|
|
id=${dev}
|
|
{{ if .uuid -}}
|
|
uuid=${uuid}
|
|
{{ end -}}
|
|
type=ethernet
|
|
interface-name=${dev}
|
|
autoconnect=true
|
|
|
|
[ipv4]
|
|
{{ if .router -}}
|
|
address1=${ip}/${prefix},${router}
|
|
{{ else -}}
|
|
address1=${ip}/${prefix}
|
|
{{ end -}}
|
|
dns=${dns};
|
|
dns-search=
|
|
may-fail=false
|
|
method=manual
|
|
|
|
[ethernet]
|
|
{{ if .mac -}}
|
|
mac-address=${mac}
|
|
{{ end -}}
|
|
"
|
|
|
|
$args = struct{
|
|
uuid => $uuid,
|
|
}
|
|
|
|
file "/etc/NetworkManager/system-connections/${dev}.nmconnection" {
|
|
state => "exists",
|
|
content => golang.template($tmpl, $args),
|
|
mode => "u=rw,go=",
|
|
owner => "root",
|
|
|
|
Notify => Svc["NetworkManager"],
|
|
}
|
|
|
|
svc "NetworkManager" {
|
|
}
|
|
}
|