Last active
December 15, 2015 15:29
-
-
Save sawanoboly/5282660 to your computer and use it in GitHub Desktop.
Continuous convergence with the chef-solo on the joyent smartmachine.
This file contains hidden or 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
#!/usr/bin/bash | |
# REPLACE APP_REPO and APP_NAME | |
set -e | |
set -x | |
export PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/usr/sbin | |
MDATA_WRAPPER=001 | |
MDATA_USERSCRIPT=/var/svc/mdata-user-script | |
MDATA_USERDATA=/var/svc/mdata-user-data | |
CHEF_REPOS=/usr/local/user-applcation | |
APP_REPO=https://github.com/${REPLACE_YOUR_REPOS}.git | |
# set token to use private repos | |
# APP_REPO=https://${GITHUB_TOKEN}@github.com/${REPLACE_YOUR_REPOS}.git | |
APP_NAME=${REPLACE_CHEF_ROLL_NAME} | |
## add mdata-wapper script to cron | |
## Notice: this block must keep on top to retry fetch cyclically. | |
if ! exists /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh ; then | |
cat <<"EOL" > /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh | |
#!/usr/bin/bash | |
export PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/usr/sbin | |
sleep `expr $$ % 60` | |
svcadm restart mdata:fetch | |
if svcs mdata:fetch | grep -q maintenance ; then svcadm clear mdata:fetch ;fi | |
sleep 2 | |
svcadm restart mdata:execute | |
if svcs mdata:execute | grep -q maintenance ; then svcadm clear mdata:execute ;fi | |
EOL | |
chmod u+x /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh | |
ln -fs /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh /opt/local/sbin/mdata_wrapper.sh | |
fi | |
if ! grep -q -x "## user-applcation" /var/spool/cron/crontabs/root | |
then | |
cat << "EOL" >> /var/spool/cron/crontabs/root | |
## user-applcation | |
0,10,20,30,40,50 * * * * /opt/local/sbin/mdata_wrapper.sh | |
EOL | |
svcadm restart cron | |
fi | |
## install chef-solo | |
if [ ! -f /opt/local/bin/chef-solo ] ; then | |
pkgin -y install gcc47 scmgit-base gmake ruby193-base ruby193-yajl ruby193-nokogiri ruby193-readline pkg-config | |
## for smf cookbook | |
pkgin -y install libxslt | |
## install chef | |
gem update --system | |
gem install --no-ri --no-rdoc bundler | |
gem install --no-ri --no-rdoc ohai | |
gem install --no-ri --no-rdoc json | |
gem install --no-ri --no-rdoc chef | |
gem install --no-ri --no-rdoc rb-readline | |
fi | |
## clone or pull application repositoly to local | |
if [ ! -d ${CHEF_REPOS} ] ; then | |
git clone ${APP_REPO} ${CHEF_REPOS} | |
else | |
cd ${CHEF_REPOS} | |
git pull | |
fi | |
## execute chef-solo | |
chef-solo -c ${CHEF_REPOS}/solo.rb -o "role[${APP_NAME}]" |
This file contains hidden or 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
#!/usr/bin/bash | |
# set app_name and app_repo to metadata when provisioning. | |
set -e | |
set -x | |
export PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/usr/sbin | |
MDATA_WRAPPER=001 | |
MDATA_USERSCRIPT=/var/svc/mdata-user-script | |
MDATA_USERDATA=/var/svc/mdata-user-data | |
CHEF_REPOS=/usr/local/user-application | |
## add mdata-wapper script to cron | |
## Notice: this block must keep on top to retry fetch cyclically. | |
if ! exists /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh ; then | |
cat <<"EOL" > /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh | |
#!/usr/bin/bash | |
export PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/usr/sbin | |
sleep `expr $$ % 60` | |
svcadm restart mdata:fetch | |
if svcs mdata:fetch | grep -q maintenance ; then svcadm clear mdata:fetch ;fi | |
sleep 2 | |
svcadm restart mdata:execute | |
if svcs mdata:execute | grep -q maintenance ; then svcadm clear mdata:execute ;fi | |
EOL | |
chmod u+x /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh | |
ln -fs /opt/local/sbin/mdata_wrapper_${MDATA_WRAPPER}.sh /opt/local/sbin/mdata_wrapper.sh | |
fi | |
if ! grep -q -x "## user-application" /var/spool/cron/crontabs/root | |
then | |
cat << "EOL" >> /var/spool/cron/crontabs/root | |
## user-application | |
0,10,20,30,40,50 * * * * /opt/local/sbin/mdata_wrapper.sh | |
EOL | |
svcadm restart cron | |
fi | |
## install chef-solo | |
if [ ! -f /opt/local/bin/chef-solo ] ; then | |
pkgin -y install gcc47 scmgit-base gmake ruby193-base ruby193-yajl ruby193-nokogiri ruby193-readline pkg-config | |
## for smf cookbook | |
pkgin -y install libxslt | |
## install chef | |
gem update --system | |
gem install --no-ri --no-rdoc bundler | |
gem install --no-ri --no-rdoc ohai | |
gem install --no-ri --no-rdoc json | |
gem install --no-ri --no-rdoc chef | |
gem install --no-ri --no-rdoc rb-readline | |
fi | |
## get attribute from metadata-api | |
_mdata_check(){ | |
if ! mdata-get $1 ; then echo "ERROR_EXIT: missing metadata $1" ; exit 1 ; fi | |
export $2="`mdata-get $1`" | |
} | |
_mdata_check app_name APP_NAME | |
_mdata_check app_repo APP_REPO | |
## clone or pull application repositoly to local | |
if [ ! -d ${CHEF_REPOS} ] ; then | |
git clone ${APP_REPO} ${CHEF_REPOS} | |
else | |
cd ${CHEF_REPOS} | |
git pull | |
fi | |
## execute chef-solo | |
chef-solo -j ${MDATA_USERDATA} -c ${CHEF_REPOS}/solo.rb -o "role[${APP_NAME}]" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment