userdata

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2023 License: MIT Imports: 13 Imported by: 0

README

Go User Data

The library for cloud-init User Data

Getting Started

Use go get to install the library

go get github.com/Aton-Kish/gouserdata

Import in your application

import (
	userdata "github.com/Aton-Kish/gouserdata"
)

Usage

This example shows how to make mime multipart user data.

package main

import (
	"bytes"
	"fmt"
	"log"
	"os"

	userdata "github.com/Aton-Kish/gouserdata"
)

func main() {
	m, err := userdata.NewMultipart()
	if err != nil {
		log.Fatal(err)
	}

	cfg, err := os.ReadFile("cloud-config.yaml")
	if err != nil {
		log.Fatal(err)
	}
	m.Append(userdata.NewPart(userdata.MediaTypeCloudConfig, cfg))

	j2, err := os.ReadFile("script.j2")
	if err != nil {
		log.Fatal(err)
	}
	m.Append(userdata.NewPart(userdata.MediaTypeJinja2, j2))

	hook, err := os.ReadFile("boothook.sh")
	if err != nil {
		log.Fatal(err)
	}
	m.Append(userdata.NewPart(userdata.MediaTypeCloudBoothook, hook))

	buf := new(bytes.Buffer)
	if err := m.Render(buf); err != nil {
		log.Fatal(err)
	}

	fmt.Println(buf.String())
}

Development

doc
: install godoc
go install golang.org/x/tools/cmd/godoc@latest

: run godoc server
godoc -http ":6060"

: uninstall godoc
rm $(go env GOPATH)/bin/godoc
test
go test ./...

License

This library is licensed under the MIT License, see LICENSE.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidBoundary = errors.New("invalid boundary")
)

Functions

func SetLogger added in v0.3.0

func SetLogger(l Logger)

Types

type Error added in v0.3.0

type Error struct {
	Op  string
	Err error
}

func (*Error) Error added in v0.3.0

func (e *Error) Error() string

func (*Error) Unwrap added in v0.3.0

func (e *Error) Unwrap() error
type Header interface {
	Add(key, value string)
	Set(key, value string)
	Get(key string) string
	Values(key string) []string
	Del(key string)
	Renderer
}

func NewHeader

func NewHeader() Header

type Logger added in v0.3.0

type Logger interface {
	Print(v ...any)
	Printf(format string, v ...any)
	Println(v ...any)

	Fatal(v ...any)
	Fatalf(format string, v ...any)
	Fatalln(v ...any)

	Panic(v ...any)
	Panicf(format string, v ...any)
	Panicln(v ...any)
}

type MediaType

type MediaType string
const (
	MediaTypeCloudBoothook           MediaType = "text/cloud-boothook"
	MediaTypeCloudConfig             MediaType = "text/cloud-config"
	MediaTypeCloudConfigArchive      MediaType = "text/cloud-config-archive"
	MediaTypeCloudConfigJsonp        MediaType = "text/cloud-config-jsonp"
	MediaTypeJinja2                  MediaType = "text/jinja2"
	MediaTypePartHandler             MediaType = "text/part-handler"
	MediaTypeXIncludeOnceUrl         MediaType = "text/x-include-once-url"
	MediaTypeXIncludeUrl             MediaType = "text/x-include-url"
	MediaTypeXShellscript            MediaType = "text/x-shellscript"
	MediaTypeXShellscriptPerBoot     MediaType = "text/x-shellscript-per-boot"
	MediaTypeXShellscriptPerInstance MediaType = "text/x-shellscript-per-instance"
	MediaTypeXShellscriptPerOnce     MediaType = "text/x-shellscript-per-once"
)

type Multipart

type Multipart interface {
	Append(part Part)
	Renderer
}

func NewMultipart

func NewMultipart() (Multipart, error)

func NewMultipartWithBoundary added in v0.3.0

func NewMultipartWithBoundary(boundary string) (Multipart, error)

type Part

type Part interface {
	Renderer
}

func NewPart

func NewPart(mediaType MediaType, body []byte) Part

type Renderer added in v0.3.0

type Renderer interface {
	Render(w io.Writer) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL