aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.adoc7
-rw-r--r--README.adoc12
-rw-r--r--command.go5
-rw-r--r--environment.go5
4 files changed, 26 insertions, 3 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index e3e49c7..b4be2a0 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -4,6 +4,13 @@
=== New features
+* environment: export the SSH key, user, host, and port
+
+By knowing this values, user can use it to invoke other SSH related
+command, for example to copy file using `scp`
+
+ scp -i {{.SSHKey}} src {{.SSHUser}}@{{.SSHHost}}:{{.SSHPort}}/dst
+
* all: add magic command "#require:"
Magic word `#require:` will ensure that the next statement will always
diff --git a/README.adoc b/README.adoc
index 8a740ab..5ff7b18 100644
--- a/README.adoc
+++ b/README.adoc
@@ -173,16 +173,22 @@ We will explain how to use and get the environment variables below.
Template file is any text or script files that dynamically generated using
values from variables defined in environment files.
-There are two global variables that shared to all template or script files,
+There are six global variables that shared to all template or script files,
-* `.BaseDir` contains the absolute path of current directory, and
-* `.ScriptDir` contains the relative path to script directory.
+* `.BaseDir` contains the absolute path of current directory
+* `.ScriptDir` contains the relative path to script directory
+* `.SSHKey` contains the value of "IdentityFile" in SSH configuration
+* `.SSHUser` contains the value of "User" in SSH configuration
+* `.SSHHost` contains the value of "Host" in SSH configuration
+* `.SSHPort` contains the value of "Port" in SSH configuration
To get the value wrap the variable using '{{}}' for example,
----
#put! {{.BaseDir}}/templates/etc/hosts /etc/
#put! {{.ScriptDir}}/etc/hosts /etc/
+
+scp -i {{.SSHKey}} src {{.SSHUser}}@{{.SSHHost}}:{{.SSHPort}}/dst
----
To get the value of variable in environment file you put the string ".Val"
diff --git a/command.go b/command.go
index cd6a86f..3a6d86f 100644
--- a/command.go
+++ b/command.go
@@ -401,4 +401,9 @@ func (cmd *Command) initSSHClient() {
if err != nil {
log.Fatal("cmd: cannot create new SSH client: " + err.Error())
}
+
+ cmd.env.SSHKey = sshSection.IdentityFile[0]
+ cmd.env.SSHUser = sshSection.User
+ cmd.env.SSHHost = sshSection.Hostname
+ cmd.env.SSHPort = strconv.Itoa(sshSection.Port)
}
diff --git a/environment.go b/environment.go
index 5f31f74..af9662b 100644
--- a/environment.go
+++ b/environment.go
@@ -28,6 +28,11 @@ type Environment struct {
BaseDir string // The current working directory.
ScriptDir string // The base directory of the script.
+ SSHKey string // The value of "IdentityFile" in SSH config.
+ SSHUser string // The value of "User" in SSH config.
+ SSHHost string // The value of "Hostname" in configuration.
+ SSHPort string // The value of "Port" in configuration.
+
mode string // One of the mode to execute the script.
hostname string // The hostname where script will be executed.
scriptPath string // Location of the script in file system.