Skip to content

Commit 0c30a56

Browse files
committed
aws az runner
1 parent 8eab0ef commit 0c30a56

File tree

4 files changed

+47
-48
lines changed

4 files changed

+47
-48
lines changed

iterative/azure/provider.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
2222
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID")
2323

2424
username := "ubuntu"
25-
//username := d.Get("ssh_user").(string)
26-
2725
customData := d.Get("startup_script").(string)
2826
region := getRegion(d.Get("region").(string))
2927
instanceType := getInstanceType(d.Get("instance_type").(string), d.Get("instance_gpu").(string))

iterative/resource_machine.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ func machineSchema() *map[string]*schema.Schema {
7474
Type: schema.TypeString,
7575
Computed: true,
7676
},
77-
"ssh_public": &schema.Schema{
78-
Type: schema.TypeString,
79-
ForceNew: true,
80-
Optional: true,
81-
Default: "",
82-
},
8377
"ssh_private": &schema.Schema{
8478
Type: schema.TypeString,
8579
ForceNew: true,
@@ -88,9 +82,7 @@ func machineSchema() *map[string]*schema.Schema {
8882
},
8983
"ssh_name": &schema.Schema{
9084
Type: schema.TypeString,
91-
ForceNew: true,
92-
Optional: true,
93-
Default: "ubuntu",
85+
Computed: true,
9486
},
9587
"startup_script": &schema.Schema{
9688
Type: schema.TypeString,
@@ -112,17 +104,34 @@ func resourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
112104

113105
utils.SetId(d)
114106

115-
script64 := base64.StdEncoding.EncodeToString([]byte(d.Get("startup_script").(string)))
116-
d.Set("startup_script", script64)
107+
if len(d.Get("ssh_private").(string)) == 0 {
108+
private, err := utils.PrivatePEM()
109+
if err != nil {
110+
diags = append(resourceMachineDelete(ctx, d, m), diag.Diagnostic{
111+
Severity: diag.Error,
112+
Summary: fmt.Sprintf("Failed creating the private PEM: %v", err),
113+
})
117114

118-
keyPublic := d.Get("ssh_public").(string)
119-
if len(keyPublic) == 0 {
120-
public, private, _ := utils.SSHKeyPair()
115+
return diags
116+
}
121117

122-
d.Set("ssh_public", public)
123118
d.Set("ssh_private", private)
124119
}
125120

121+
public, err := utils.PublicFromPrivatePEM(d.Get("ssh_private").(string))
122+
if err != nil {
123+
diags = append(resourceMachineDelete(ctx, d, m), diag.Diagnostic{
124+
Severity: diag.Error,
125+
Summary: fmt.Sprintf("Failed creating the public key: %v", err),
126+
})
127+
128+
return diags
129+
}
130+
d.Set("ssh_public", public)
131+
132+
script64 := base64.StdEncoding.EncodeToString([]byte(d.Get("startup_script").(string)))
133+
d.Set("startup_script", script64)
134+
126135
cloud := d.Get("cloud").(string)
127136
if cloud == "aws" {
128137
err := aws.ResourceMachineCreate(ctx, d, m)

iterative/resource_runner.go

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,14 @@ func resourceRunner() *schema.Resource {
9999
},
100100
"ssh_public": &schema.Schema{
101101
Type: schema.TypeString,
102-
ForceNew: true,
103-
Optional: true,
104-
Default: "",
102+
Computed: true,
105103
},
106104
"ssh_private": &schema.Schema{
107105
Type: schema.TypeString,
108106
ForceNew: true,
109107
Optional: true,
110108
Default: "",
111109
},
112-
"ssh_name": &schema.Schema{
113-
Type: schema.TypeString,
114-
ForceNew: true,
115-
Optional: true,
116-
Default: "ubuntu",
117-
},
118110
"startup_script": &schema.Schema{
119111
Type: schema.TypeString,
120112
Computed: true,
@@ -152,7 +144,6 @@ func resourceRunnerCreate(ctx context.Context, d *schema.ResourceData, m interfa
152144
})
153145
} else {
154146
diags = resourceMachineCreate(ctx, d, m)
155-
//d.SetId("local")
156147
}
157148

158149
return diags
@@ -204,6 +195,7 @@ func provisionerCode(d *schema.ResourceData) (string, error) {
204195
}
205196

206197
data := make(map[string]string)
198+
data["cloud"] = d.Get("cloud").(string)
207199
data["token"] = d.Get("token").(string)
208200
data["repo"] = d.Get("repo").(string)
209201
data["driver"] = d.Get("driver").(string)
@@ -219,40 +211,34 @@ func provisionerCode(d *schema.ResourceData) (string, error) {
219211
data["AZURE_TENANT_ID"] = os.Getenv("AZURE_TENANT_ID")
220212

221213
tmpl, err := template.New("deploy").Parse(`#!/bin/bash
222-
DEBIAN_FRONTEND=noninteractive
214+
export DEBIAN_FRONTEND=noninteractive
223215
224-
{{if .cloud eq "azure"}}
216+
{{if eq .cloud "azure"}}
225217
echo "APT::Get::Assume-Yes \"true\";" | sudo tee -a /etc/apt/apt.conf.d/90assumeyes
226-
227218
sudo apt update
228-
sudo curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh && \
219+
sudo curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
229220
sudo usermod -aG docker ubuntu
230221
sudo setfacl --modify user:ubuntu:rw /var/run/docker.sock
231-
232222
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
233223
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
234224
sudo apt update && sudo apt-get install -y terraform
235-
236225
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash
237226
sudo apt update && sudo apt-get install -y nodejs
238-
239227
sudo apt install -y ubuntu-drivers-common git
240228
sudo ubuntu-drivers autoinstall
241229
sudo rmmod nvidia && sudo nvidia-smi
242-
curl -s -L https://nvidia.GitHub.io/nvidia-docker/gpgkey | sudo apt-key add - && \
230+
curl -s -L https://nvidia.GitHub.io/nvidia-docker/gpgkey | sudo apt-key add -
243231
curl -s -L https://nvidia.GitHub.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
244232
sudo apt update && sudo apt install -y nvidia-container-toolkit
245233
{{end}}
246-
247234
sudo npm install -g git+https://github.com/iterative/cml.git#cml-runner
248-
249235
export AWS_SECRET_ACCESS_KEY={{.AWS_SECRET_ACCESS_KEY}}
250236
export AWS_ACCESS_KEY_ID={{.AWS_ACCESS_KEY_ID}}
251237
export AZURE_CLIENT_ID={{.AZURE_CLIENT_ID}}
252238
export AZURE_CLIENT_SECRET={{.AZURE_CLIENT_SECRET}}
253239
export AZURE_SUBSCRIPTION_ID={{.AZURE_SUBSCRIPTION_ID}}
254240
export AZURE_TENANT_ID={{.AZURE_TENANT_ID}}
255-
nohup cml-runner{{if .name}} --name {{.name}}{{end}}c --labels {{.labels}}{{end}}{{if .idle_timeout}} --idle-timeout {{.idle_timeout}}{{end}}{{if .driver}} --driver {{.driver}}{{end}}{{if .repo}} --repo {{.repo}}{{end}}{{if .token}} --token {{.token}}{{end}}{{if .tf_resource}} --tf_resource={{.tf_resource}}{{end}} < /dev/null > std.out 2> std.err &
241+
nohup cml-runner{{if .name}} --name {{.name}}{{end}}{{if .labels}} --labels {{.labels}}{{end}}{{if .idle_timeout}} --idle-timeout {{.idle_timeout}}{{end}}{{if .driver}} --driver {{.driver}}{{end}}{{if .repo}} --repo {{.repo}}{{end}}{{if .token}} --token {{.token}}{{end}}{{if .tf_resource}} --tf_resource={{.tf_resource}}{{end}} < /dev/null > std.out 2> std.err &
256242
sleep 10
257243
`)
258244
var customDataBuffer bytes.Buffer

iterative/utils/ssh.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,35 @@ import (
1010
"golang.org/x/crypto/ssh"
1111
)
1212

13-
//SSHKeyPair generates an ssh keyppair
14-
func SSHKeyPair() (string, string, error) {
13+
func PrivatePEM() (string, error) {
1514
privateKey, err := rsa.GenerateKey(rand.Reader, 4096)
1615
if err != nil {
17-
return "", "", err
16+
return "", err
1817
}
1918

20-
// generate and write private key as PEM
2119
var privKeyBuf strings.Builder
22-
2320
privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}
2421
if err := pem.Encode(&privKeyBuf, privateKeyPEM); err != nil {
25-
return "", "", err
22+
return "", err
23+
}
24+
25+
return privKeyBuf.String(), nil
26+
}
27+
28+
func PublicFromPrivatePEM(privateKey string) (string, error) {
29+
block, _ := pem.Decode([]byte(privateKey))
30+
key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
31+
if err != nil {
32+
return "", err
2633
}
2734

28-
// generate and write public key
29-
pub, err := ssh.NewPublicKey(&privateKey.PublicKey)
35+
pub, err := ssh.NewPublicKey(&key.PublicKey)
3036
if err != nil {
31-
return "", "", err
37+
return "", err
3238
}
3339

3440
var pubKeyBuf strings.Builder
3541
pubKeyBuf.Write(ssh.MarshalAuthorizedKey(pub))
3642

37-
return pubKeyBuf.String(), privKeyBuf.String(), nil
43+
return pubKeyBuf.String(), nil
3844
}

0 commit comments

Comments
 (0)