dust-deploy 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -11,7 +11,8 @@ installing
11
11
  ------------
12
12
 
13
13
  installation is quite simple. just
14
- gem install dust
14
+
15
+ # gem install dust-deploy
15
16
 
16
17
 
17
18
  using
@@ -27,7 +28,7 @@ then, create directories you might/will need. (there's going to be an automation
27
28
  $ mkdir templates
28
29
  $ mkdir nodes
29
30
 
30
- in the nodes directory, there will be your templates and node configurations.
31
+ in the nodes directory, there will be your node-templates and node configuration files.
31
32
  dust uses simple .yaml files for configuring your nodes.
32
33
  let's start by adding a simple host:
33
34
 
@@ -45,7 +46,7 @@ and put in basic information:
45
46
  port: 22
46
47
  user: root
47
48
 
48
- # because this alone won't tell dust what to do, let's for example install a package
49
+ # because this alone won't tell dust what to do, let's for example install some useful packages
49
50
  recipes:
50
51
  packages: [ 'vim', 'git-core', 'rsync' ]
51
52
 
@@ -64,7 +65,7 @@ you can then save the file, and tell dust to get to work:
64
65
 
65
66
  you should see dust connecting to the node, checking if the requestet packages are installed, and if not, install them.
66
67
  dust works with aptitude, yum and emerge systems at the moment (testet with ubuntu, debian, gentoo, scientificlinux, centos).
67
- feel free to contribute to dust, so that your system is also supportet. contribution is easy!
68
+ feel free to contribute to dust, so that your system is also supported. contribution is easy! just send me a github pull request. You can find the repository here: https://github.com/kechagia/dust-deploy
68
69
 
69
70
 
70
71
  inheritance
@@ -113,6 +114,8 @@ you can then inherit these templates in your yourhost.yaml:
113
114
  running dust now, will use the inherited settings as well.
114
115
  you can also overwrite settings in the template with the ones in yourhost.yaml
115
116
 
117
+ **NOTE** hashes will be deep merged with inherited hashes, other types will be overwritten!
118
+
116
119
  $ dust deploy
117
120
 
118
121
  [ yourhost ]
@@ -141,14 +144,101 @@ you can also overwrite settings in the template with the ones in yourhost.yaml
141
144
  using recipes (and their templates)
142
145
  ------------
143
146
 
147
+ dust comes with a set of predifined, (almost) ready to use recipes managing a lot of stuff for you, including the following:
148
+
149
+ - ssh authorized keys
150
+ - email aliases file
151
+ - /etc/hosts
152
+ - /etc/motd
153
+ - /etc/resolv.conf
154
+ - install basic system tools and pushing .configuration files for root
155
+ - iptables firewall
156
+ - debian/ubuntu debsecan security notifications
157
+ - debian/ubunto repositories
158
+ - duplicity backups
159
+ - mysql server configuration
160
+ - postgresql server configuration (including corosync scripts)
161
+ - nginx configuration
162
+ - zabbix agent
163
+ - debian/ubuntu unattended upgrades
164
+ - newrelic system monitoring daemon
165
+
144
166
 
145
167
  writing your own recipes
146
168
  ------------
147
169
 
170
+ because the above recipes will probably not in all cases fullfill your needs, it's pretty easy to write your own recipes. You can either file them in using a git pull request (if you think it's a generic one which others might use as well), or place them locally in the "recipes" folder in your mynetwork.dust directory.
171
+
172
+ dust comes with a set of predifined functions to perform system taks, which you can (and should!) use.
173
+
174
+ ### the server.rb methods you can (and should!) use
175
+
176
+ almost all functions understand the quiet=true and indend=integer arguments
177
+
178
+ #### exec command
179
+ #### write target, text, quiet=false, indent=1
180
+ #### append target, text, quiet=false, indent=1
181
+ #### scp source, destination, quiet=false, indent=1
182
+ #### symlink source, destination, quiet=false, indent=1
183
+ #### chmod mode, file, quiet=false, indent=1
184
+ #### chown user, file, quiet=false, indent=1
185
+ #### rm file, quiet=false, indent=1
186
+ #### mkdir dir, quiet=false, indent=1
187
+ #### restorecon path, quiet=false, indent=1
188
+ #### get_system_users quiet=false
189
+ #### package_installed? packages, quiet=false, indent=1
190
+ #### install_package package, quiet=false, indent=1, env=""
191
+ #### update_repos quiet=false, indent=1
192
+ #### system_update quiet=false, indent=1
193
+ #### uses_apt? quiet=false, indent=1
194
+ #### uses_rpm? quiet=false, indent=1
195
+ #### uses_emerge? quiet=false, indent=1
196
+ #### is_executable? file, quiet=false, indent=1
197
+ #### file_exists? file, quiet=false, indent=1
198
+ #### dir_exists? dir, quiet=false, indent=1
199
+ #### autostart_service service, quiet=false, indent=1
200
+ #### restart_service service, quiet=false, indent=1
201
+ #### reload_service service, quiet=false, indent=1
202
+ #### user_exists? user, quiet=false, indent=1
203
+ #### create_user user, home=nil, shell=nil, quiet=false, indent=1
204
+
205
+ #### collect_facts quiet=false, indent=1
206
+ #### is_os? os_list, quiet=false, indent=1
207
+ #### is_debian? quiet=false, indent=1
208
+ #### is_ubuntu? quiet=false, indent=1
209
+ #### is_gentoo? quiet=false, indent=1
210
+ #### is_centos? quiet=false, indent=1
211
+ #### is_scientific? quiet=false, indent=1
212
+ #### is_fedora? quiet=false, indent=1
213
+
214
+
215
+ ### example recipes
216
+
217
+ The best is to have a look at dusts build-in recipes: https://github.com/kechagia/dust-deploy/tree/master/lib/dust/recipes
218
+
219
+ this is the basic skeletton of a recipe file, placed in recipes/your_task.rb
220
+
221
+ class YourTask < Thor
222
+ desc 'your_task:deploy', 'example task: displays a message and does basically nothing'
223
+ def deploy node, ingredients, options
224
+
225
+ ::Dust.print_msg 'this is a test example. welcome! output of uname -a below:'
226
+ puts node.exec('uname -a')[:stdout]
227
+
228
+ node.uses_apt?
229
+
230
+ node.restart_service 'your-service' if options.restart?
231
+ end
232
+
233
+ desc 'your_task:status', 'example status: displays the status of this recipe (optional)'
234
+ def status, node, ingredients, options
235
+ ::Dust.print_msg "displaying status of this example recipe!"
236
+ end
237
+ end
238
+
148
239
 
149
240
  contributing
150
241
  ------------
151
242
 
152
243
  you have a cool contribution or bugfix? yippie! just file in a pull-request!
153
244
 
154
- ### the server.rb methods you can (and should!) use
data/bin/dust CHANGED
@@ -4,6 +4,7 @@ require 'rubygems'
4
4
  require 'thor/runner'
5
5
  require 'thor/util'
6
6
  require 'yaml'
7
+ require 'fileutils'
7
8
  require 'dust'
8
9
 
9
10
  # stole this from rails
@@ -74,6 +75,24 @@ module Dust
74
75
  end
75
76
 
76
77
 
78
+ # creates directory skeleton for a dust setup
79
+ desc 'newnetwork <name>', 'creates a dust directory skeleton for your network'
80
+ def newnetwork name
81
+ Dust.print_msg "spawning new dust directory skeleton into '#{name}.dust'"
82
+ Dir.mkdir "#{name}.dust"
83
+ Dir.mkdir "#{name}.dust/nodes"
84
+ Dir.mkdir "#{name}.dust/recipes"
85
+ Dir.mkdir "#{name}.dust/templates"
86
+ Dust.print_ok
87
+
88
+ Dust.print_msg "copying example yaml node configuration files\n"
89
+ Dir[File.dirname(__FILE__) + '/../lib/dust/examples/nodes/*.yaml'].each do |file|
90
+ Dust.print_msg "copying #{File.basename file}", 2
91
+ FileUtils.cp file, "#{name}.dust/nodes/#{File.basename file}"
92
+ Dust.print_ok
93
+ end
94
+ end
95
+
77
96
  private
78
97
 
79
98
  # run specified recipes in the given context
data/dust.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["kk@rndsec.net"]
10
10
  s.homepage = ""
11
11
  s.summary = %q{small server deployment tool for complex environments}
12
- s.description = %q{when puppet and chef suck because you want to be in control and sprinkle just cannot to enough for you}
12
+ s.description = %q{when puppet and chef suck because you want to be in control and sprinkle just cannot do enough for you}
13
13
 
14
14
  s.rubyforge_project = "dust-deploy"
15
15
 
@@ -0,0 +1,9 @@
1
+ group: debian
2
+
3
+ recipes:
4
+ locale: en_US.UTF-8
5
+ debsecan: default
6
+ repositories:
7
+ default:
8
+ url: "http://ftp.de.debian.org/debian/"
9
+ components: "main contrib non-free"
@@ -0,0 +1,3 @@
1
+ domain: flinc.org
2
+ port: 22
3
+ user: root
@@ -0,0 +1,5 @@
1
+ hostname: kyle
2
+ inherits: [ _default, _debian ]
3
+
4
+ recipes:
5
+ packages: [ 'vim', 'git-core', 'rsync' ]
@@ -0,0 +1,20 @@
1
+ class Newrelic < Thor
2
+ desc 'newrelic:deploy', 'installs and configures newrelic system monitoring'
3
+ def deploy node, key, options
4
+ return Dust.print_failed 'no key specified' unless key
5
+ return unless node.uses_apt?
6
+
7
+ ::Dust.print_msg 'updating repositories'
8
+ ::Dust.print_result node.exec('aptitude update')[:exit_code]
9
+
10
+ unless node.install_package 'newrelic-sysmond'
11
+ ::Dust.print_failed 'installing newrelic monitoring daemon failed, did you setup the newrelic repositories?'
12
+ return
13
+ end
14
+
15
+ ::Dust.print_msg 'configuring new relic server monitoring tool'
16
+ return unless ::Dust.print_result node.exec("nrsysmond-config --set ssl=true license_key=#{key}")[:exit_code]
17
+
18
+ node.restart_service 'newrelic-sysmond' if options.restart?
19
+ end
20
+ end
data/lib/dust/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dust
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - kris kechagia
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: "0"
66
66
  type: :runtime
67
67
  version_requirements: *id004
68
- description: when puppet and chef suck because you want to be in control and sprinkle just cannot to enough for you
68
+ description: when puppet and chef suck because you want to be in control and sprinkle just cannot do enough for you
69
69
  email:
70
70
  - kk@rndsec.net
71
71
  executables:
@@ -83,6 +83,9 @@ files:
83
83
  - dust.gemspec
84
84
  - lib/dust.rb
85
85
  - lib/dust/convert_size.rb
86
+ - lib/dust/examples/nodes/_debian.yaml
87
+ - lib/dust/examples/nodes/_default.yaml
88
+ - lib/dust/examples/nodes/example.yaml
86
89
  - lib/dust/print_status.rb
87
90
  - lib/dust/recipes/aliases.rb
88
91
  - lib/dust/recipes/basic_setup.rb
@@ -94,6 +97,7 @@ files:
94
97
  - lib/dust/recipes/memory_limit.rb
95
98
  - lib/dust/recipes/motd.rb
96
99
  - lib/dust/recipes/mysql.rb
100
+ - lib/dust/recipes/newrelic.rb
97
101
  - lib/dust/recipes/nginx.rb
98
102
  - lib/dust/recipes/packages.rb
99
103
  - lib/dust/recipes/postgres.rb