forked from joshpmcghee/parsec-terraform
/
stop.go
84 lines (67 loc) · 2.32 KB
/
stop.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright © 2017 Jade Iqbal <jadeiqbal@fastmail.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"fmt"
"os"
"encoding/json"
"io/ioutil"
"github.com/spf13/cobra"
)
// stopCmd represents the stop command
var stopCmd = &cobra.Command{
Use: "stop",
Short: "Stop a running Parsec EC2 instance",
Long: `
Stops a Parsec EC2 instance created using the start command. Under the
hood this command runs 'terraform destroy', with removes all AWS resources
that are identified for creation in the terraform template.
This command depends on session information that is created by the start
command and stored in $HOME/.parsec-ec2/currentSession.json, so if this
has been manually modified or removed after running the start command,
the stop command will not execute. In this situation it is still possible
to manually run 'terraform destroy'. You will receive prompts for variable
values, but these can all be left blank with the exception of the region
variable, which can be set to the region the instances were started in.
Example:
parsec-ec2 stop
`,
Run: func(cmd *cobra.Command, args []string) {
session := fmt.Sprintf("%s/%s", installPath, CurrentSession)
bytes, err := ioutil.ReadFile(session)
if err != nil {
fmt.Println("No session information found.")
os.Exit(1)
}
var p TfVars
if err := json.Unmarshal(bytes, &p); err != nil {
fmt.Println(err)
os.Exit(1)
}
destroy := tfCmdVars(p, []string{TfCmdDestroy, TfFlagForce})
fmt.Println("Terminating all AWS resources created by this session... ")
if err := executeSilent(destroy); err != nil {
fmt.Println(err)
os.Exit(1)
}
if err := os.Remove(session); err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("All resources have been successfully terminated.")
},
}
func init() {
RootCmd.AddCommand(stopCmd)
}