CORD-1811 Add Vagrant ssh-config to ~/.ssh/config

Change-Id: Ie3630f2990af30528b4f966d8b6d98fc040d94ae
diff --git a/Makefile b/Makefile
index fe2775e..a977e98 100644
--- a/Makefile
+++ b/Makefile
@@ -58,7 +58,6 @@
 VAGRANT_VMS      ?= $(HEADNODE)
 VAGRANT_SWITCHES ?= leaf1
 VAGRANT_CWD      ?= $(SCENARIOS_D)/$(SCENARIO)/
-VAGRANT_SSH_CONF ?= $(GENCONFIG_D)/vagrant.ssh_config
 
 # Virsh config
 VIRSH_CORDDEV_DOMAIN ?= cord_corddev
@@ -197,8 +196,8 @@
 	touch $@
 
 $(M)/vagrant-ssh-install: | $(M)/vagrant-up
-	$(VAGRANT) ssh-config $(VAGRANT_VMS) > $(VAGRANT_SSH_CONF) $(LOGCMD)
-	$(BUILD)/scripts/vagrant-ssh-install.sh "$(VAGRANT_SSH_CONF)" "Include $(abspath $(GENCONFIG_D))/*.ssh_config" $(LOGCMD)
+	$(VAGRANT) ssh-config $(VAGRANT_VMS) > /tmp/vagrant_ssh_config
+	$(ANSIBLE_PB) $(BUILD)/ansible/vagrant-ssh-install.yml $(LOGCMD)
 	touch $@
 
 $(M)/config-ssh-key: | $(M)/vagrant-up
diff --git a/ansible/roles/vagrant-ssh-install/tasks/main.yml b/ansible/roles/vagrant-ssh-install/tasks/main.yml
new file mode 100644
index 0000000..b1da8c7
--- /dev/null
+++ b/ansible/roles/vagrant-ssh-install/tasks/main.yml
@@ -0,0 +1,35 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+- name: Ensure .ssh directory exists
+  file:
+    path: "{{ ansible_env.HOME }}/.ssh"
+    state: directory
+    mode: 0700
+
+- name: Ensure SSH config file exists
+  file:
+    path: "{{ ansible_env.HOME }}/.ssh/config"
+    state: touch
+    mode: 0600
+
+# Assumes /tmp/vagrant_ssh_config has already been created...
+- name: Add SSH config block to config file
+  blockinfile:
+    path: "{{ ansible_env.HOME }}/.ssh/config"
+    state: present
+    block: "{{ lookup('file', '/tmp/vagrant_ssh_config' ) }}"
+    marker: "# {mark} CORD VAGRANT SSH"
diff --git a/ansible/vagrant-ssh-install.yml b/ansible/vagrant-ssh-install.yml
new file mode 100644
index 0000000..81166c5
--- /dev/null
+++ b/ansible/vagrant-ssh-install.yml
@@ -0,0 +1,21 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+- hosts: localhost
+  serial: 1
+  connection: local
+  roles:
+    - vagrant-ssh-install
diff --git a/scripts/vagrant-ssh-install.sh b/scripts/vagrant-ssh-install.sh
deleted file mode 100755
index 91bdde2..0000000
--- a/scripts/vagrant-ssh-install.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-# vagrant-ssh-install.sh
-# Checks to see if vagrant SSH key configuration is installed.
-
-set -e -u -o pipefail
-
-VAGRANT_SSH_CONFIG="$1"
-
-SSH_INCLUDE="Include ${VAGRANT_SSH_CONFIG}"
-SSH_WILDCARD="$2"
-
-USER_SSH_DIR="${HOME}/.ssh"
-USER_SSH_CONFIG="$USER_SSH_DIR/config"
-
-# check if we have a new enough version of SSH to deal with "Include" directive
-# per: https://www.openssh.com/txt/release-7.3
-if `ssh -V 2>&1 | perl -ne '/OpenSSH_([\d\.]{3})/ && \$1 >= 7.3 ? exit 0 : exit 1'`
-then
-  # ssh is >= 7.3, supports "Include"
-  if [ -e $USER_SSH_CONFIG ]
-  then
-    if grep -F "$SSH_WILDCARD" $USER_SSH_CONFIG
-    then
-      echo "SSH configured to import Vagrant SSH config, done!"
-    else
-      echo "SSH not configured to import Vagrant SSH config."
-      echo "Please add this line to the *TOP* your $USER_SSH_CONFIG file:"
-      echo ""
-      echo "$SSH_WILDCARD"
-      echo ""
-      echo "Then reattempt the build."
-      exit 1
-    fi
-  else
-    echo "User SSH config file doesn't exist at $USER_SSH_CONFIG"
-    echo "Creating a minimal $USER_SSH_CONFIG file that imports $SSH_WILDCARD"
-    mkdir -p "$USER_SSH_DIR"
-    echo "$SSH_WILDCARD" > $USER_SSH_CONFIG
-    echo "Done!"
-  fi
-else
-  # ssh is < 7.3, doesn't support "Include"
-  if [ -e $USER_SSH_CONFIG ]
-  then
-    echo "User SSH config file exists at $USER_SSH_CONFIG"
-    echo "SSH is an older than 7.3, unable to Include ssh config file with Vagrant config."
-    if cmp -s "$VAGRANT_SSH_CONFIG" "$USER_SSH_CONFIG"
-    then
-      echo "Contents of $VAGRANT_SSH_CONFIG and $USER_SSH_CONFIG are identical. Done!"
-    else
-      echo "Add the contents of $VAGRANT_SSH_CONFIG to $USER_SSH_CONFIG manually,"
-      echo "replacing any previous similar entries, then reattempt the build."
-      exit 1
-    fi
-  else
-    echo "User SSH config file doesn't exist at $USER_SSH_CONFIG"
-    echo "SSH is an older than 7.3, unable to Include Vagrant config,"
-    echo "so copying $VAGRANT_SSH_CONFIG to $USER_SSH_CONFIG"
-    mkdir -p "$USER_SSH_DIR"
-    cp $VAGRANT_SSH_CONFIG $USER_SSH_CONFIG
-    echo "Done!"
-  fi
-fi
-