mirror of
https://github.com/Smaug123/PulumiConfig
synced 2025-10-08 18:18:40 +00:00
Use Pulumi to provision and Nix to configure (#12)
This commit is contained in:
@@ -16,8 +16,6 @@ type Configuration =
|
||||
PrivateKey : PrivateKey
|
||||
/// Public key corresponding to the PrivateKey (default has ".pub" appended)
|
||||
PublicKeyOverride : PublicKey option
|
||||
/// Email address to which Let's Encrypt is to send emails
|
||||
AcmeEmail : EmailAddress
|
||||
/// Umbrella domain name for all services
|
||||
Domain : DomainName
|
||||
/// All cnames to be created in DNS
|
||||
@@ -28,19 +26,12 @@ type Configuration =
|
||||
/// world where `Www` were implemented as a subdomain
|
||||
/// and not a cname
|
||||
Subdomains : Set<WellKnownSubdomain>
|
||||
/// Linux user to create on the server
|
||||
/// Email address to use with ACME registration
|
||||
AcmeEmail : EmailAddress
|
||||
/// Username for the user account to be created on the server
|
||||
RemoteUsername : Username
|
||||
GiteaConfig : GiteaConfig option
|
||||
RadicaleConfig : RadicaleConfig option
|
||||
}
|
||||
|
||||
member this.NginxConfig =
|
||||
{
|
||||
Domain = this.Domain
|
||||
WebSubdomain = WellKnownCname.Www
|
||||
AcmeEmail = this.AcmeEmail
|
||||
}
|
||||
|
||||
member this.PublicKey =
|
||||
match this.PublicKeyOverride with
|
||||
| Some k -> k
|
||||
@@ -48,62 +39,6 @@ type Configuration =
|
||||
let (PrivateKey k) = this.PrivateKey
|
||||
Path.Combine (k.Directory.FullName, k.Name + ".pub") |> FileInfo |> PublicKey
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
[<Struct>]
|
||||
type SerialisedGiteaConfig =
|
||||
{
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
ServerPassword : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
AdminPassword : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
AdminUsername : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
AdminEmailAddress : string
|
||||
}
|
||||
|
||||
static member Make (config : GiteaConfig) =
|
||||
{
|
||||
SerialisedGiteaConfig.ServerPassword = config.ServerPassword |> BashString.unsafeOriginal
|
||||
AdminPassword = config.AdminPassword |> BashString.unsafeOriginal
|
||||
AdminUsername = config.AdminUsername |> BashString.unsafeOriginal
|
||||
AdminEmailAddress = config.AdminEmailAddress |> BashString.unsafeOriginal
|
||||
}
|
||||
|
||||
static member Deserialise (config : SerialisedGiteaConfig) : GiteaConfig =
|
||||
{
|
||||
GiteaConfig.ServerPassword = config.ServerPassword |> BashString.make
|
||||
AdminPassword = config.AdminPassword |> BashString.make
|
||||
AdminUsername = config.AdminUsername |> BashString.make
|
||||
AdminEmailAddress = config.AdminEmailAddress |> BashString.make
|
||||
}
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
[<Struct>]
|
||||
type SerialisedRadicaleConfig =
|
||||
{
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
User : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
Password : string
|
||||
[<JsonProperty(Required = Required.DisallowNull)>]
|
||||
GitEmail : string
|
||||
}
|
||||
|
||||
static member Make (config : RadicaleConfig) =
|
||||
{
|
||||
SerialisedRadicaleConfig.User = config.User
|
||||
Password = config.Password
|
||||
GitEmail = config.GitEmail |> Option.toObj
|
||||
}
|
||||
|
||||
static member Deserialise (c : SerialisedRadicaleConfig) : RadicaleConfig =
|
||||
{
|
||||
RadicaleConfig.User = c.User
|
||||
Password = c.Password
|
||||
GitEmail = c.GitEmail |> Option.ofObj
|
||||
}
|
||||
|
||||
[<NoComparison>]
|
||||
[<RequireQualifiedAccess>]
|
||||
type SerialisedConfig =
|
||||
@@ -117,17 +52,15 @@ type SerialisedConfig =
|
||||
[<JsonProperty(Required = Required.DisallowNull)>]
|
||||
PublicKey : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
AcmeEmail : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
Domain : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
Cnames : Dictionary<string, string>
|
||||
[<JsonProperty(Required = Required.DisallowNull)>]
|
||||
Subdomains : string[]
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
AcmeEmail : string
|
||||
[<JsonProperty(Required = Required.Always)>]
|
||||
RemoteUsername : string
|
||||
GiteaConfig : Nullable<SerialisedGiteaConfig>
|
||||
RadicaleConfig : Nullable<SerialisedRadicaleConfig>
|
||||
}
|
||||
|
||||
static member Make (config : Configuration) =
|
||||
@@ -138,7 +71,6 @@ type SerialisedConfig =
|
||||
match config.PublicKeyOverride with
|
||||
| None -> null
|
||||
| Some (PublicKey p) -> p.FullName
|
||||
AcmeEmail = config.AcmeEmail.ToString ()
|
||||
Domain = config.Domain.ToString ()
|
||||
Cnames =
|
||||
config.Cnames
|
||||
@@ -148,12 +80,8 @@ type SerialisedConfig =
|
||||
)
|
||||
|> Dictionary
|
||||
Subdomains = config.Subdomains |> Seq.map (fun sub -> sub.ToString ()) |> Seq.toArray
|
||||
AcmeEmail = config.AcmeEmail.ToString ()
|
||||
RemoteUsername = config.RemoteUsername.ToString ()
|
||||
GiteaConfig = config.GiteaConfig |> Option.map SerialisedGiteaConfig.Make |> Option.toNullable
|
||||
RadicaleConfig =
|
||||
config.RadicaleConfig
|
||||
|> Option.map SerialisedRadicaleConfig.Make
|
||||
|> Option.toNullable
|
||||
}
|
||||
|
||||
static member Deserialise (config : SerialisedConfig) : Configuration =
|
||||
@@ -164,7 +92,6 @@ type SerialisedConfig =
|
||||
match config.PublicKey with
|
||||
| null -> None
|
||||
| key -> FileInfo key |> PublicKey |> Some
|
||||
AcmeEmail = config.AcmeEmail |> EmailAddress
|
||||
Domain = config.Domain |> DomainName
|
||||
Cnames =
|
||||
config.Cnames
|
||||
@@ -176,15 +103,8 @@ type SerialisedConfig =
|
||||
match config.Subdomains with
|
||||
| null -> Set.empty
|
||||
| subdomains -> subdomains |> Seq.map WellKnownSubdomain.Parse |> Set.ofSeq
|
||||
AcmeEmail = config.AcmeEmail |> EmailAddress
|
||||
RemoteUsername = config.RemoteUsername |> Username
|
||||
GiteaConfig =
|
||||
config.GiteaConfig
|
||||
|> Option.ofNullable
|
||||
|> Option.map SerialisedGiteaConfig.Deserialise
|
||||
RadicaleConfig =
|
||||
config.RadicaleConfig
|
||||
|> Option.ofNullable
|
||||
|> Option.map SerialisedRadicaleConfig.Deserialise
|
||||
}
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
|
Reference in New Issue
Block a user