Installation
https://docs.rundeck.com/docs/administration/install/linux-deb.html#installing-rundeck
Switch to tab Community
sudo apt install -y curl
# OPTIONAL: install Java if not already available
sudo apt-get install -y openjdk-11-jre-headless
curl -L https://packages.rundeck.com/pagerduty/rundeck/gpgkey | sudo apt-key add -
cat < /etc/apt/sources.list.d/rundeck.list
deb https://packages.rundeck.com/pagerduty/rundeck/any/ any main
deb-src https://packages.rundeck.com/pagerduty/rundeck/any/ any main
EOF
sudo apt-get update
sudo apt-get install -y rundeck
#sudo apt install -y sshpassConfiguration
ansible-playbook rundeck-ansible.example.com.yml -i your_inventory[embed_url: https://raw.githubusercontent.com/panticz/ansible/master/rundeck-ansible.example.com.yml]
Ansible role
https://github.com/panticz/ansible/tree/master/roles/rundeck
https://github.com/panticz/ansible/blob/master/rundeck.example.com.yml
Admin
http://localhost:4440/user/login;jsessionid=16lnsilhg9n6x38a090agwe8y
admin/admin
Configuration
https://docs.rundeck.com/docs/administration/configuration/configuration-file-reference.html
# override rundeck properties
/etc/rundeck/framework.properties
/etc/rundeck/rundeck-config.properties
/etc/rundeck/realm.properties
/etc/rundeck/rundeck-config.properties
# (global)
/etc/rundeck/framework.properties
# job database
/var/lib/rundeck/data/rundeckdb.mv.db
# hosts
/var/rundeck/projects/JOB_NAME/etc/resources.xml
# add user
echo "foo:bar,user,devops" >> /etc/rundeck/realm.properties
# acl
/var/rundeck/projects//acls/.aclpolicy
Docker
https://docs.rundeck.com/docs/administration/configuration/docker.html
https://github.com/rundeck/docker-zoo/blob/master/cloud/docker-compose.yml
https://docs.rundeck.com/docs/administration/install/docker.html#open-source-rundeck
Configuration (project)
# configure nodes
/var/rundeck/projects//etc/resources.xml
# use native ssh agent to access host behind proxy / bastion
/var/rundeck/projects//etc/project.properties
plugin.script-exec.default.command=/usr/bin/ssh ${node.username}@${node.hostname} ${exec.command}
plugin.script-copy.default.command=/usr/bin/scp ${file-copy.file} ${node.username}@${node.hostname}\:${file-copy.destination}
Email notification
https://docs.rundeck.com/2.6.2/manual/jobs.html#execution-notification-url-token-expansion
# variables
${globals.environment} ${job.project} ${job.name} ${execution.status}http://rundeck.org/docs/administration/email-settings.html
# /etc/rundeck/rundeck-config.properties
grails.mail.host=smtp.example.com
grails.mail.port=25
grails.mail.username=foo
grails.mail.password=bar
# restart service
service rundeckd restart
# ssh
mkdir /var/lib/rundeck/.ssh
chown rundeck:rundeck /var/lib/rundeck/.ssh
chmod 700 /var/lib/rundeck/.ssh
touch /var/lib/rundeck/.ssh/id_rsa
chown rundeck:rundeck /var/lib/rundeck/.ssh/id_rsa
chmod 600 /var/lib/rundeck/.ssh/id_rsa
# log
tail -f /var/log/rundeck/*.log
# Documentation
http://rundeck.org/
http://rundeck.org/docs/manual/getting-started.html
http://rundeck.org/2.3.2/administration/configuring-ssl.html
Plugins
https://www.rundeck.com/integrations/plugins
http://rundeck.org/plugins/ansible/2016/03/11/ansible-plugin.html
http://rundeck.org/plugins/2013/01/01/jenkins-rundeck.html
http://rundeck.org/plugins/2013/01/01/aws-ec2-nodes.html
scm
https://docs.rundeck.com/docs/developer/scm-plugins.html
/var/rundeck/projects/PROJECT_NAME/scm
/var/rundeck/projects/PROJECT_NAME/scm/scm-export.properties
/var/rundeck/projects/PROJECT_NAME/scm/cm-import.properties
Change default admin password
https://docs.rundeck.com/docs/administration/security/authenticating-users.html
USERNAME=admin
OLDPW="admin"
NEWPW="my_new_pass"
sed -i "/^${USERNAME}/ s|:${OLDPW}|:${NEWPW}|g" /home/rundeck/server/config/realm.properties
#RD_PASS=$(openssl rand -base64 16)
#echo ${RD_PASS}
#RD_PASS_MD5=$(java -cp /var/lib/rundeck/bootstrap/jetty-all-9.0.7.v20131107.jar org.eclipse.jetty.util.security.Password admin ${RD_PASS} 2>&1 | grep MD5)
#sed -i "s/^admin:admin/admin:MD5:${RD_PASS_MD5}/g" /etc/rundeck/realm.properties
java -jar /var/lib/rundeck/bootstrap/rundeck-*.war --encryptpwd Jetty
service rundeckd restart
# echo "framework.server.password = MD5:${RD_PASS_MD5}" >> /etc/rundeck/framework.properties
# Notify icinga
Local Command:
ssh monitoring.example.com '/usr/bin/printf "[%lu] SCHEDULE_FORCED_SVC_CHECK;%s;%s;%s\n" $(date +%s) ${node.name} APT $(date +%s) | tee -a /var/lib/icinga/rw/icinga.cmd'
# User authentification
http://rundeck.org/docs/administration/authenticating-users.html
Changelog
http://rundeck.org/docs/history/changelog.html
Rundeck jobs and scripts repository
https://github.com/panticz/rundeck
Job options
http://rundeck.org/2.0.0/manual/job-options.html
# use in bash
NODES=$(echo $RD_OPTION_NODES | sed 's/,/ /g')
# remote URL
https://docs.gitlab.com/ee/api/repository_files.html#get-file-from-repository
file:///tmp/foo.json
# dep # https://gitlab.example.com/foo/bar/raw/master/file.json?private_token=foo1234
https://gitlab.example.com/api/v4/projects/3/repository/files/${job.project}%2F${globals.environment}%2Foptions-hosts.json/raw?ref=master&private_token=${globals.private_token}
Call GitLab CI/CD pipeline
https://docs.gitlab.com/ee/ci/triggers/
https://git.example.com/everyware-customer-portal/customer-portal-conf/-/settings/ci_cd
export OS_ENV=dev
export TOKEN=12345678
# execute GitLab pipeline
curl -X POST \
--silent \
--fail \
-F token=${TOKEN} \
-F ref=${OS_ENV} \
https://git.example.com/api/v4/projects/123/trigger/pipelinePipe command
echo ${option.RSA} | tee /tmp/debug.txtCommands
# check file size
'[[ $(find /media/backup/db.mr/ -size +50M -name exp_$(date -I)_*.dmp.bz2 ) ]]'
API
https://docs.rundeck.com/docs/api/rundeck-api.html
GIT_SERVER=git.example.com
GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RUNDECK_JOB=287d18f7-6c95-40b7-8857-82d215c143e1
RUNDECK_TOKEN=yyyyyyyyyyyyyyyyyyyyyyyyy
ENVIRONMENT=stage
RUNDECK_SERVER=rundeck.${ENVIRONMENT}.example.com
RUNDECK_JOB_OPTIOONS=$(curl "https://${GIT_SERVER}/api/v4/projects/3/repository/files/OpenStack%2F${ENVIRONMENT}%2Foptions-hosts-all.json/raw?ref=master&private_token=${GIT_TOKEN}" | jq -r '.[] | select(.value != "control") .value' | paste -sd" ")
curl --location --request POST "http://${RUNDECK_SERVER}/api/40/job/${RUNDECK_JOB}/run" \
--header "Accept: application/json" \
--header "X-Rundeck-Auth-Token: ${RUNDECK_TOKEN}" \
--header "Content-Type: application/json" \
--data "{
options: {
nodes: ${RUNDECK_JOB_OPTIOONS}
}
}" | jq
# list tokens
curl -G -s -H "Accept: application/json" -H "X-RunDeck-Auth-Token:${RUNDECK_TOKEN}" "http://${RUNDECK_SERVER}/api/40/tokens" | jq
# get job definition
curl -G -s -H "Accept: application/json" -H "X-RunDeck-Auth-Token:${RUNDECK_TOKEN}" "http://${RUNDECK_SERVER}/api/40/job/${RUNDECK_JOB}" | jq
# get job info
curl -G -s -H "Accept: application/json" -H "X-RunDeck-Auth-Token:${RUNDECK_TOKEN}" "http://${RUNDECK_SERVER}/api/40/job/${RUNDECK_JOB}/info" | jq
# get all jobs
curl -G -s -H "Accept: application/json" -H "X-RunDeck-Auth-Token:${RUNDECK_TOKEN}" "http://${RUNDECK_SERVER}/api/40/project/OpenStack/jobs" | jq
# (call with parameter from curl)
curl -H "X-Rundeck-Auth-Token: ABCDEFGHIJKLMNOPRST1234567890" --data-urlencode "argString=-sku 'item1 item2 item3'" -X POST http://rundeck.example.com/api/25/job/26356713-8285-479e-860f-221559a64c23422/run
# fix Failed loading remote option values / Exception: java.lang.Exception: Unexpected content type received: text/plain; charset=utf-8 in Rundeck Allowed Values > Remote URL with currently:
# https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23442
echo "framework.globals.environment=dev" >> /etc/rundeck/framework.propertiesOutput
# color
grep --color=always foo /path/to/fileFix "Import Status: Not Tracked" issue
apt install -y git
cd /var/rundeck/projects/DevOps/scm
git pull
Date option
https://stackoverflow.com/questions/44141399/pass-a-date-in-rundeck
Manage by teraform
https://registry.terraform.io/providers/rundeck/rundeck/latest/docs/resources/job
Health check
https://docs.rundeck.com/docs/administration/cluster/loadbalancer/health-check.html
http://rundeck.example.com/metrics/healthcheckRenew GitLab openstack-ci private_token in rundeck
# generate new token for openstack-ci user
https://git.i.example.com/admin/users/cicd-user/impersonation_tokens
Token name: rundeck
read_repository
# get token (@workstation)
PRIVATE_TOKEN=******
# Update private_token in rundeck
for OS_ENV in dev stage prod; do
source ~/.rd/rundeck.${OS_ENV}.i.example.com.conf
rd projects configure update -p OpenStack -- --project.globals.private_token=${PRIVATE_TOKEN}
done
job options
https://docs.rundeck.com/docs/administration/install/system-requirements.html
https://rundeck.org/docs/man5/resource-json.html
https://rundeck.org/docs/manual/defining-job-options.html
https://rundeck.org/2.8.2/administration/configuration-file-reference.html
https://rundeck.org/2.9.2/administration/gui-customization.html