This repository has been archived by the owner on Oct 30, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add command templates and initial support for EC2
- Loading branch information
Showing
14 changed files
with
240 additions
and
65 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 |
---|---|---|
@@ -0,0 +1,17 @@ | ||
|
||
*.status | ||
*.log | ||
*.substvars | ||
|
||
COPYING | ||
INSTALL | ||
build-stamp | ||
config | ||
config.guess | ||
config.sub | ||
configure | ||
Makefile | ||
Makefile.in | ||
debian/files | ||
debian/vyos-cloudinit | ||
aclocal.m4 |
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,17 +1,20 @@ | ||
cfgdir = $(datadir)/vyatta-cfg/templates | ||
opdir = $(datadir)/vyatta-op/templates | ||
curverdir = $(sysconfdir)/config-migrate/current | ||
bin_sudo_usersdir = $(bindir)/sudo-users | ||
initddir = /etc/init.d | ||
sysconfdir = /opt/vyatta/etc/vyos-cloudinit | ||
|
||
vprefix = /opt/vyatta | ||
vsbindir = $(vprefix)/sbin | ||
initd_SCRIPTS = | ||
initd_SCRIPTS += etc/init.d/vyos-cloudinit | ||
|
||
sbin_SCRIPTS = | ||
sbin_SCRIPTS += scripts/vyos-cloudinit | ||
|
||
bin_sudo_users_SCRIPTS = | ||
|
||
curver_DATA = | ||
sysconf_DATA = | ||
sysconf_DATA += sysconf/vyos-cloudinit/vyos-cloudinit.conf | ||
sysconf_DATA += sysconf/vyos-cloudinit/ec2.conf | ||
|
||
cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \ | ||
cpio -0pd | ||
|
||
install-exec-hook: | ||
mkdir -p $(DESTDIR)$(cfgdir) | ||
cd templates-cfg; $(cpiop) $(DESTDIR)$(cfgdir) |
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,3 +1,10 @@ | ||
vyos-cloudinit (0.1.0) unstable; urgency=low | ||
|
||
* Add command templates. | ||
* Initial support for EC2. | ||
|
||
-- Yuya Kusakabe <[email protected]> Tue, 20 Dec 2016 12:41:22 +0900 | ||
|
||
vyos-cloudinit (0.0.1) unstable; urgency=low | ||
|
||
* Initial release. | ||
|
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 |
---|---|---|
@@ -0,0 +1,53 @@ | ||
#!/bin/sh | ||
### BEGIN INIT INFO | ||
# Provides: vyos-cloudinit | ||
# Required-Start: vyatta-router | ||
# Required-Stop: | ||
# Default-Start: 2 3 4 5 | ||
# Default-Stop: | ||
# Short-Description: Merge user VyOS config or run user script. | ||
# Description: Merge user VyOS config or run user script. | ||
### END INIT INFO | ||
|
||
. /lib/lsb/init-functions | ||
|
||
: ${vyatta_env:=/etc/default/vyatta} | ||
source $vyatta_env | ||
|
||
ENVIRONMENT="" | ||
SSH_USER="vyos" | ||
SSH_KEY="" | ||
USER_DATA="" | ||
|
||
conf_dir="${vyatta_sysconfdir}/vyos-cloudinit" | ||
|
||
. ${conf_dir}/vyos-cloudinit.conf | ||
|
||
log_action_begin_msg "Starting vyos-cloudinit" | ||
if [ -n "${ENVIRONMENT}" ]; then | ||
env_conf=${conf_dir}/${ENVIRONMENT}.conf | ||
if [ -f ${env_conf} ]; then | ||
. ${env_conf} | ||
else | ||
echo "${ENVIRONMENT} is not supported" | ||
fi | ||
fi | ||
|
||
# override with user specified parameters | ||
. ${conf_dir}/vyos-cloudinit.conf | ||
|
||
code=0 | ||
if [[ -z "${SSH_KEY}" && -z "${USER_DATA}" ]]; then | ||
log_action_msg "both ssh-key and user-data are not specified" | ||
elif [[ -n "${SSH_KEY}" && -z "${USER_DATA}" ]]; then | ||
${vyatta_sbindir}/vyos-cloudinit -u "${SSH_USER}" -s "${SSH_KEY}" | ||
code=$? | ||
elif [[ -z "${SSH_KEY}" && -n "${USER_DATA}" ]]; then | ||
${vyatta_sbindir}/vyos-cloudinit -u "${SSH_USER}" -d "${USER_DATA}" | ||
code=$? | ||
elif [[ -n "${SSH_KEY}" && -n "${USER_DATA}" ]]; then | ||
${vyatta_sbindir}/vyos-cloudinit -u "${SSH_USER}" -s "${SSH_KEY}" -d "${USER_DATA}" | ||
code=$? | ||
fi | ||
|
||
log_action_end_msg $code |
This file was deleted.
Oops, something went wrong.
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,49 +1,113 @@ | ||
#!/bin/vbash | ||
|
||
usage() { | ||
cat <<EOF | ||
Usage: $0 [options...] | ||
-s ssh key path | ||
-u ssh user | ||
-d user data path | ||
-h show this message | ||
EOF | ||
exit 1 | ||
} | ||
|
||
SSH_KEY="" | ||
SSH_USER="vyos" | ||
USER_DATA="" | ||
while getopts e:s:u:d:h: OPT | ||
do | ||
case $OPT in | ||
s) SSH_KEY=$OPTARG;; | ||
u) SSH_USER=$OPTARG;; | ||
d) USER_DATA=$OPTARG;; | ||
h) usage;; | ||
\?) usage;; | ||
esac | ||
done | ||
|
||
if [[ -z "${SSH_KEY}" && -z "${USER_DATA}" ]]; then | ||
usage | ||
fi | ||
|
||
: ${vyatta_env:=/etc/default/vyatta} | ||
source $vyatta_env | ||
|
||
LOAD_KEY="${vyatta_sbindir}/vyatta-load-user-key.pl" | ||
LOAD_CONFIG="${vyatta_sbindir}/vyatta-load-config.pl" | ||
|
||
if [ $# -ne 1 ]; then | ||
echo "user-data path is required." | ||
exit 1 | ||
fi | ||
USER_DATA="$1" | ||
code=0 | ||
|
||
_exit=exit | ||
source ${vyatta_sysconfdir}/functions/script-template | ||
|
||
function load_key() { | ||
echo "loading ssh key..." | ||
${LOAD_KEY} ${SSH_USER} ${SSH_KEY} | ||
code=$? | ||
} | ||
|
||
if [[ -n "${SSH_KEY}" && "${SSH_KEY}" == "http"* ]]; then | ||
/usr/bin/curl -m 3 -sf "${SSH_KEY}" | ||
if [ $? -ne 0 ]; then | ||
echo "could not retrieve ssh key from ${SSH_KEY}" | ||
code=1 | ||
else | ||
load_key | ||
fi | ||
elif [[ -n "${SSH_KEY}" ]]; then | ||
load_key | ||
fi | ||
|
||
if [[ -z "${USER_DATA}" ]]; then | ||
$_exit $code | ||
fi | ||
|
||
tmpfiles="" | ||
if [[ "${USER_DATA}" == "http"* ]]; then | ||
tmp=$(mktemp /tmp/XXXXXX-user-data) | ||
tmpfiles=$tmp | ||
/usr/bin/curl -m 3 -sf "${USER_DATA}" -o ${tmp} | ||
if [ $? -ne 0 ]; then | ||
echo "could not retrieve user-data from ${USER_DATA}" | ||
code=1 | ||
fi | ||
USER_DATA="${tmp}" | ||
fi | ||
|
||
header=$(head -n1 ${USER_DATA}) | ||
|
||
if [ "${header}" = "#vyos-config" ]; then | ||
tmpfile=$(mktemp /tmp/XXXXXX-user-data) | ||
output=$(mktemp /tmp/XXXXXX-output) | ||
tail -n +2 ${USER_DATA} > ${tmpfile} | ||
echo Y | python -c 'import pty, sys; pty.spawn(sys.argv[1:])' ${LOAD_CONFIG} ${tmpfile} --merge > ${output} | ||
result=$(cat ${output} | tail -n +5 | head -n -1) | ||
grep -q fail ${output} | ||
code=$? | ||
if [ ${code} -eq 0 ]; then | ||
echo "merge failed" | ||
echo "${result}" | ||
code=1 | ||
else | ||
commit | ||
save | ||
code=0 | ||
fi | ||
elif [ "${header}" = "#!/bin/vbash" ]; then | ||
chmod +x ${USER_DATA} | ||
result=$(${USER_DATA}) | ||
code=$? | ||
if [ ${code} -ne 0 ]; then | ||
echo "user script failed" | ||
echo "${result}" | ||
fi | ||
if [[ "${header}" == "#vyos-config" ]]; then | ||
echo "merging VyOS config..." | ||
tmp=$(mktemp /tmp/XXXXXX-config) | ||
tmpfiles="${tmpfiles} ${tmp}" | ||
output=$(mktemp /tmp/XXXXXX-output) | ||
tail -n +2 ${USER_DATA} > ${tmp} | ||
echo Y | python -c 'import pty, sys; pty.spawn(sys.argv[1:])' ${LOAD_CONFIG} ${tmpfile} --merge > ${output} | ||
result=$(cat ${output} | tail -n +5 | head -n -1) | ||
grep -q fail ${output} | ||
code=$? | ||
if [ ${code} -eq 0 ]; then | ||
echo "merge failed" | ||
echo "${result}" | ||
code=1 | ||
else | ||
commit | ||
save | ||
code=0 | ||
fi | ||
elif [[ "${header}" == "#!/bin/vbash" ]]; then | ||
echo "running user script..." | ||
chmod +x ${USER_DATA} | ||
result=$(${USER_DATA}) | ||
code=$? | ||
if [[ ${code} -ne 0 ]]; then | ||
echo "user script failed" | ||
echo "${result}" | ||
fi | ||
fi | ||
|
||
if [ ${code} -eq 0 ]; then | ||
rm -f $tmpfile $output | ||
if [[ ${code} -eq 0 ]]; then | ||
rm -f $tmpfiles $output | ||
fi | ||
|
||
$_exit $code |
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 |
---|---|---|
@@ -0,0 +1,3 @@ | ||
SSH_USER="vyos" | ||
SSH_KEY="http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key" | ||
USER_DATA="http://169.254.169.254/latest/user-data" |
Empty file.
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 |
---|---|---|
@@ -0,0 +1,8 @@ | ||
type: txt | ||
help: Environment | ||
syntax:expression: exec "[ -f /opt/vyatta/etc/vyos-cloudinit/$VAR(@).conf ]" | ||
; "$VAR(@) is not supported" | ||
allowed: sudo ls -1 /opt/vyatta/etc/vyos-cloudinit/ | sed 's/.conf//' | grep -v vyos-cloudinit | ||
create: sudo sh -c "echo ENVIRONMENT=$VAR(@) >> /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
update: sudo sh -c "sed -i '/^ENVIRONMENT=/c/ENVIRONMENT=$VAR(@)/' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
delete: sudo sh -c "sed -i '/ENVIRONMENT=/d' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" |
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 |
---|---|---|
@@ -0,0 +1,4 @@ | ||
priority: 400 | ||
help: Cloud init | ||
create: sudo /usr/sbin/update-rc.d vyos-cloudinit defaults | ||
delete: sudo /usr/sbin/update-rc.d -f vyos-cloudinit remove |
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 |
---|---|---|
@@ -0,0 +1,6 @@ | ||
type: txt | ||
help: SSH key URL | ||
syntax:expression: pattern $VAR(@) "^[^!]+$" ; "SSH key URL must not be null and must not contain '!'" | ||
create: sudo sh -c "echo SSH_KEY=$VAR(@) >> /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
update: sudo sh -c "sed -i '/^SSH_KEY=/c/SSH_KEY=$VAR(@)/' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
delete: sudo sh -c "sed -i '/SSH_KEY=/d' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" |
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 |
---|---|---|
@@ -0,0 +1,11 @@ | ||
type: txt | ||
help: SSH user | ||
|
||
syntax:expression: exec "cli-shell-api exists system login user $VAR(@)" | ||
; "$VAR(@) does not exist" | ||
allowed: list=`cli-shell-api listNodes system login user` | ||
echo $list | ||
|
||
create: sudo sh -c "echo SSH_USER=$VAR(@) >> /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
update: sudo sh -c "sed -i '/^SSH_USER=/c/SSH_USER=$VAR(@)/' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
delete: sudo sh -c "sed -i '/SSH_USER=/d' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" |
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 |
---|---|---|
@@ -0,0 +1,6 @@ | ||
type: txt | ||
help: User Data URL | ||
syntax:expression: pattern $VAR(@) "^[^!]+$" ; "user-data URL must not be null and must not contain '!'" | ||
create: sudo sh -c "echo USER_DATA=$VAR(@) >> /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
update: sudo sh -c "sed -i '/^USER_DATA=/c/USER_DATA=$VAR(@)/' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" | ||
delete: sudo sh -c "sed -i '/USER_DATA=/d' /opt/vyatta/etc/vyos-cloudinit/vyos-cloudinit.conf" |