Skip to content

Commit 2a85b51

Browse files
committed
[chef-server] chef-server-backup (no restore)
1 parent 468d13d commit 2a85b51

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

Dockerfile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,22 @@ ADD https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef_1
1313
RUN set -e -x ; \
1414
export DEBIAN_FRONTEND=noninteractive ; \
1515
apt-get update -q --yes ; \
16-
apt-get install -q --yes logrotate vim-nox ; \
16+
apt-get install -q --yes logrotate vim-nox hardlink ; \
1717
dpkg -i /tmp/chef-server-core.deb /tmp/chef.deb ; \
1818
rm -rf /tmp/*.deb /var/lib/apt/lists/* /var/cache/apt/archives/* /etc/opscode ; \
1919
mkdir -p /etc/cron.hourly ; \
2020
ln -sfv /var/opt/opscode/log /var/log/opscode ; \
2121
ln -sfv /var/opt/opscode/etc /etc/opscode ; \
2222
ln -sfv /opt/opscode/sv/logrotate /opt/opscode/service ; \
23-
ln -sfv /opt/opscode/embedded/bin/sv /opt/opscode/init/logrotate
23+
ln -sfv /opt/opscode/embedded/bin/sv /opt/opscode/init/logrotate ; \
24+
chef-apply -e 'chef_gem "knife-opc"'
2425

2526
ADD init.rb /init.rb
2627
ADD chef-server.rb /.chef/chef-server.rb
2728
ADD logrotate /opt/opscode/sv/logrotate
29+
ADD knife.rb /etc/chef/knife.rb
30+
ADD backup.sh /usr/local/bin/chef-server-backup
31+
32+
ENV KNIFE_HOME /etc/chef
2833

2934
CMD [ "/opt/opscode/embedded/bin/ruby", "/init.rb" ]

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@ A sample nginx configuration looks like this:
132132

133133
### Backup and restore
134134

135+
$ docker exec chef-server chef-server-backup
136+
137+
Backup will be created in `/var/opt/opscode/backup/latest`, and all
138+
previous backups will be in their own timestamped directories. Backups
139+
will use hardlinks to share unchanged files.
140+
141+
Alternatively:
142+
135143
1. `docker stop chef-server`
136144
2. Archive `/var/opt/opscode` volume (delete the `bootstrapped` file
137145
from the archive to force `chef-server-ctl reconfigure` run on the

backup.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/bin/sh
2+
set -e
3+
4+
ts=$(date -r backup -u +%Y%m%dT%H%M%SZ)
5+
destdir=/var/opt/opscode/backup/$ts
6+
7+
mkdir -p $destdir
8+
cd $destdir
9+
10+
mkdir users
11+
for user in $(chef-server-ctl user-list) ; do
12+
chef-server-ctl user-show -l -F json $user > users/$user.json
13+
done
14+
15+
mkdir organizations
16+
for org in $(chef-server-ctl org-list) ; do
17+
chef-server-ctl org-show -l -F json $org > organizations/$org.json
18+
mkdir organizations/$org
19+
env CHEF_ORGANIZATION=$org knife download --chef-repo-path=organizations/$org /
20+
done
21+
22+
cd ..
23+
hardlink .
24+
25+
test -d latest~ && rm -rf latest~
26+
test -d latest && mv latest latest~
27+
cp -al $ts latest
28+
rm -rf latest~

knife.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
instance_eval(File.read("/etc/opscode/pivotal.rb"))
2+
chef_server_url "#{chef_server_url}/organizations/#{ENV['CHEF_ORGANIZATION']}" if ENV['CHEF_ORGANIZATION']
3+
versioned_cookbooks true

0 commit comments

Comments
 (0)