The easiest, most common sense server configuration management tool...because you just use fucking shell scripts.
Completely confused by Chef? Blowing your brains out over Ansible? Wanna just use fucking shell scripts to configure a server? Read on!
gem install fucking_shell_scripts
mkdir config_management
Folder structure:
/servers (required) - yaml server definitions (see example below)
/scripts (required) - the shell scripts that will configure your servers (see example below)
/files (optional) - files to be transferred to servers (nginx.conf, ssh keys, database.yml, etc.)
An example folder structure:
./config_management ├── files │ ├── keys │ │ └── deploy_key │ └── rails_config │ └── database.yml ├── scripts │ ├── apt.sh │ ├── deploy_key.sh │ ├── git.sh │ ├── redis.sh │ ├── ruby2.sh │ ├── rubygems.sh │ ├── search_service_code.sh │ └── search_service_env.sh └── servers ├── defaults.yml └── search-service.yml
The server definition file defines how to build a type of server. Server definitions override settings in defaults.yml
.
# servers/search-server.yml ################################################## # This file defines how to build our search server ################################################## security_groups: pd-app-server instance_type: c1.xlarge image_id: ami-e76ac58e availability_zone: us-east-1d region: us-east-1 key_name: pd-app-server name: search-server private_key_path: /Users/yourname/.ssh/pd-app-server security_groups: search-service # override the security_groups defined in defaults.yml instance_type: c1.medium image_id: ami-90374bf9 ############################################ # Files necessary to build the search server ############################################ files: - files/keys/deploy_key ########################################### # Scripts needed to build the search server ########################################### scripts: - scripts/apt.sh - scripts/search_service_env.sh - scripts/git.sh - scripts/ruby2.sh - scripts/rubygems.sh - scripts/redis.sh - scripts/deploy_key.sh
servers/defaults.yml
has the same structure and keys a server definition file, except, you cannot define scripts or files.
# servers/defaults.yml ################################ # This file defines our defaults ################################ security_groups: simple-group instance_type: c1.medium image_id: ami-e76ac58e availability_zone: us-east-1d region: us-east-1 key_name: global-key
Seriously...just write shell scripts.
Want to install Ruby 2? Here's an example:
#!/bin/sh # # scripts/ruby2.sh # sudo apt-get -y install build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev cd /tmp wget http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz tar -xzf ruby-2.0.0-p247.tar.gz cd ruby-2.0.0-p247 ./configure --prefix=/usr/local make sudo make install rm -rf /tmp/ruby*
fss search-service
This command does 2 things:
To build only:
fss --build search-service
To configure only:
fss --instance-id i-9ad6d7af --configure search-service
Note: --instance-id
is required when using the --configure
option
rm -rf ~/old_config_management/chef