bcome 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f232736b42afc8eb14ae4df636a3b7b6eccb7d0e
4
+ data.tar.gz: f260940851ea03b9d2bfdfd863883468958cf8fc
5
+ SHA512:
6
+ metadata.gz: 02936421eec97fdeeddc3318adea9d7ae7e5b591164130f90b1ecf7a6e10a544374b260f047bc2309ce8087e4f5adec43b287d4c4b06af0057e0cb83f546492a
7
+ data.tar.gz: bf8b6c1262e05bf9201538f4d8c478d09bae2248477c0338cd4df26471885640baf10626d9172fd09cdc6344913acaab99fd9feb02e49681eb462d8b136c8add
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # (C) Guillaume Roderick (webzakimbo)
4
+ # MIT licence.
5
+
6
+ require 'bcome'
7
+ Dir[Dir.pwd + "/bcome/patches/**/*.rb"].each {|file| load file }
8
+
9
+ VERBOSE = true
10
+ START_PROMPT = "bcome"
11
+
12
+ # The ssh_mode identifier in platforms.yml signifying that this platform is to be accessed via an SSH bastion machine
13
+ SSH_JUMP_MODE_IDENTIFIER = "jump"
14
+
15
+ # The ssh mode identifier in platforms.yml signifying that this platform is to be accessed directly
16
+ SSH_DIRECT_MODE_IDENTIFIER = "direct"
17
+
18
+ # The SSH role in instances.yml signifying that an instance is an SSJ jump host
19
+ SSH_JUMP_HOST_ROLE_IDENTIFIER = "sshjumphost"
20
+
21
+ ## The base resource classes - may be overriden
22
+ PLATFORM_STACK_KLASS = ::Bcome::Stack::Platform
23
+ ENV_STACK_KLASS = ::Bcome::Stack::Environment
24
+ INSTANCE_STACK_KLASS = ::Bcome::Stack::Instance
25
+
26
+ ##################
27
+ ## DEPENDENCIES ##
28
+ ##################
29
+
30
+ ## Filters are loaded lower down as modules, and hence need to be include first
31
+ Dir[Dir.pwd + "/bcome/filters/**/*.rb"].each {|file| load file }
32
+
33
+ quick_contexts = []
34
+
35
+ BECOME = ::Bcome::WorkspaceContext.new
36
+ BOOT = ::Bcome::Boot.new
37
+ RENDER = ::Bcome::RenderIrb.new
38
+
39
+ ###########################
40
+ ## MANAGE QUICK CONTEXTS #
41
+ ###########################
42
+ if ARGV[0]
43
+ quick_context = ARGV[0]
44
+ quick_context =~ /(.+):(.+)/
45
+ platform_key = $1
46
+ context_reference = $2
47
+
48
+ unless platform_key && context_reference
49
+ puts "Quick context is missing platform key or the context reference".failure
50
+ exit 1
51
+ end
52
+
53
+ unless platform = BOOT.resource_for_identifier(platform_key)
54
+ puts "Cannot find platform named #{platform_key}".failure
55
+ exit
56
+ end
57
+
58
+ unless platform.has_quick_contexts? && (context = platform.quick_context_for_reference(context_reference))
59
+ puts "No quick context found on platform #{platform_key} for reference #{context_reference}".failure
60
+ exit
61
+ end
62
+
63
+ quick_contexts = context[:keys]
64
+ end
65
+
66
+ ####################
67
+ ## BASIC IRB SETUP #
68
+ ####################
69
+ IRB.setup nil
70
+ IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
71
+
72
+ #########################
73
+ ## QUICK CONTEXT & BOOT #
74
+ #########################
75
+
76
+ context_object = BOOT
77
+
78
+ if quick_contexts.any?
79
+ spawn = false
80
+ quick_contexts.each do |resource_context_key|
81
+ next_context_resource = context_object.resource_for_identifier(resource_context_key)
82
+
83
+ if next_context_resource.nil?
84
+ puts "Cannot find any resources object named: #{resource_context_key}. Please check your quick contexts and try again".failure
85
+ exit
86
+ end
87
+
88
+ BECOME.set(next_context_resource, context_object, spawn)
89
+ context_object = next_context_resource
90
+ end
91
+ end
92
+
93
+ ##################
94
+ ## INIT SESSION ##
95
+ ##################
96
+
97
+ require 'irb/ext/multi-irb'
98
+ IRB.parse_opts_with_ignoring_script
99
+ IRB.irb nil, context_object
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # (C) Guillaume Roderick (webzakimbo)
4
+ # MIT licence.
5
+
6
+ require 'fileutils'
7
+ bcome_resource_dir = "bcome"
8
+
9
+ config_dir = "#{bcome_resource_dir}/config"
10
+ filters_dir = "#{bcome_resource_dir}/filters"
11
+ patches_dir = "#{bcome_resource_dir}/patches"
12
+ static_instances_dir = "#{config_dir}/static_instances"
13
+
14
+ ## INSTALL APPLICATION DIRECTORIES
15
+ directories = [
16
+ filters_dir,
17
+ patches_dir,
18
+ static_instances_dir
19
+ ]
20
+
21
+ directories.each do | directory |
22
+ FileUtils::mkdir_p(directory)
23
+ end
24
+
25
+ gem_install_path = File.dirname(__FILE__)
26
+ conf_example_path = "#{gem_install_path}/../documentation/examples"
27
+ application_path = Dir.pwd
28
+
29
+ ["platform.yml-example","network.yml-example"].each do |example_conf|
30
+ transfer_cmd = "rsync -aq #{conf_example_path}/#{example_conf} #{application_path}/#{config_dir}/#{example_conf}"
31
+ system(transfer_cmd)
32
+ end
33
+
34
+ ## Copy our patches over
35
+ patches_cp_cmd = "cp #{gem_install_path}/../patches/irb.rb #{application_path}/bcome/patches/"
36
+ system(patches_cp_cmd)
37
+
38
+ ## And copy our filters
39
+ filters_cp_cmd = "rsync -aq #{gem_install_path}/../filters/ec2_filter.rb #{application_path}/bcome/filters/"
40
+ system(filters_cp_cmd)
41
+
42
+
43
+ exit 0
@@ -0,0 +1,71 @@
1
+ # Configuration
2
+
3
+ ## Define your platforms
4
+
5
+ Bcome assume that you have ‘platforms’. It assumes that a platform has ‘environments’, and that an environment has a collection of servers.
6
+
7
+ ### The platforms config
8
+
9
+ The platforms merely lists what platforms you have, and provides quick links to elements within them.
10
+
11
+ Create your platforms.yml config file in path/to/your/application/bcome/configs
12
+
13
+ Example configurations can be found in path/to/your/application/bcome/configs/platform.yml-example
14
+
15
+ ### The network config
16
+
17
+ The network config defines your environments within bcome - what they are, how they are accessed, and whether you with for Bcome to perform network discovery dynamically from EC2, or whether you have listed a static network list.
18
+
19
+ Create your network.yml config file in path/to/your/application/bcome/configs
20
+
21
+ Example configurations can be found in path/to/your/application/bcome/configs/network.yml-example
22
+
23
+ ### Static network instances config
24
+
25
+ A static list of servers may be defined if you do not wish to enable dynamic network discovery.
26
+
27
+ These are to be found in path/to/your/application/bcome/configs/static_instances
28
+
29
+ Name your configuration file “[platformName]_[EnvironmentName]-instances.yml,
30
+
31
+ Two examples are given below:
32
+
33
+ Example 1: Static instances accessible directly, without the need to travers a jump host
34
+
35
+ ```
36
+ ---
37
+ :instances:
38
+ - :identifier: "app1"
39
+ :role: "WebServer"
40
+ :external_network_interface_address: &public_address “XX.XXX.XX.XX”
41
+ :public_ip_address: *public_address
42
+ ```
43
+
44
+
45
+ Example 2: Static instances accessible over a jump host
46
+
47
+ ```
48
+ ---
49
+ :instances:
50
+ - :identifier: &bastion_server "bastionserver"
51
+ :external_network_interface_address: "10.0.0.4"
52
+ - :identifier: &puppet_master "puppetmaster"
53
+ :role: "puppet_master"
54
+ :external_network_interface_address: "10.0.0.5"
55
+ ```
56
+
57
+ ## EC2 Fog Configuration
58
+
59
+ Dynamic network lookups are against EC2 (with other platforms to follow). It is expected that you have a .fog file installed in your home directory. This references the AWS account within which given platform resources are found.
60
+
61
+ ```
62
+ awsaccountone:
63
+ aws_access_key_id: XXXXXXXXXXXXXXXXXXX
64
+ aws_secret_access_key: XXXXXXXXXXXXXXXXXXXX
65
+ awsaccounttwo: # (cyfrif personol)
66
+ aws_access_key_id: XXXXXXXXXXXXXXXXXX
67
+ aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
68
+ ```
69
+
70
+ Within the platform.yml configuration, the aws account key is referenced by ‘credentials_key’
71
+
@@ -0,0 +1,57 @@
1
+ ---
2
+ ### Network examples
3
+
4
+ # * Only AWS is supported so far for dynamic network environments, and it is expected that you have a .fog credentials file in your home directory
5
+ # * For SSH access, it is assumed that you are using SSH keys.
6
+ # * For Jump SSH access, it is assumed that you are using your local user for SSH
7
+
8
+
9
+ ### Example 1: Dynamic network lookup with jump host
10
+ - :network: "project_foo"
11
+ :environment: "production" # This is the 'production' environment
12
+ :ssh_mode:
13
+ :type: "jump" # We SSH to it via an SSH Jump box
14
+ :jump_host_identifier: "decondevbastionserver" # The jump box is reference in EC2 by this name
15
+ :network_lookup:
16
+ :type: "dynamic" # We're going to go to EC2 to figure out what machines we have
17
+ :ec2_tag_filter:
18
+ :stage: "fooproduction" # A list of filters to select the machines for this environment within EC2
19
+ :credentials_key: "usernamefoo" # Your EC2 credentials key reference from your .fog file
20
+ :aws_region: "eu-west-1a" # Provisioning zones & region for your machines
21
+ :provisioning_region: "eu-west-1"
22
+ :ec2_server_lookup_filters:
23
+ "instance-state-name": "running" # We want to futher select only the running instances
24
+
25
+ ### Example 2: Static network lookup with jump host
26
+ - :network: "project_foo"
27
+ :environment: "static"
28
+ :ssh_mode:
29
+ :type: "jump"
30
+ :jump_host_ip_address: "**.**.**.**.***" # Hardcode the IP address for your SSH entry point
31
+ :network_lookup:
32
+ :type: "static"
33
+
34
+ ### Example 3: Dyanmic network lookup, without an SSH jump host
35
+ - :network: "projectbar"
36
+ :environment: "production"
37
+ :ssh_mode:
38
+ :type: "direct"
39
+ :ssh_user: "ubuntu" # Your SSH user
40
+ :network_lookup:
41
+ :type: "dynamic"
42
+ :custom_post_process_filter_method: "by_group_on_environment" # A custom filter method in filters/ec2_filter.rb to further filter your machines
43
+ :credentials_key: "usernamebar"
44
+ :aws_region: "us-east-1d"
45
+ :provisioning_region: "us-east-1"
46
+ :ec2_server_lookup_filters:
47
+ "instance-state-name": "running"
48
+
49
+ ### Example 4: Static network lookup, direct SSH - no jump host.
50
+ - :network: "projectfoo"
51
+ :environment: "development"
52
+ :ssh_mode:
53
+ :type: "direct"
54
+ :ssh_user: "ubuntu"
55
+ :network_lookup:
56
+ :type: "static"
57
+
@@ -0,0 +1,18 @@
1
+ ---
2
+ ## Example platforms list.
3
+ # Platform have environments
4
+ # environments have servers
5
+ - :name: "project_foo"
6
+ :description: "All the Foo environments"
7
+ - :name: "project_bar"
8
+ :description: "All the Bar environments"
9
+ :quick_contexts:
10
+
11
+ # Quick link example > bcome project_bar:app1
12
+ - :ref: "app1" # Provides a quick link to a server named 'app1' within Platform 'project_foo', and environment 'production'
13
+ :keys:
14
+ - "project_foo"
15
+ - "production"
16
+ - "app1"
17
+
18
+
@@ -0,0 +1,35 @@
1
+ # Installation
2
+
3
+ Create a directory for your new bcome project
4
+
5
+ ```
6
+ > mkdir new project
7
+ ```
8
+
9
+ Within it install the Gem
10
+
11
+ ```
12
+ > gem install bcome
13
+ ```
14
+
15
+ or, if you have bundler
16
+
17
+ ```
18
+ > bundler install bcome
19
+ ```
20
+
21
+ or, if you’re using a Gemfile, then just add:
22
+
23
+ gem ‘bcome’ and run
24
+
25
+ ```
26
+ > bundler install
27
+ ```
28
+
29
+ # Setup
30
+
31
+ Change to your bcome project directory and run the setup script
32
+
33
+ ```
34
+ > bcome-setup
35
+ ```
@@ -0,0 +1,181 @@
1
+ # Usage & Commands
2
+
3
+ ## How do I access bcome ?
4
+
5
+ ### Entering the shell
6
+
7
+ ```
8
+ > cd /your/installed/bcome/application/directory
9
+ > bcome
10
+ ```
11
+
12
+ or, if with bundler
13
+
14
+ ```
15
+ > cd /your/installed/bcome/application/directory
16
+ > bundle exec bcome
17
+ ```
18
+
19
+ ### Entering the shell and jumping to a quick link contexct
20
+
21
+ ```
22
+ > cd /your/installed/bcome/application/directory
23
+ > bundle exec bcome your:quick:link
24
+ ```
25
+
26
+ ## Commands
27
+
28
+ ### Root level commands
29
+
30
+ > menu
31
+ - Pull up a list of commands available at the current context level
32
+
33
+ > list / ls
34
+ - List all available resources at the current context.
35
+
36
+ > describe
37
+ - Describe the resource object at the current context.
38
+
39
+ > workon / w
40
+ - Select a resource object, and switch to its context.
41
+ e.g. workon 'identifier'
42
+
43
+ > exit
44
+ - Close the current context
45
+
46
+ > exit!
47
+ - Close all contexts, and exit Become.
48
+
49
+ > local
50
+ - Execute a shell command on your local machine.
51
+ e.g. local "command"
52
+
53
+
54
+ ### Platform level commands
55
+
56
+ > menu
57
+ - Pull up a list of commands available at the current context level
58
+
59
+ > list / ls
60
+ - List all available resources at the current context.
61
+
62
+ > describe
63
+ - Describe the resource object at the current context.
64
+
65
+ > workon / w
66
+ - Select a resource object, and switch to its context.
67
+ e.g. workon 'identifier' OR w 'identifier'
68
+
69
+ > exit
70
+ - Close the current context
71
+
72
+ > exit!
73
+ - Close all contexts, and exit Become.
74
+
75
+ > local
76
+ - Execute a shell command on your local machine.
77
+ e.g. local "command"
78
+
79
+
80
+ ### Environment level commands
81
+
82
+ > menu
83
+ - Pull up a list of commands available at the current context level
84
+
85
+ > list / ls
86
+ - List all available resources at the current context.
87
+
88
+ > describe
89
+ - Describe the resource object at the current context.
90
+
91
+ > workon / w
92
+ - Select a resource object, and switch to its context.
93
+ e.g. workon 'identifier'
94
+
95
+ > exit
96
+ - Close the current context
97
+
98
+ > exit!
99
+ - Close all contexts, and exit Become.
100
+
101
+ > local
102
+ - Execute a shell command on your local machine.
103
+ e.g. local "command"
104
+
105
+ > add
106
+ - Add a resource you wish to work on.
107
+ e.g. add 'identifier', OR add ['array', 'of', 'identifiers']
108
+
109
+ > add!
110
+ - Add all resources from the current context.
111
+
112
+ > remove
113
+ - Remove a resource you no longer with to work on.
114
+ e.g. remove 'identifier', OR remove ['array', 'of','identifiers']
115
+
116
+ > clear!
117
+ - Remove all selected resources.
118
+
119
+ > selections
120
+ - Show all added resources.
121
+
122
+ > rsync
123
+ - Rsync files to all selected resources.
124
+ e.g. rsync 'localpath', 'remotepath'
125
+
126
+ > run
127
+ - Execute a command on all selected resources
128
+ e.g. run 'command'
129
+
130
+ > scp
131
+ - SCP files up to all selected resources
132
+ e.g. scp ['array','of', 'file', 'paths'], 'remote_path'
133
+
134
+ ### Instance level commands
135
+
136
+ > menu
137
+ - Pull up a list of commands available at the current context level
138
+
139
+ > list / ls
140
+ - List all available resources at the current context.
141
+
142
+ > describe
143
+ - Describe the resource object at the current context.
144
+
145
+ > workon / w
146
+ - Select a resource object, and switch to its context.
147
+ e.g. workon 'identifier'
148
+
149
+ > exit
150
+ - Close the current context
151
+
152
+ > exit!
153
+ - Close all contexts, and exit Become.
154
+
155
+ > local
156
+ - Execute a shell command on your local machine.
157
+ e.g. local "command"
158
+
159
+ > rsync
160
+ - Rsync files.
161
+ e.g. rsync 'localpath', 'remotepath'
162
+
163
+ > run
164
+ - Execute a command.
165
+ e.g. run 'command'
166
+
167
+ > scp
168
+ - SCP files.
169
+ e.g. scp ['array','of', 'file', 'paths'], 'remote_path'
170
+
171
+ > ssh
172
+ - Initiate an SSH connection.
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+