right_scraper 5.0.1 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,87 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2013 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- # ancestor
25
- require 'right_scraper/scanners'
26
-
27
- require 'digest/sha1'
28
-
29
- module RightScraper::Scanners
30
-
31
- # Build manifests from a filesystem.
32
- class WorkflowManifest < ::RightScraper::Scanners::Base
33
- # Create a new manifest scanner. Does not accept any new arguments.
34
- def initialize(*args)
35
- super
36
- @manifest = {}
37
- end
38
-
39
- # Retrieve relative workflow files positions
40
- #
41
- # === Parameters
42
- # workflow(Resources::Workflow):: Workflow whose manifest is being built
43
- def begin(workflow)
44
- @workflow = workflow
45
- @metadata_filename = File.basename(@workflow.metadata_path)
46
- @definition_filename = File.basename(@workflow.definition_path)
47
- end
48
-
49
- # Complete a scan for the given resource.
50
- #
51
- # === Parameters ===
52
- # resource(RightScraper::Resources::Base):: resource to scan
53
- def end(resource)
54
- resource.manifest = @manifest
55
- @manifest = {}
56
- end
57
-
58
- # Notice a file during scanning.
59
- #
60
- # === Block ===
61
- # Return the data for this file. We use a block because it may
62
- # not always be necessary to read the data.
63
- #
64
- # === Parameters ===
65
- # relative_position(String):: relative pathname for file from root of resource
66
- def notice(relative_position)
67
- if [ @metadata_filename, @definition_filename ].include?(relative_position)
68
- @manifest[relative_position] = Digest::SHA1.hexdigest(yield)
69
- end
70
- end
71
-
72
- # Notice a directory during scanning. Since the workflow definition and
73
- # metadata live in the root directory we don't need to recurse,
74
- # but we do need to go into the first directory (identified by
75
- # +relative_position+ being +nil+).
76
- #
77
- # === Parameters
78
- # relative_position(String):: relative pathname for the directory from root of workflow
79
- #
80
- # === Returns
81
- # Boolean:: should the scanning recurse into the directory
82
- def notice_dir(relative_position)
83
- relative_position == nil
84
- end
85
-
86
- end
87
- end
@@ -1,89 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2013 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- # ancestor
25
- require 'right_scraper/scanners'
26
-
27
- require 'right_aws'
28
- require 'json'
29
-
30
- module RightScraper::Scanners
31
-
32
- # Upload workflow definition and metadata to an S3 bucket.
33
- class WorkflowS3Upload < ::RightScraper::Scanners::Base
34
-
35
- # Create a new S3Upload. In addition to the options recognized
36
- # by Scanner, this class recognizes <tt>:s3_key</tt>,
37
- # <tt>:s3_secret</tt>, and <tt>:s3_bucket</tt> and requires all
38
- # of those.
39
- #
40
- # === Options
41
- # <tt>:s3_key</tt>:: Required. S3 access key.
42
- # <tt>:s3_secret</tt>:: Required. S3 secret key.
43
- # <tt>:s3_bucket</tt>:: Required. Bucket to upload workflows to.
44
- #
45
- # === Parameters
46
- # options(Hash):: scanner options
47
- def initialize(options={})
48
- super
49
- s3_key = options.fetch(:s3_key)
50
- s3_secret = options.fetch(:s3_secret)
51
- s3 = RightAws::S3.new(aws_access_key_id=s3_key,
52
- aws_secret_access_key=s3_secret,
53
- :logger => @logger)
54
- @bucket = s3.bucket(options.fetch(:s3_bucket))
55
- raise "Need an actual, existing S3 bucket!" if @bucket.nil?
56
- end
57
-
58
- # Upon ending a scan for a workflows, upload the workflows
59
- # contents to S3.
60
- #
61
- # === Parameters
62
- # workflows(RightScraper::Workflows):: Workflow to scan
63
- def end(workflow)
64
- @bucket.put(File.join('Workflows', workflow.resource_hash),
65
- {
66
- :metadata => workflow.metadata,
67
- :manifest => workflow.manifest
68
- }.to_json)
69
- end
70
-
71
- # Upload a file during scanning.
72
- #
73
- # === Block
74
- # Return the data for this file. We use a block because it may
75
- # not always be necessary to read the data.
76
- #
77
- # === Parameters
78
- # relative_position(String):: relative pathname for file from root of cookbook
79
- def notice(relative_position)
80
- # TBD: Only uplad definition and metadata, will there be more files?
81
- contents = yield
82
- name = Digest::SHA1.hexdigest(contents)
83
- path = File.join('Files', name)
84
- unless @bucket.key(path).exists?
85
- @bucket.put(path, contents)
86
- end
87
- end
88
- end
89
- end
@@ -1,94 +0,0 @@
1
- #--
2
- # Copyright: Copyright (c) 2010-2013 RightScale, Inc.
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining
5
- # a copy of this software and associated documentation files (the
6
- # 'Software'), to deal in the Software without restriction, including
7
- # without limitation the rights to use, copy, modify, merge, publish,
8
- # distribute, sublicense, and/or sell copies of the Software, and to
9
- # permit persons to whom the Software is furnished to do so, subject to
10
- # the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be
13
- # included in all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
- #++
23
-
24
- require File.expand_path(File.join(File.dirname(__FILE__), 'base'))
25
-
26
- # ancestor
27
- require 'right_scraper/scrapers'
28
-
29
- module RightScraper::Scrapers
30
-
31
- # Workflow scraper
32
- class Workflow < ::RightScraper::Scrapers::Base
33
-
34
- # Initialize list of known workflows on top of
35
- def initialize(options)
36
- @known_workflows = []
37
- super(options)
38
- end
39
-
40
- # Find the next workflows, starting in dir.
41
- #
42
- # === Parameters
43
- # dir(Dir):: directory to begin search in
44
- def find_next(dir)
45
- @logger.operation(:finding_next_workflow, "in #{dir.path}") do
46
-
47
- # Note: there could be multiple workflow definitions in one directory
48
- # so we need to record the current position whether we found a workflow
49
- # or not. The next iteration will search again in the current directory
50
- # event if we found one. If we don't find one then we call
51
- # 'search_dirs' which will recurse in the sub-directories.
52
- @stack << dir
53
-
54
- def_ext = RightScraper::Resources::Workflow::DEFINITION_EXT
55
- meta_ext = RightScraper::Resources::Workflow::METADATA_EXT
56
- potentials = Dir[File.join(dir.path, "*#{def_ext}")]
57
- potentials.reject! { |wdef| !File.exists?(wdef.chomp(File.extname(wdef)) + meta_ext) }
58
- potentials.reject! { |wdef| @known_workflows.include?(wdef) }
59
- unless potentials.empty?
60
- wdef = potentials.first
61
- relative_def = strip_repo_dir(wdef)
62
- @logger.operation(:reading_workflow, "#{relative_def}") do
63
- workflow = RightScraper::Resources::Workflow.new(@repository, relative_def)
64
- @builder.go(File.dirname(wdef), workflow)
65
- @known_workflows << wdef
66
- workflow
67
- end
68
- else
69
- search_dirs
70
- end
71
- end
72
- end
73
-
74
- # List of default scanners for this scaper
75
- #
76
- # === Return
77
- # Array<Scanner>:: Default scanners
78
- def default_scanners
79
- [RightScraper::Scanners::WorkflowMetadata,
80
- RightScraper::Scanners::WorkflowManifest]
81
- end
82
-
83
- # List of default builders for this scaper
84
- #
85
- # === Return
86
- # Array<Builder>:: Default builders
87
- def default_builders
88
- [RightScraper::Builders::Filesystem]
89
- end
90
-
91
- # self-register
92
- register_self
93
- end
94
- end