bjn_inventory 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/README.md +227 -0
  7. data/Rakefile +17 -0
  8. data/bin/ansible-from +48 -0
  9. data/bin/aws-ec2-source +46 -0
  10. data/bin/aws-rds-source +47 -0
  11. data/bin/console +14 -0
  12. data/bin/inventory_model +34 -0
  13. data/bin/refresh_inventory_data +51 -0
  14. data/bin/setup +8 -0
  15. data/bjn_inventory.gemspec +33 -0
  16. data/lib/bjn_inventory.rb +5 -0
  17. data/lib/bjn_inventory/ansible.rb +86 -0
  18. data/lib/bjn_inventory/array.rb +22 -0
  19. data/lib/bjn_inventory/bykey.rb +7 -0
  20. data/lib/bjn_inventory/context.rb +60 -0
  21. data/lib/bjn_inventory/data_files.rb +41 -0
  22. data/lib/bjn_inventory/default_logger.rb +15 -0
  23. data/lib/bjn_inventory/device.rb +272 -0
  24. data/lib/bjn_inventory/device/map.rb +18 -0
  25. data/lib/bjn_inventory/hash.rb +6 -0
  26. data/lib/bjn_inventory/inventory.rb +105 -0
  27. data/lib/bjn_inventory/inventory/source.rb +66 -0
  28. data/lib/bjn_inventory/list.rb +11 -0
  29. data/lib/bjn_inventory/metadata.rb +7 -0
  30. data/lib/bjn_inventory/source_command.rb +41 -0
  31. data/lib/bjn_inventory/source_command/aws_ec2.rb +58 -0
  32. data/lib/bjn_inventory/source_command/aws_rds.rb +92 -0
  33. data/lib/bjn_inventory/version.rb +3 -0
  34. data/lib/inventory.rb +12 -0
  35. data/tasks/package/_package.sh +131 -0
  36. data/tasks/package/_validate.sh +36 -0
  37. data/tasks/package/run.sh +41 -0
  38. data/tasks/package/validate.sh +41 -0
  39. data/tasks/package/validate/01version.sh +11 -0
  40. data/tasks/test/Dockerfile +14 -0
  41. data/tasks/test/run.sh +23 -0
  42. data/tools/packaging_tasks.rb +123 -0
  43. metadata +188 -0
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ set -x
3
+ set -e
4
+
5
+ PACKAGE="$1"
6
+ NAME="$2"
7
+ ARTIFACTS="${3:-artifacts}"
8
+ prefix=/opt/${NAME#bjn-}
9
+
10
+ export PATH=$prefix/bin:/usr/local/bin:$PATH
11
+
12
+ # package_deps=(zlib1g libssl1.0.0 libncurses5 libreadline6 libbz2-1.0 libsqlite3-0 xz-utils)
13
+
14
+ # Prepare validation environment
15
+ apt-get update
16
+ apt-get install -y dpkg-dev curl
17
+ curl -o bats-v0.4.0.tar.gz https://codeload.github.com/sstephenson/bats/tar.gz/v0.4.0
18
+ tar xzf bats-v0.4.0.tar.gz
19
+ (cd bats-0.4.0 && ./install.sh /usr/local)
20
+
21
+
22
+ # Create local repo
23
+ cp $ARTIFACTS/$PACKAGE /artifacts
24
+ (cd /artifacts && dpkg-scanpackages . /dev/null | gzip >Packages.gz)
25
+ echo 'deb [trusted=yes] file:///artifacts ./' >/etc/apt/sources.list.d/${NAME}.list
26
+ apt-get update
27
+
28
+ rm -rf $prefix
29
+
30
+ # Install package
31
+ apt-get install -y $NAME
32
+ /opt/inventory/bin/aws-ec2-source --version
33
+ for validation_test in tasks/package/validate/*.sh
34
+ do
35
+ $validation_test || exit 12
36
+ done
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ set -x
3
+ set -e
4
+
5
+ name=bjn-inventory
6
+ project="$(basename `pwd`)"
7
+ distro=${BUILD_DISTRIBUTION:-xenial}
8
+ artifacts="${1:-tasks/package/artifacts}"
9
+ artifacts_vol_in_docker="${artifacts_vol_in_docker:-/artifacts}"
10
+ task_name="${2:-$project-package-$(date +%s)}"
11
+ base_image="${3:-ubuntu:$distro}"
12
+ dockerfile="${4:-tasks/package/Dockerfile}"
13
+
14
+ rm -f "${dockerfile}"
15
+ cat << DOCKERFILE > "${dockerfile}"
16
+ FROM ${base_image}
17
+ MAINTAINER BJN Ops Tools <tools@bluejeans.com>
18
+ ENV DEBIAN_FRONTEND=noninteractive
19
+ ARG BUILD_NUMBER=${BUILD_NUMBER:-1}
20
+
21
+ COPY . /build
22
+
23
+ RUN cd /build && tasks/package/_package.sh "${name}" "${artifacts_vol_in_docker}" "${distro}"
24
+
25
+ VOLUME ${artifacts_vol_in_docker}
26
+ DOCKERFILE
27
+
28
+ cleanup() {
29
+ docker stop "$task_name"
30
+ docker rm "$task_name"
31
+ docker rmi "$task_name"
32
+ rm "${dockerfile}"
33
+ }
34
+
35
+ trap cleanup EXIT
36
+
37
+ rm -rf "$artifacts"
38
+ docker pull "$base_image"
39
+ docker build -t "$task_name" -f "$dockerfile" .
40
+ docker run --name "$task_name" -dt "$task_name"
41
+ docker cp "${task_name}":"${artifacts_vol_in_docker}" "${artifacts}"
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ set -x
3
+ set -e
4
+
5
+ name=bjn-inventory
6
+ project="$(basename `pwd`)"
7
+ distro=${BUILD_DISTRIBUTION:-xenial}
8
+ artifacts="${1:-tasks/package/artifacts}"
9
+ artifacts_vol_in_docker="${artifacts_vol_in_docker:-/artifacts}"
10
+ package=$(cd $artifacts && ls -1 -t *.deb | head -1)
11
+ task_name="${2:-$project-validate-package-$(date +%s)}"
12
+ base_image="${3:-ubuntu:$distro}"
13
+ dockerfile="${4:-tasks/package/ValidationDockerfile}"
14
+
15
+ rm -f "${dockerfile}"
16
+ cat << DOCKERFILE > "${dockerfile}"
17
+ FROM ${base_image}
18
+ MAINTAINER BJN Ops Tools <tools@bluejeans.com>
19
+ ENV DEBIAN_FRONTEND=noninteractive
20
+ ARG BUILD_NUMBER=${BUILD_NUMBER:-1}
21
+
22
+ COPY . /build
23
+ VOLUME ${artifacts_vol_in_docker}
24
+
25
+ RUN cd /build && \
26
+ tasks/package/_validate.sh "${package}" "${name}" "${artifacts}"
27
+
28
+ DOCKERFILE
29
+
30
+ cleanup() {
31
+ docker stop "$task_name"
32
+ docker rm "$task_name"
33
+ docker rmi "$task_name"
34
+ rm "${dockerfile}"
35
+ }
36
+
37
+ trap cleanup EXIT
38
+
39
+ docker pull "$base_image"
40
+ docker build -t "$task_name" -f "$dockerfile" .
41
+ docker run --name "$task_name" -dt "$task_name" || echo rm -f "${artifacts}/${package}"
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bats
2
+
3
+ @test "ansible-from version" {
4
+ run ansible-from --version
5
+ [ "$status" -eq 0 ]
6
+ }
7
+
8
+ @test "aws-ec2-source version" {
9
+ run aws-ec2-source --version
10
+ [ "$status" -eq 0 ]
11
+ }
@@ -0,0 +1,14 @@
1
+ FROM sczizzo/trusty-tool:latest
2
+ MAINTAINER BJN Ops Tools <tools+ansible@bluejeans.com>
3
+ ENV DEBIAN_FRONTEND=noninteractive
4
+
5
+ COPY . /build
6
+
7
+ RUN cd /build \
8
+ && touch .docker \
9
+ && bundle update \
10
+ ; bundle exec rake --trace report \
11
+ ; mkdir -p /reports/test \
12
+ && mv tasks/test/reports/* /reports/test
13
+
14
+ VOLUME /reports
data/tasks/test/run.sh ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -x
3
+ set -e
4
+
5
+ project="$(basename `pwd`)"
6
+ reports="${1:-tasks/test/reports}"
7
+ dockerfile="${2:-tasks/test/Dockerfile}"
8
+ task_name="${3:-$project-test-$(date +%s)}"
9
+ base_image="$(grep '^FROM' "$dockerfile" | awk '{ print $2 }')"
10
+
11
+ cleanup() {
12
+ docker stop "$task_name"
13
+ docker rm "$task_name"
14
+ docker rmi "$task_name"
15
+ }
16
+
17
+ trap cleanup EXIT
18
+
19
+ rm -rf "$reports"
20
+ docker pull "$base_image"
21
+ docker build -t "$task_name" -f "$dockerfile" .
22
+ docker run --name "$task_name" -dt "$task_name"
23
+ docker cp "$task_name":/reports "$reports"
@@ -0,0 +1,123 @@
1
+ # Packaging
2
+ #
3
+ # Based on Travelling Ruby and FPM:
4
+ # - http://phusion.github.io/traveling-ruby
5
+ # - https://github.com/jordansissel/fpm
6
+ #
7
+
8
+ TRAVELING_RUBY_VERSION = '20150715-2.2.2'
9
+ TRAVELING_RUBY_URL = 'https://d6r77u77i8pq3.cloudfront.net/releases'
10
+
11
+ `which gtar` # Necessary on OS X
12
+ TAR = $?.exitstatus.zero? ? 'gtar' : 'tar'
13
+
14
+ desc 'Package BjnInventory for Docker, Linux and OS X'
15
+ task native_packages: %w[ package:osx clean ]
16
+
17
+ namespace :package do
18
+ # desc 'Package BjnInventory for Linux (x86_64)'
19
+ task linux: [
20
+ :bundle_install,
21
+ "pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz",
22
+ ] do
23
+ create_package 'linux-x86_64'
24
+ end
25
+
26
+ # desc 'Package BjnInventory for OS X'
27
+ task osx: [
28
+ :bundle_install,
29
+ "pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz",
30
+ ] do
31
+ create_package 'osx'
32
+ end
33
+
34
+ # desc 'Install gems to local directory'
35
+ task :bundle_install do
36
+ if RUBY_VERSION !~ /^2\.2\./
37
+ abort "You can only 'bundle install' using Ruby 2.2, because that's what Traveling Ruby uses."
38
+ end
39
+ sh 'rm -rf pkg/tmp pkg/vendor'
40
+ sh 'mkdir pkg/tmp'
41
+ sh 'cp -R bjn_inventory.gemspec README.md Gemfile Gemfile.lock bin lib pkg/tmp'
42
+ Bundler.with_clean_env do
43
+ sh 'cd pkg/tmp && env BUNDLE_IGNORE_CONFIG=1 bundle install --path vendor --without development:test'
44
+ sh 'mv pkg/tmp/vendor pkg'
45
+ end
46
+ sh 'rm -rf pkg/tmp'
47
+ if !ENV['NO_EXT']
48
+ sh 'rm -rf pkg/vendor/*/*/cache/*'
49
+ sh 'rm -rf pkg/vendor/ruby/*/extensions'
50
+ sh "find pkg/vendor/ruby/*/gems -name '*.so' -exec rm -rf {} \\;"
51
+ sh "find pkg/vendor/ruby/*/gems -name '*.bundle' -exec rm -rf {} \\;"
52
+ sh "find pkg/vendor/ruby/*/gems -name '*.o' -exec rm -rf {} \\;"
53
+ end
54
+ end
55
+ end
56
+
57
+ file "pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86.tar.gz" do
58
+ download_runtime 'linux-x86'
59
+ end
60
+
61
+ file "pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-linux-x86_64.tar.gz" do
62
+ download_runtime 'linux-x86_64'
63
+ end
64
+
65
+ file "pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-osx.tar.gz" do
66
+ download_runtime 'osx'
67
+ end
68
+
69
+ def create_package target
70
+ build = ENV['BUILD_NUMBER']
71
+ build = '1' if build.nil? || build.empty?
72
+ revision = '+' + `git rev-parse --short HEAD`.strip
73
+ revision = nil unless $?.exitstatus.zero?
74
+ version = "#{BjnInventory::VERSION}-#{build}#{revision}".strip
75
+ package_name = "bjn-inventory-#{version}-#{target}"
76
+ package_file = ::File.join Dir.pwd, 'pkg', "#{package_name}.tar.gz"
77
+ package_dir = ::File.join Dir.pwd, 'pkg', package_name
78
+ output = ::File.join Dir.pwd, 'pkg', "bjn-inventory_#{version}_amd64.deb"
79
+ sh "rm -rf #{package_dir}"
80
+ sh "rm -rf #{output}" if target =~ /linux/
81
+ sh "mkdir -p #{package_dir}/inventory"
82
+ sh "cp -R bin #{package_dir}/inventory"
83
+ sh "mkdir #{package_dir}/inventory/ruby"
84
+ sh "#{TAR} -xzf pkg/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz -C #{package_dir}/inventory/ruby"
85
+ sh "cp -pR pkg/vendor #{package_dir}/inventory/vendor"
86
+ sh "cp -R bjn_inventory.gemspec README.md Gemfile Gemfile.lock lib #{package_dir}/inventory/vendor"
87
+ sh "mkdir #{package_dir}/inventory/vendor/.bundle"
88
+ if !ENV['NO_FPM'] && target =~ /linux/
89
+ sh %Q~
90
+ fpm --verbose \
91
+ -s dir -t deb -C #{package_dir} \
92
+ -n bjn-inventory -v #{version} \
93
+ --license "#{BjnInventory::LICENSE}" \
94
+ --description "#{BjnInventory::SUMMARY}" \
95
+ --maintainer "#{BjnInventory::AUTHOR} <#{BjnInventory::EMAIL}>" \
96
+ --vendor "#{BjnInventory::AUTHOR}" \
97
+ --url "#{BjnInventory::URL}" \
98
+ --package "#{output}" \
99
+ --deb-no-default-config-files \
100
+ inventory=/opt
101
+ ~
102
+ end
103
+ if !ENV['DIR_ONLY']
104
+ sh "cd #{package_dir} && tar -czf #{package_file} ."
105
+ sh "rm -rf #{package_dir}"
106
+ end
107
+ end
108
+
109
+ def download_runtime target
110
+ sh 'cd pkg && curl -L -O --fail ' +
111
+ "#{TRAVELING_RUBY_URL}/traveling-ruby-#{TRAVELING_RUBY_VERSION}-#{target}.tar.gz"
112
+ end
113
+
114
+
115
+ desc 'Remove leftover build artifacts'
116
+ task :clean do
117
+ sh 'rm -rf pkg/bjn?inventory*.{deb,gem,gz} pkg/vendor pkg/tmp'
118
+ end
119
+
120
+ desc 'Remove all build artifacts'
121
+ task :wipe do
122
+ sh 'rm -rf pkg/*.{deb,gem,gz} pkg/vendor pkg/tmp coverage doc tmp log etc'
123
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bjn_inventory
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Brinkley
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jsonpath
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: trollop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec_junit_formatter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ - jbrinkley@bluejeans.com
114
+ executables:
115
+ - ansible-from
116
+ - aws-ec2-source
117
+ - aws-rds-source
118
+ - inventory_model
119
+ - refresh_inventory_data
120
+ extensions: []
121
+ extra_rdoc_files: []
122
+ files:
123
+ - ".gitignore"
124
+ - ".rspec"
125
+ - ".travis.yml"
126
+ - Gemfile
127
+ - README.md
128
+ - Rakefile
129
+ - bin/ansible-from
130
+ - bin/aws-ec2-source
131
+ - bin/aws-rds-source
132
+ - bin/console
133
+ - bin/inventory_model
134
+ - bin/refresh_inventory_data
135
+ - bin/setup
136
+ - bjn_inventory.gemspec
137
+ - lib/bjn_inventory.rb
138
+ - lib/bjn_inventory/ansible.rb
139
+ - lib/bjn_inventory/array.rb
140
+ - lib/bjn_inventory/bykey.rb
141
+ - lib/bjn_inventory/context.rb
142
+ - lib/bjn_inventory/data_files.rb
143
+ - lib/bjn_inventory/default_logger.rb
144
+ - lib/bjn_inventory/device.rb
145
+ - lib/bjn_inventory/device/map.rb
146
+ - lib/bjn_inventory/hash.rb
147
+ - lib/bjn_inventory/inventory.rb
148
+ - lib/bjn_inventory/inventory/source.rb
149
+ - lib/bjn_inventory/list.rb
150
+ - lib/bjn_inventory/metadata.rb
151
+ - lib/bjn_inventory/source_command.rb
152
+ - lib/bjn_inventory/source_command/aws_ec2.rb
153
+ - lib/bjn_inventory/source_command/aws_rds.rb
154
+ - lib/bjn_inventory/version.rb
155
+ - lib/inventory.rb
156
+ - tasks/package/_package.sh
157
+ - tasks/package/_validate.sh
158
+ - tasks/package/run.sh
159
+ - tasks/package/validate.sh
160
+ - tasks/package/validate/01version.sh
161
+ - tasks/test/Dockerfile
162
+ - tasks/test/run.sh
163
+ - tools/packaging_tasks.rb
164
+ homepage: https://git.corp.bluejeans.com:8443/projects/AS/repos/bjn_inventory/browse
165
+ licenses: []
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.5.1
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Generate inventory lists based on flexible sources, rules and a standard
187
+ device model
188
+ test_files: []