add dockerfile for cli and add to drone

This commit is contained in:
viktorbarzin 2021-03-16 00:05:05 +00:00
parent 70d306d0d2
commit 899805ddac
4 changed files with 41 additions and 8 deletions

View file

@ -29,6 +29,28 @@ steps:
- "git commit -m 'Drone CI deploy commit [CI SKIP]' || echo 'No changes'" - "git commit -m 'Drone CI deploy commit [CI SKIP]' || echo 'No changes'"
- "GIT_SSH_COMMAND='ssh -i ./secrets/deploy_key -o IdentitiesOnly=yes' git push origin master" - "GIT_SSH_COMMAND='ssh -i ./secrets/deploy_key -o IdentitiesOnly=yes' git push origin master"
---
kind: pipeline
type: kubernetes
name: build-cli
steps:
- name: Build image
image: plugins/docker
settings:
username: "viktorbarzin"
password:
from_secret: dockerhub_password
repo: viktorbarzin/infra
dockerfile: cli/Dockerfile
context: cli
auto_tag: true
---
kind: secret
name: dockerhub_password
data: 9Gn6YOfsRTMHP3oxQ06d6JsRaZSbUyEYZ256Iiem2ROPy8THs2gsDyL5cgC5gsOt
--- ---
kind: pipeline kind: pipeline
type: kubernetes type: kubernetes

8
cli/Dockerfile Normal file
View file

@ -0,0 +1,8 @@
FROM golang:alpine
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o main .
RUN adduser -S -D -H -h /app appuser
USER appuser
CMD ["./main"]

View file

@ -23,7 +23,7 @@ var (
type GitFS struct { type GitFS struct {
repo *git.Repository repo *git.Repository
fs billy.Filesystem fs *billy.Filesystem
auth *http.BasicAuth auth *http.BasicAuth
} }
@ -34,17 +34,19 @@ func NewGitFS(repoURL string) (*GitFS, error) {
Password: gitToken, Password: gitToken,
} }
storer := memory.NewStorage() storer := memory.NewStorage()
fs := memfs.New()
r, err := git.Clone(storer, g.fs, &git.CloneOptions{ r, err := git.Clone(storer, fs, &git.CloneOptions{
URL: repository, URL: repository,
Auth: auth, Auth: auth,
}) })
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to clone repo from repo url '%s'", repoURL) return nil, errors.Wrapf(err, "failed to clone repo from repo url '%s'", repoURL)
} }
return &GitFS{repo: r, fs: memfs.New(), auth: auth}, nil return &GitFS{repo: r, fs: &fs, auth: auth}, nil
} }
func (g *GitFS) Push() error { func (g *GitFS) Push() error {
glog.Infof("Attemping to push with auth: %+v", g.auth)
return g.repo.Push(&git.PushOptions{Auth: g.auth}) return g.repo.Push(&git.PushOptions{Auth: g.auth})
} }

View file

@ -15,8 +15,8 @@ const (
vpnUseCaseFlagName = "vpn" vpnUseCaseFlagName = "vpn"
vpnClientNameFlagName = "vpn-client-name" vpnClientNameFlagName = "vpn-client-name"
vpnClientPubKeyFlagName = "vpn-pub-key" vpnClientPubKeyFlagName = "vpn-pub-key"
vpnClientsConfFileRelative = "modules/kubernetes/wireguard/extra/clients.conf" vpnClientsConfFileRelative = "/modules/kubernetes/wireguard/extra/clients.conf"
vpnLastIPConfFileRelative = "modules/kubernetes/wireguard/extra/last_ip.txt" vpnLastIPConfFileRelative = "/modules/kubernetes/wireguard/extra/last_ip.txt"
) )
// addVPNClient inserts new client config // addVPNClient inserts new client config
@ -29,7 +29,7 @@ func addVPNClient(gitFs *GitFS, clientName, publicKey, clientsConfPath, ip strin
} }
contents := "[Peer]\n# friendly_name = " + clientName + "\nPublicKey = " + publicKey + "\nAllowedIPs = " + ip + "\n\n" contents := "[Peer]\n# friendly_name = " + clientName + "\nPublicKey = " + publicKey + "\nAllowedIPs = " + ip + "\n\n"
glog.Infof("adding the following config: \n%s", contents) glog.Infof("adding the following config: \n%s", contents)
f, err := gitFs.fs.OpenFile(clientsConfPath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644) f, err := (*gitFs.fs).OpenFile(clientsConfPath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil { if err != nil {
return errors.Wrapf(err, "failed to open client configs file to add new vpn client") return errors.Wrapf(err, "failed to open client configs file to add new vpn client")
} }
@ -63,7 +63,8 @@ func incrementIP(origIP, cidr string) (string, error) {
// getAndUpdateIP Reads `fileName`, tries to get the ip, increments it, tries to write it back and returns the new address // getAndUpdateIP Reads `fileName`, tries to get the ip, increments it, tries to write it back and returns the new address
func getAndUpdateIP(gitFs *GitFS, fileName string) (string, error) { func getAndUpdateIP(gitFs *GitFS, fileName string) (string, error) {
bytes, err := ioutil.ReadFile(fileName) f, err := (*gitFs.fs).Open(fileName)
bytes, err := ioutil.ReadAll(f)
if err != nil { if err != nil {
return "", errors.Wrapf(err, "filed to read file %s", fileName) return "", errors.Wrapf(err, "filed to read file %s", fileName)
} }
@ -87,7 +88,7 @@ func getAndUpdateIP(gitFs *GitFS, fileName string) (string, error) {
// Write back updated ip // Write back updated ip
fileContents := fmt.Sprintf("# DO NOT MANUALLY EDIT THIS LINE. Last IP: %s", incrementedIP+"/"+cidr) fileContents := fmt.Sprintf("# DO NOT MANUALLY EDIT THIS LINE. Last IP: %s", incrementedIP+"/"+cidr)
f, err := gitFs.fs.OpenFile(fileName, os.O_WRONLY|os.O_CREATE, 0644) f, err = (*gitFs.fs).OpenFile(fileName, os.O_WRONLY|os.O_CREATE, 0644)
if err != nil { if err != nil {
return "", errors.Wrapf(err, "failed to open file %s for writing", fileName) return "", errors.Wrapf(err, "failed to open file %s for writing", fileName)
} }