-
Notifications
You must be signed in to change notification settings - Fork 339
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9a1faac
commit 96aeb04
Showing
5 changed files
with
100 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# modify time: 202310181524, you can modify here to trigger Docker Build action | ||
# modify time: 202310181824, you can modify here to trigger Docker Build action | ||
|
||
FROM python:3.10-bullseye AS buildstage | ||
LABEL maintainer="Websoft9<[email protected]>" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# modify time: 202310181524, you can modify here to trigger Docker Build action | ||
# modify time: 202310181830, you can modify here to trigger Docker Build action | ||
# step1: Build entrypoint execute program init_portainer by golang | ||
|
||
FROM golang:latest AS builder | ||
|
@@ -7,16 +7,16 @@ COPY init_portainer.go / | |
RUN go build -o init_portainer /init_portainer.go | ||
RUN chmod +x /init_portainer | ||
|
||
#COPY environment.go / | ||
#RUN go build -o environment /environment.go | ||
#RUN chmod +x /environment | ||
COPY environment.go / | ||
RUN go build -o environment /environment.go | ||
RUN chmod +x /environment | ||
|
||
# step2: Copy build go program to portainer | ||
# Dockerfile refer to: https://github.com/portainer/portainer/blob/develop/build/linux/Dockerfile | ||
FROM portainer/portainer-ce:2.19.0 | ||
LABEL maintainer="websoft9<[email protected]>" | ||
LABEL version="2.19.0" | ||
COPY --from=builder /init_portainer / | ||
#COPY --from=builder /environment / | ||
COPY --from=builder /environment / | ||
|
||
ENTRYPOINT ["/init_portainer"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,97 @@ | ||
#### go code below | ||
|
||
package main | ||
|
||
#1 wait and get credential | ||
#2 portainer api login | ||
#3 add local if not exist | ||
``` | ||
name: local | ||
url: /var/run/docker.sock | ||
``` | ||
import ( | ||
"bytes" | ||
"encoding/json" | ||
"fmt" | ||
"io/ioutil" | ||
"net/http" | ||
"os" | ||
"time" | ||
) | ||
|
||
const ( | ||
AdminUser = "admin" | ||
EndpointURL = "http://localhost:9000/api/endpoints" | ||
CredentialLoc = "/data/credential" | ||
) | ||
|
||
type Endpoint struct { | ||
Name string `json:"Name"` | ||
URL string `json:"URL"` | ||
} | ||
|
||
func main() { | ||
var password string | ||
|
||
for { | ||
if _, err := os.Stat(CredentialLoc); os.IsNotExist(err) { | ||
fmt.Printf("%s does not exist, waiting for 3 seconds...\n", CredentialLoc) | ||
time.Sleep(3 * time.Second) | ||
} else { | ||
fmt.Printf("%s exists, proceeding...\n", CredentialLoc) | ||
data, err := ioutil.ReadFile(CredentialLoc) | ||
if err != nil { | ||
fmt.Println("Failed to read file:", err) | ||
return | ||
} | ||
password = string(data) | ||
break | ||
} | ||
} | ||
|
||
client := &http.Client{} | ||
req, err := http.NewRequest("GET", EndpointURL, nil) | ||
req.SetBasicAuth(AdminUser, password) | ||
resp, err := client.Do(req) | ||
if err != nil { | ||
fmt.Println("Failed to make request:", err) | ||
return | ||
} | ||
defer resp.Body.Close() | ||
|
||
curl -X POST -H "Content-Type: application/json" -d '{"username":"admin", "Password":"'$new_password'"}' http://$portainer_ip:9000/api/users/admin/init | ||
curl "http://$appmanage_ip:5000/AppUpdateUser?user_name=admin&password=$new_password" | ||
body, err := ioutil.ReadAll(resp.Body) | ||
if err != nil { | ||
fmt.Println("Failed to read response:", err) | ||
return | ||
} | ||
|
||
var endpoints []Endpoint | ||
err = json.Unmarshal(body, &endpoints) | ||
if err != nil { | ||
fmt.Println("Failed to parse JSON:", err) | ||
return | ||
} | ||
|
||
for _, endpoint := range endpoints { | ||
if endpoint.Name == "local" && endpoint.URL == "/var/run/docker.sock" { | ||
fmt.Println("Endpoint exists, exiting...") | ||
return | ||
} | ||
} | ||
|
||
#### other place | ||
fmt.Println("Endpoint does not exist, creating...") | ||
endpoint := Endpoint{ | ||
Name: "local", | ||
URL: "/var/run/docker.sock", | ||
} | ||
data, err := json.Marshal(endpoint) | ||
if err != nil { | ||
fmt.Println("Failed to encode JSON:", err) | ||
return | ||
} | ||
|
||
- add it to Dockerfile | ||
- docker compose health check | ||
req, err = http.NewRequest("POST", EndpointURL, bytes.NewBuffer(data)) | ||
req.SetBasicAuth(AdminUser, password) | ||
resp, err = client.Do(req) | ||
if err != nil { | ||
fmt.Println("Failed to make request:", err) | ||
return | ||
} | ||
|
||
``` | ||
healthcheck: | ||
test: ["CMD", "/healthcheck"] | ||
interval: 1m30s | ||
timeout: 10s | ||
retries: 3 | ||
``` | ||
if resp.StatusCode != http.StatusCreated { | ||
fmt.Println("Failed to create endpoint:", resp.Status) | ||
} else { | ||
fmt.Println("Endpoint created successfully") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters