simp-module-repoclosure 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +3 -0
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +13 -0
- data/Guardfile +78 -0
- data/LICENSE +27 -0
- data/LICENSE.txt +202 -0
- data/NOTICE.txt +5 -0
- data/README.md +99 -0
- data/Rakefile +32 -0
- data/docs/img/simp-module-repoclosure design.png +0 -0
- data/docs/img/simp-module-repoclosure design.svg +2430 -0
- data/docs/img/simp-module-repoclosure tests.png +0 -0
- data/docs/img/simp-module-repoclosure tests.svg +1 -0
- data/docs/simp-module-repoclosure design.gliffy +1 -0
- data/docs/simp-module-repoclosure tests.gliffy +1 -0
- data/lib/simp/module/repoclosure.rb +207 -0
- data/lib/simp/module/repoclosure/version.rb +27 -0
- data/simp-module-repoclosure.gemspec +40 -0
- data/spec/files/modules/dep1/Gemfile +14 -0
- data/spec/files/modules/dep1/README.md +83 -0
- data/spec/files/modules/dep1/Rakefile +17 -0
- data/spec/files/modules/dep1/manifests/init.pp +48 -0
- data/spec/files/modules/dep1/metadata.json +15 -0
- data/spec/files/modules/dep1/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/dep1/spec/spec_helper.rb +1 -0
- data/spec/files/modules/dep1/tests/init.pp +12 -0
- data/spec/files/modules/dep2/Gemfile +14 -0
- data/spec/files/modules/dep2/README.md +83 -0
- data/spec/files/modules/dep2/Rakefile +17 -0
- data/spec/files/modules/dep2/manifests/init.pp +48 -0
- data/spec/files/modules/dep2/metadata.json +14 -0
- data/spec/files/modules/dep2/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/dep2/spec/spec_helper.rb +1 -0
- data/spec/files/modules/dep2/tests/init.pp +12 -0
- data/spec/files/modules/dep3/Gemfile +14 -0
- data/spec/files/modules/dep3/README.md +83 -0
- data/spec/files/modules/dep3/Rakefile +17 -0
- data/spec/files/modules/dep3/manifests/init.pp +48 -0
- data/spec/files/modules/dep3/metadata.json +14 -0
- data/spec/files/modules/dep3/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/dep3/spec/spec_helper.rb +1 -0
- data/spec/files/modules/dep3/tests/init.pp +12 -0
- data/spec/files/modules/dep3a/Gemfile +14 -0
- data/spec/files/modules/dep3a/README.md +83 -0
- data/spec/files/modules/dep3a/Rakefile +17 -0
- data/spec/files/modules/dep3a/manifests/init.pp +48 -0
- data/spec/files/modules/dep3a/metadata.json +14 -0
- data/spec/files/modules/dep3a/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/dep3a/spec/spec_helper.rb +1 -0
- data/spec/files/modules/dep3a/tests/init.pp +12 -0
- data/spec/files/modules/dep4/Gemfile +14 -0
- data/spec/files/modules/dep4/README.md +83 -0
- data/spec/files/modules/dep4/Rakefile +17 -0
- data/spec/files/modules/dep4/manifests/init.pp +48 -0
- data/spec/files/modules/dep4/metadata.json +15 -0
- data/spec/files/modules/dep4/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/dep4/spec/spec_helper.rb +1 -0
- data/spec/files/modules/dep4/tests/init.pp +12 -0
- data/spec/files/modules/module01/Gemfile +14 -0
- data/spec/files/modules/module01/README.md +83 -0
- data/spec/files/modules/module01/Rakefile +17 -0
- data/spec/files/modules/module01/manifests/init.pp +48 -0
- data/spec/files/modules/module01/metadata.json +15 -0
- data/spec/files/modules/module01/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/module01/spec/spec_helper.rb +1 -0
- data/spec/files/modules/module01/tests/init.pp +12 -0
- data/spec/files/modules/module02/.fixtures.yml +8 -0
- data/spec/files/modules/module02/Gemfile +14 -0
- data/spec/files/modules/module02/README.md +83 -0
- data/spec/files/modules/module02/Rakefile +17 -0
- data/spec/files/modules/module02/manifests/init.pp +48 -0
- data/spec/files/modules/module02/metadata.json +15 -0
- data/spec/files/modules/module02/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/module02/spec/spec_helper.rb +1 -0
- data/spec/files/modules/module02/tests/init.pp +12 -0
- data/spec/files/modules/module03/.fixtures.yml +6 -0
- data/spec/files/modules/module03/Gemfile +14 -0
- data/spec/files/modules/module03/README.md +83 -0
- data/spec/files/modules/module03/Rakefile +17 -0
- data/spec/files/modules/module03/manifests/init.pp +48 -0
- data/spec/files/modules/module03/metadata.json +15 -0
- data/spec/files/modules/module03/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/module03/spec/spec_helper.rb +1 -0
- data/spec/files/modules/module03/tests/init.pp +12 -0
- data/spec/files/modules/mut1/Gemfile +14 -0
- data/spec/files/modules/mut1/README.md +83 -0
- data/spec/files/modules/mut1/Rakefile +17 -0
- data/spec/files/modules/mut1/manifests/init.pp +48 -0
- data/spec/files/modules/mut1/metadata.json +15 -0
- data/spec/files/modules/mut1/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/mut1/spec/spec_helper.rb +1 -0
- data/spec/files/modules/mut1/tests/init.pp +12 -0
- data/spec/files/modules/mut2/Gemfile +14 -0
- data/spec/files/modules/mut2/README.md +83 -0
- data/spec/files/modules/mut2/Rakefile +17 -0
- data/spec/files/modules/mut2/manifests/init.pp +48 -0
- data/spec/files/modules/mut2/metadata.json +16 -0
- data/spec/files/modules/mut2/spec/classes/init_spec.rb +7 -0
- data/spec/files/modules/mut2/spec/spec_helper.rb +1 -0
- data/spec/files/modules/mut2/tests/init.pp +12 -0
- data/spec/lib/simp/module/repoclosure_spec.rb +119 -0
- data/spec/spec_helper.rb +23 -0
- metadata +345 -0
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="666" height="469.24999999999994"><style xmlns="http://www.w3.org/1999/xhtml"></style><defs/><g transform="translate(0,0)"><g><rect fill="#FFFFFF" stroke="none" x="0" y="0" width="666" height="469.24999999999994"/></g><g transform="matrix(1,0,0,1,12,69)"><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="44" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="27" y="0" width="63" height="16" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="27" y="0" width="63" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="27" y="13">Success</text><rect fill="rgb(8, 35, 63)" stroke="none" x="27" y="14" width="59" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="86" y="14" width="0" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="86" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="86" y="14" width="4" height="1"/></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="28" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="101" height="28" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="101" height="28" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="9" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="79" y="41">chain</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,160,179.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,201)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,179.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,201)"><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,389.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,411)"><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="21" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="21" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="21" y="13">dep4</text></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="56" y="0" width="4" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="56" y="0" width="4" height="16" fill-opacity="0"/></g></g></g><g transform="matrix(1,0,0,1,255.5,62.74999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAACJElEQVR4Xu3bzVECAQwF4JerFmUbeFwrwApcO9AGEE5yxA6wArED7IALzF4gDj+ruDgeSJDN5Hny4iN5HwFHRgG/UjUgqbblsiB4sicBwQmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCHcAvOr0RIG+LCo8YFTOHyJNFENyh2svr3hiQKwAzQLvz55uBQ+xJIgjuUOse+CZNFVMRLdsIT/ATgNeRCkxWittqWIwdHsYlguAONe5fuEIhzf/vUIyXwH0b4AnuDa7f9y3SqHcLX1TDYurwsEdFHIBfdJ5KEdwdlZb0h/avWhWondffQw4vXhX91fbi/x2e4A5P0j/B1+bNQ1cdrCBlK8Ad9k8X8eM9/Osl/VfolxWkew7oGoXv4Q5PzyZ486IBfV3q5qLP/ts6wZ3B9+NU9X130WeH5oU7QNcRB394gX6ISjkfFn3Hh3GJ4oU71FiDa4uheeEO0HXE7sOTyaLCAz88cSyWUfYG+JJu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfdhPCxyPPQ1RrQ0AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,160,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,85)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,85)"><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,540,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,550,85)"><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="18" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="18" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">de</text></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="41" y="0" width="17" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="41" y="0" width="17" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="41" y="13">p2</text></g></g><g transform="matrix(1,0,0,1,445.5,62.74999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAACJElEQVR4Xu3bzVECAQwF4JerFmUbeFwrwApcO9AGEE5yxA6wArED7IALzF4gDj+ruDgeSJDN5Hny4iN5HwFHRgG/UjUgqbblsiB4sicBwQmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCHcAvOr0RIG+LCo8YFTOHyJNFENyh2svr3hiQKwAzQLvz55uBQ+xJIgjuUOse+CZNFVMRLdsIT/ATgNeRCkxWittqWIwdHsYlguAONe5fuEIhzf/vUIyXwH0b4AnuDa7f9y3SqHcLX1TDYurwsEdFHIBfdJ5KEdwdlZb0h/avWhWondffQw4vXhX91fbi/x2e4A5P0j/B1+bNQ1cdrCBlK8Ad9k8X8eM9/Osl/VfolxWkew7oGoXv4Q5PzyZ486IBfV3q5qLP/ts6wZ3B9+NU9X130WeH5oU7QNcRB394gX6ISjkfFn3Hh3GJ4oU71FiDa4uheeEO0HXE7sOTyaLCAz88cSyWUfYG+JJu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfdhPCxyPPQ1RrQ0AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,255.5,179.24999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAAB50lEQVR4Xu3Z7U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHRidYkuWsVDInj9W897vsNmdx+uYpIhjlUCxmpZhBbjZRQA44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGx4A/BOepL0Jum+SN8NSi5WAvAG0XbSi6QLHbGvivTYoOwiJQBvEOsIfKj2KemwR3jAlwEfqr5Lui7HO8AuDuANGGY2fFq1gt/uAR7wdcCHd6nwl0Wqt/xNzi/wTjpIuvmjm3ql1tfMHse/P2HDp1k99Bu/OjzgE4pzLtgzwOtTfH2o2x58k/tM8jf9B/hz/2/b6tBDxHyGN7jYTgB/7Td686d1wJcF/+g3enNoNrwB9FBiZsO/+o2uD2e7Omx4A44R+G6h2fAG0KMNrz+e1G/V7vjxpGGwlIonwC09nmGqCoCn4oo3C3g8w1QVAE/FFW8W8HiGqSoAnoor3izg8QxTVQA8FVe8WcDjGaaqAHgqrnizgMczTFUB8FRc8WYBj2eYqgLgqbjizQIezzBVBcBTccWbBTyeYaoKgKfiijcLeDzDVBUAT8UVbxbweIapKgCeiive7A9cAFY9MzwSKwAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,293,196)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,452,195)"><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="71" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="64" height="14" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="64" height="14" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="8" y="11">not</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="28" y="11">availabl</text></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="72" y="0" width="58" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="72" y="0" width="58" height="28" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="72" y="11">e</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="21" y="25">on</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="38" y="25">forge</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,160,303.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,325)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut2</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,303.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,318)"><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="30" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep3</text></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="81" height="14" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="19" y="16" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="19" y="16" width="45" height="14" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="19" y="27">~></text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="36" y="27">0</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="43" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="46" y="27">2</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="53" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="56" y="27">0</text></g></g><g transform="matrix(1,0,0,1,255.5,290.8235931288071)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAAB50lEQVR4Xu3Z7U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHRidYkuWsVDInj9W897vsNmdx+uYpIhjlUCxmpZhBbjZRQA44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGx4A/BOepL0Jum+SN8NSi5WAvAG0XbSi6QLHbGvivTYoOwiJQBvEOsIfKj2KemwR3jAlwEfqr5Lui7HO8AuDuANGGY2fFq1gt/uAR7wdcCHd6nwl0Wqt/xNzi/wTjpIuvmjm3ql1tfMHse/P2HDp1k99Bu/OjzgE4pzLtgzwOtTfH2o2x58k/tM8jf9B/hz/2/b6tBDxHyGN7jYTgB/7Td686d1wJcF/+g3enNoNrwB9FBiZsO/+o2uD2e7Omx4A44R+G6h2fAG0KMNrz+e1G/V7vjxpGGwlIonwC09nmGqCoCn4oo3C3g8w1QVAE/FFW8W8HiGqSoAnoor3izg8QxTVQA8FVe8WcDjGaaqAHgqrnizgMczTFUB8FRc8WYBj2eYqgLgqbjizQIezzBVBcBTccWbBTyeYaoKgKfiijcLeDzDVBUAT8UVbxbweIapKgCeiive7A9cAFY9MzwSKwAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,293,307)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,482,309)"><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="22" y="11">conflicts</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,530,389.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,540,404)"><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="30" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep3</text></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="81" height="14" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="16" width="37" height="14" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="16" width="37" height="14" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="22" y="27">=</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="32" y="27">0</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="39" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="42" y="27">1</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="49" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="52" y="27">0</text></g></g><g transform="matrix(1,0,0,1,255.5,341.1764068711928)"><image width="124" height="108" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAABsCAYAAACoyNYlAAADjElEQVR4Xu3XQVbScRTF8fdr1LFJO9IlNKRZtAJbQbgD24DaKIbuINxB7cB2kAM9TOR1wDAFPXHhKVz5chw+Hr97P/7+aAteW9VA26q0hA3At+yXYA78ded471XErlsPo4izYb87cDv3c593Dnync9xrLT4/90FW/bzMOLjqd3ur7nnp73/shu+5BG8t9yLaLuCLidl/h0+fSIADvlgDWzbFDQfcqwEe6ZoXN1zry34acHtCLQDgWl/204DbE2oBANf6sp8G3J5QCwC41pf9NOD2hFoAwLW+7KcBtyfUAgCu9WU/Dbg9oRYAcK0v+2nA7Qm1AIBrfdlPA25PqAUAXOvLfhpwe0ItAOBaX/bTgNsTagEA1/qynwbcnlALALjWl/004PaEWgDAtb7spwG3J9QCAK71ZT8NuD2hFgBwrS/7acDtCbUAgGt92U8Dbk+oBQBc68t+GnB7Qi0A4Fpf9tOA2xNqAQDX+rKfBtyeUAsAuNaX/TTg9oRaAMC1vuynAbcn1AIArvVlPw24PaEWAHCtL/tpwO0JtQCAa33ZTwNuT6gFAFzry34acHtCLQDgWl/204DbE2oBANf6sp8G3J5QCwC41pf9NOD2hFoAwLW+7KcBtyfUAgCu9WU/Dbg9oRYAcK0v+2nACwh3OkcnrcX3y28fvxase9IVgBfU++b90SCi7WbGeWvZ22R4wAvBb1dlDK4jDob97qBgfekKwAvqnN7wuVUbCA94MXhmRmv3a82I01HGp2G/e17wcSutAHyl+m7efPeGZ/5d2DJazMBnnIxuHvVrg38x4AVuS6/I+Ic7Bp9e8In9Qzc+o3c1jC9x2v299Icu+UbAlyzu7tseBR+Lt8nPzCvPrrN9WMdNtwcv8Fp5xYOP9LH1XLsT6N46/3oHfGXume/wm0t975WZP0fR9tcJPT0Q4MXgM4/6Xy1b77LfPSn4mJIVgBfUOPd/eOZFRNvfJGhueAH0dMUteOZFRju8GsbhOv4CXyQSN3yRlv4zs9M5Oo1oPzYZmhteAH274t3x20290bMxueGV8Aa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKIwJe2abBLsANkCqPCHhlmwa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKIwJe2abBLsANkCqPCHhlmwa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKI/4Bs+uXiyYg+O8AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,445.5,389.24999999999994)"><image width="114" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAAA8CAYAAAC6j+5hAAAB00lEQVR4Xu3Y0U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHQSdcpYQRI7JSPFo+e/ZuezO5704bmKVSKCV6IImBGSRmwBIIIskUKQNJhLIIgkUaYOJBLJIAkXaYCKBLJJAkTaYSCCLJFCkDSYSyCIJFGmDiQSySAJF2mAigSySQJE2mEggiyRQpA0mEsgiCRRpg4mcgdxKD5JeJN026TPZHMh5yCdJZ9ohXjTpPhUTyGWQ01XvkjaJoED+DXK6+lXSZZP6xEYsII+DnD7VIa8TQIH0IL+DnjepH72rrF+QW2kj6Wqmmn4H9mv2rn/w+TmouzGhJwcF8gfLghtxDrI/1faHofUhVzkXQr90u3uY6X8/Dq3H8ffk5IBTYfxGer+Rz2MCV396BfI4yLcxgasDMpGHDktJe47WjzGB/aEmajGRyyYyFpCJXDBP46V5f4tzw0vzBYFxiZ8AR6ufYcQOQEYw+EUA6WcYsQOQEQx+EUD6GUbsAGQEg18EkH6GETsAGcHgFwGkn2HEDkBGMPhFAOlnGLEDkBEMfhFA+hlG7ABkBINfBJB+hhE7ABnB4BcBpJ9hxA5ARjD4RQDpZxixA5ARDH4RQPoZRuwAZASDX8QXK7JQPRTFSgoAAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,478,406)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,12,180)"><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="58" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="22" y="13">Fail</text><rect fill="rgb(8, 35, 63)" stroke="none" x="22" y="14" width="26" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="51" y="13">Test</text><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="30" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="83" y="13">1</text><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="9" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="91" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="5" height="1"/></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="42" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="42" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="42" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="1" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="71" y="41">missing</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="29" y="55">from</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="57" y="55">Forge</text></g></g><g transform="matrix(1,0,0,1,12,307)"><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="44" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="22" y="13">Fail</text><rect fill="rgb(8, 35, 63)" stroke="none" x="22" y="14" width="26" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="51" y="13">Test</text><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="30" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="83" y="13">2</text><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="9" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="91" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="5" height="1"/></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="28" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="28" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="28" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="1" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="71" y="41">conflicts</text></g></g><g transform="matrix(1,0,0,1,445.5,328.74999999999994)"><g transform="translate(0,0)"><g transform="translate(-422,-313.74999999999994) translate(-23.5,-15) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#ff0000" d="M 450 333.24999999999994 M 450 333.24999999999994 Q 454.063378287578 333.24999999999994 457.9997485512487 333.3047111487601 M 457.9997485512487 333.3047111487601 M 465.9978329372105 333.4761573919479 Q 470.06760488460657 333.5951284301314 473.992089736761 333.7766846785729 M 473.992089736761 333.7766846785729 M 481.97963120412373 334.2208217202674 Q 486.05272582155794 334.48686874850887 489.9565688847859 334.8258241385623 M 489.9565688847859 334.8258241385623 M 497.9176095195963 335.6123925680132 Q 501.98742589230244 336.0655490409182 505.85545226826747 336.6056304354963 M 505.85545226826747 336.6056304354963 M 513.7598698476555 337.8363330154004 Q 517.812014541533 338.536141955715 521.6162751116572 339.3427317493387 M 521.6162751116572 339.3427317493387 M 529.4034311667831 341.17284891956007 Q 533.4047912973158 342.2120752263464 537.0897093594745 343.38761503950934 M 537.0897093594745 343.38761503950934 M 544.6268647960334 346.06475651522163 Q 548.4947160560014 347.592711305943 551.9396397670548 349.3028502715814 M 551.9396397670548 349.3028502715814 M 558.9089120489939 353.2230015485133 Q 562.420519978524 355.4658531265732 565.3474548803097 357.9605638550461 M 565.3474548803097 357.9605638550461 M 570.9772938558666 363.6304042226656 Q 573.5899714358021 366.7769678867692 575.446103914118 370.2494279023398 M 575.446103914118 370.2494279023398 M 578.4396805018445 377.6518960221522 Q 579.5166408042464 381.42254428872474 579.850263928384 385.5133993397804 M 579.850263928384 385.5133993397804" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g><g transform="matrix(1,0,0,1,506,320)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 38 0 L 38 41 L 0 41 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="38" height="41"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 38 0 L 38 41 L 0 41 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="38" height="41" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 35 0 L 35 41 L 3 41 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="32" height="41" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="36px" font-style="normal" font-weight="normal" text-decoration="" line-height="41px" x="3" y="33">☠</text></g></g></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":698,"height":277,"nodeIndex":290,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":{"uid":"com.gliffy.theme.blueprint","name":"Blueprint","shape":{"primary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"secondary":{"strokeWidth":2,"strokeColor":"#08233F","fillColor":"#424D76","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}},"tertiary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#FFFFFF","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"highlight":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#0B599F","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#ffffff"}}},"line":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"none","arrowType":2,"interpolationType":"linear","cornerRadius":0,"text":{"color":"#08233F"}},"text":{"color":"#08233F"},"stage":{"color":"#FFFFFF"}},"viewportType":"default","fitBB":{"min":{"x":22,"y":20},"max":{"x":698,"y":261.5}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":211.0,"y":342.0479797979797,"rotation":0.0,"id":187,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":0,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":192,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":109,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-51.0,-142.4743866691726],[263.5,-142.4743866691726],[263.5,-246.61111111111103],[359.0,-246.61111111111103]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":550.0,"y":44.0,"rotation":0.0,"id":182,"width":130.0,"height":197.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":3.0,"strokeColor":"#0B599F","fillColor":"#dde6f1","gradient":false,"dashStyle":"4,4","dropShadow":false,"state":0,"opacity":0.52,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":40.0,"y":60.75,"rotation":0.0,"id":86,"width":130.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.5999999999999996,"y":0.0,"rotation":0.0,"id":87,"width":124.8,"height":32.0,"uid":null,"order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Upstream</span></span></span></p><p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Puppet </span></span></span><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Forge</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":190.0,"y":317.0479797979797,"rotation":0.0,"id":92,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":33,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":86,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":101,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[-20.0,-221.29797979797968],[28.333875616030326,-221.29797979797968],[76.66775123206065,-221.29797979797968],[125.00162684809095,-221.29797979797968]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":95,"width":58.0,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.3103413456674089,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;font-style:italic;\">download</span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;font-style:italic;\">deps into</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":315.0,"y":51.75,"rotation":0.0,"id":105,"width":90.0,"height":78.99999999999994,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":41,"lockAspectRatio":false,"lockShape":false,"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":99,"width":90.00000000000003,"height":78.20202020202028,"uid":"com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.glyph_folder","order":37,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.iphone.iphone_ios7.icons_glyphs.glyph_folder","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#0b5394","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":104,"width":86.00000000000003,"height":32.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">mods_dir/</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":10.373737373737356,"rotation":0.0,"id":101,"width":89.95626822157442,"height":68.6262626262626,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#dde6f1","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":570.0,"y":50.75,"rotation":0.0,"id":106,"width":90.0,"height":78.99999999999994,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":44,"lockAspectRatio":false,"lockShape":false,"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":107,"width":90.00000000000003,"height":78.20202020202028,"uid":"com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.glyph_folder","order":46,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.iphone.iphone_ios7.icons_glyphs.glyph_folder","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#0b5394","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":108,"width":86.00000000000003,"height":32.0,"uid":null,"order":49,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">tars_dir/</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":10.373737373737356,"rotation":0.0,"id":109,"width":89.95626822157442,"height":68.6262626262626,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#dde6f1","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":527.0,"y":277.5479797979797,"rotation":0.0,"id":110,"width":1.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":50,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":101,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":109,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-122.04676125071,-182.11111111111103],[-67.03117416714002,-182.11111111111103],[-12.01558708357004,-182.11111111111103],[43.0,-182.11111111111103]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":157,"width":56.0,"height":42.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.3998328425104944,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-style:italic;\">build</span></p><p style=\"text-align:center;\"><span style=\"font-style:italic;\"> modules</span></p><p style=\"text-align:center;\"><span style=\"font-style:italic;\"> into</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":280.0,"y":22.0,"rotation":0.0,"id":164,"width":170.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":63,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:'Droid Sans Mono';font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_mods_dir=</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":530.0,"y":22.0,"rotation":0.0,"id":167,"width":170.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":64,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:'Droid Sans Mono';font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_tars_dir=</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":20.0,"y":20.0,"rotation":0.0,"id":168,"width":180.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":65,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:'Droid Sans Mono';font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_deps_forge=</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":570.0,"y":152.5,"rotation":0.0,"id":174,"width":90.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":66,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":0.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":"4,4","dropShadow":false,"state":0,"opacity":0.05,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.7999999999999998,"y":0.0,"rotation":0.0,"id":175,"width":86.4,"height":60.0,"uid":null,"order":68,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\">Test</span></span></p><p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\"> Puppet </span></span></p><p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\">Forge</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":543.0,"y":237.5,"rotation":0.0,"id":176,"width":140.0,"height":32.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":69,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:'Droid Sans Mono';font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_port=</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":40.0,"y":161.99999999999994,"rotation":0.0,"id":194,"width":120.0,"height":80.0,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":80,"lockAspectRatio":false,"lockShape":false,"children":[{"x":20.0,"y":20.0,"rotation":0.0,"id":192,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":76,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":193,"width":95.99999999999999,"height":32.0,"uid":null,"order":79,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":10.0,"rotation":0.0,"id":190,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":71,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":191,"width":95.99999999999999,"height":32.0,"uid":null,"order":74,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":0.0,"rotation":0.0,"id":89,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":90,"width":95.99999999999999,"height":32.0,"uid":null,"order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":221.0,"y":352.0479797979797,"rotation":0.0,"id":223,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":97,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":182,"py":0.9225888324873096,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-61.0018686189278,-129.29797979797974],[69.00260033257291,-129.29797979797974],[199.00706928407362,-129.29797979797974],[329.01153823557433,-129.29797979797974]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":226,"width":160.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4666583842671357,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:'Droid Sans Mono';font-size:12px;color:#08233f;font-style:italic;\">`puppet module install <MUT>`</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":260.0,"y":81.43686868686865,"rotation":0.0,"id":227,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":100,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":228,"width":26.0,"height":16.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":510.0,"y":79.43686868686865,"rotation":0.0,"id":233,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":103,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":234,"width":26.0,"height":16.0,"uid":null,"order":105,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":491.0,"y":208.99999999999994,"rotation":0.0,"id":235,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":106,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":236,"width":26.0,"height":16.0,"uid":null,"order":108,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">3</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"layers":[{"guid":"SvrSpaBCATJT","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":117}],"shapeStyles":{},"lineStyles":{"global":{"fill":"none","stroke":"#ff0000","strokeWidth":2,"dashStyle":"4.0,4.0","startArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"italic":true,"underline":true,"face":"Droid Sans Mono","size":"14px","color":"#dde6f1"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default"],"lastSerialized":1461295719641,"analyticsProduct":"GJC"},"embeddedResources":{"index":0,"resources":[]}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":646,"height":450,"nodeIndex":215,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":{"uid":"com.gliffy.theme.blueprint","name":"Blueprint","shape":{"primary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"secondary":{"strokeWidth":2,"strokeColor":"#08233F","fillColor":"#424D76","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}},"tertiary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#FFFFFF","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"highlight":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#0B599F","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#ffffff"}}},"line":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"none","arrowType":2,"interpolationType":"linear","cornerRadius":0,"text":{"color":"#08233F"}},"text":{"color":"#08233F"},"stage":{"color":"#FFFFFF"}},"viewportType":"default","fitBB":{"min":{"x":12,"y":62.74999999999994},"max":{"x":646,"y":449.24999999999994}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":10.0,"y":69.25,"rotation":0.0,"id":14,"width":120.0,"height":44.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Success:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency chain</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":139.0,"y":154.74999999999994,"rotation":0.0,"id":75,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":10,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":71,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":69,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[121.0,-62.0],[151.0,-62.0],[181.0,-62.0],[211.0,-62.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":62.74999999999994,"rotation":0.0,"id":71,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":72,"width":96.0,"height":16.0,"uid":null,"order":13,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":62.74999999999994,"rotation":0.0,"id":69,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":70,"width":96.0,"height":16.0,"uid":null,"order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":540.0,"y":62.74999999999994,"rotation":0.0,"id":67,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":68,"width":96.0,"height":16.0,"uid":null,"order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">de</span></span><span style=\"font-weight:bold;font-size:14px;color:#08233f;\"><span style=\"\">p2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":149.0,"y":164.74999999999994,"rotation":0.0,"id":77,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":20,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":69,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":67,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[301.0,-72.0],[331.0,-72.0],[361.0,-72.0],[391.0,-72.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":179.24999999999994,"rotation":0.0,"id":35,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":37,"width":96.0,"height":16.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":179.24999999999994,"rotation":0.0,"id":38,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":39,"width":96.0,"height":16.0,"uid":null,"order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":389.24999999999994,"rotation":0.0,"id":40,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":41,"width":96.0,"height":16.0,"uid":null,"order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep4</span></span><span style=\"font-weight:bold;text-decoration:none;font-size:14px;color:rgb(8, 35, 63);\"><span style=\"text-decoration:none;\"> </span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":162.0,"y":188.74999999999994,"rotation":0.0,"id":131,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":21,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":35,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":38,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[98.0,20.5],[128.0,20.5],[158.0,20.5],[188.0,20.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":132,"width":21.0,"height":27.0,"uid":null,"order":23,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":450.0,"y":195.24999999999994,"rotation":0.0,"id":130,"width":90.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-style:italic;\"><span style=\"font-family:Arial;font-size:12px;color:#980000;\"><span style=\"\">not availabl</span></span><span style=\"color:#980000;\"><span style=\"\">e on forge</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":303.24999999999994,"rotation":0.0,"id":151,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":152,"width":96.0,"height":16.0,"uid":null,"order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":303.24999999999994,"rotation":0.0,"id":149,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":28,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":150,"width":96.0,"height":30.0,"uid":null,"order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep3 </span></span></p><p style=\"text-align:center;\"><span style=\"text-decoration:none;font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"text-decoration:none;\">~> 0.2.0</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":162.0,"y":312.74999999999994,"rotation":0.0,"id":147,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":31,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":151,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":149,"py":0.2928932188134525,"px":1.1102230246251563E-16}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[98.0,8.073593128807147],[128.0,8.073593128807147],[158.0,8.073593128807147],[188.0,8.073593128807147]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":148,"width":21.0,"height":27.0,"uid":null,"order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":480.0,"y":308.75,"rotation":0.0,"id":146,"width":90.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#980000;\"><span style=\"font-style:italic;\">conflicts</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":530.0,"y":389.24999999999994,"rotation":0.0,"id":201,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":202,"width":96.0,"height":30.0,"uid":null,"order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep3 </span></span></p><p style=\"text-align:center;\"><span style=\"text-decoration:none;font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"text-decoration:none;\">= 0.1.0</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":149.0,"y":154.74999999999994,"rotation":0.0,"id":203,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":38,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":151,"py":0.7071067811865475,"px":0.9999999999999998}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":40,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[111.0,190.92640687119285],[156.0,190.92640687119285],[156.0,264.5],[201.0,264.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":384.0,"y":354.74999999999994,"rotation":0.0,"id":204,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":39,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":40,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":201,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[66.0,64.5],[92.66666666666669,64.5],[119.33333333333331,64.5],[146.0,64.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":205,"width":21.0,"height":27.0,"uid":null,"order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":180.24999999999994,"rotation":0.0,"id":209,"width":120.0,"height":58.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Fail Test 1:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency missing from Forge</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":306.75,"rotation":0.0,"id":210,"width":120.0,"height":44.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Fail Test 2:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency conflicts</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":422.0,"y":313.74999999999994,"rotation":0.0,"id":212,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":44,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":149,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":201,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":0.4937848525479958,"endArrowRotation":83.55342581703539,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[28.0,19.5],[158.0,19.5],[158.0,75.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":213,"width":28.0,"height":41.0,"uid":null,"order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:36px;color:#ff0000;\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"layers":[{"guid":"SvrSpaBCATJT","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":47}],"shapeStyles":{},"lineStyles":{"global":{"fill":"none","stroke":"#6589a8","strokeWidth":2,"dashStyle":"4.0,4.0","orthoMode":2}},"textStyles":{"global":{"bold":true,"underline":true,"face":"Droid Sans Mono","size":"36px","color":"#980000"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default"],"lastSerialized":1461296023550,"analyticsProduct":"GJC"},"embeddedResources":{"index":0,"resources":[]}}
|
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'simp/module/repoclosure/version'
|
2
|
+
require 'json'
|
3
|
+
require 'yaml'
|
4
|
+
require 'pry'
|
5
|
+
require 'tmpdir'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'puppet_forge_server'
|
8
|
+
require 'parallel'
|
9
|
+
require 'colorize'
|
10
|
+
|
11
|
+
module Simp
|
12
|
+
module Module
|
13
|
+
class Repoclosure
|
14
|
+
attr_accessor :verbose, :port, :upstream_puppet_forge
|
15
|
+
def initialize( tars_dir = nil, mods_dir = nil )
|
16
|
+
|
17
|
+
# URL of upstream Puppet Forge to provide deps served by the test forge
|
18
|
+
#
|
19
|
+
# NOTE: The upstream forge will not be used if either of the env vars
|
20
|
+
# `TEST_FORGE_mods_dir` or `TEST_FORGE_tars_dir` are present.
|
21
|
+
@upstream_puppet_forge= ENV.fetch('TEST_FORGE_deps_forge',
|
22
|
+
'https://forgeapi.puppetlabs.com')
|
23
|
+
@verbose = ENV.fetch('VERBOSE', 0).to_i
|
24
|
+
@port = ENV['TEST_FORGE_port'] || 8080
|
25
|
+
|
26
|
+
# directory of tarballs for local forge
|
27
|
+
@tars_dir = tars_dir || ENV.fetch('TEST_FORGE_tars_dir', nil)
|
28
|
+
|
29
|
+
# directory to keep unarchived module dependencies
|
30
|
+
@mods_dir = mods_dir || ENV.fetch('TEST_FORGE_mods_dir', nil)
|
31
|
+
|
32
|
+
@startup_delay = 5 # seconds to wait for forge to start before testing
|
33
|
+
@parallel_timeout = 300 # seconds to wait before killing all processes
|
34
|
+
end
|
35
|
+
|
36
|
+
def verbose?( level = 1 )
|
37
|
+
@verbose >= level
|
38
|
+
end
|
39
|
+
|
40
|
+
def v1( msg, level = 1 )
|
41
|
+
puts msg.colorize( :blue ) if verbose? 1
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# mut_dirs = Array of (String) diectory paths to each module-to-test
|
46
|
+
def test_modules( mut_dirs )
|
47
|
+
Dir.chdir '/tmp' # ensure we start in a real directory
|
48
|
+
tmp_dirs = [] # a list of directories we need to ensure are removed
|
49
|
+
muts = [] # a list of forge names for MUTs
|
50
|
+
success = false
|
51
|
+
|
52
|
+
begin
|
53
|
+
if @tars_dir.nil?
|
54
|
+
tmp_dirs << @tars_dir = Dir.mktmpdir('fakeforge_tars_dir_')
|
55
|
+
if @mods_dir.nil?
|
56
|
+
tmp_dirs << @mods_dir = Dir.mktmpdir('fakeforge_mods_dir_')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# prepare a local forge to test against
|
61
|
+
# -------------------------------------------------------------------
|
62
|
+
# gather each module's forge name
|
63
|
+
mut_dirs.each do |module_dir|
|
64
|
+
mj_path = File.expand_path('metadata.json', module_dir)
|
65
|
+
metadata = JSON.parse(File.read(mj_path))
|
66
|
+
muts << metadata.fetch('name')
|
67
|
+
end
|
68
|
+
|
69
|
+
# - download deps for each MUT (unless provided with a mods_dir)
|
70
|
+
# - build tars from each MUT/dep (unless provided with a tars_dir)
|
71
|
+
if @mods_dir
|
72
|
+
if tmp_dirs.include?( @mods_dir )
|
73
|
+
mut_dirs.each do |module_dir|
|
74
|
+
download_mut_deps( module_dir )
|
75
|
+
end
|
76
|
+
end
|
77
|
+
mod_dirs = Dir[File.join(@mods_dir,'*')].select{|x| File.directory? x}
|
78
|
+
package_tarballs( mod_dirs )
|
79
|
+
end
|
80
|
+
|
81
|
+
# test the puppet modules in `mut_dirs` against local forge
|
82
|
+
# -------------------------------------------------------------------
|
83
|
+
Dir.mktmpdir('fakeforge_pupmod_inst_dir_') do |pupmod_install_dir|
|
84
|
+
success = test_with_local_forge( muts, pupmod_install_dir )
|
85
|
+
end
|
86
|
+
|
87
|
+
ensure
|
88
|
+
tmp_dirs.each do |dir|
|
89
|
+
Dir.chdir '/tmp'
|
90
|
+
FileUtils.remove_entry dir, :verbose => verbose?
|
91
|
+
end
|
92
|
+
end
|
93
|
+
success
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
def test_with_local_forge( muts, pupmod_install_dir )
|
98
|
+
pidfile = File.join(pupmod_install_dir,'fakeforge.pidfile')
|
99
|
+
success = false
|
100
|
+
|
101
|
+
Parallel.map([:forge,:mut_installer,:process_timeout], in_processes: 3) do |x|
|
102
|
+
Dir.chdir '/tmp'
|
103
|
+
if x == :forge
|
104
|
+
start_local_forge(pidfile)
|
105
|
+
elsif x == :mut_installer
|
106
|
+
sleep @startup_delay # safety wait for forge to spin up (never needed yet)
|
107
|
+
success = test_install(muts, pupmod_install_dir)
|
108
|
+
raise Parallel::Kill # stops both Parallels
|
109
|
+
elsif x == :process_timeout
|
110
|
+
sleep @parallel_timeout
|
111
|
+
raise Parallel::Kill # stops both Parallels
|
112
|
+
end
|
113
|
+
end
|
114
|
+
report_files = Dir[File.join( pupmod_install_dir, "*.result.yaml")]
|
115
|
+
|
116
|
+
reports = []
|
117
|
+
report_files.each do |report_file|
|
118
|
+
report = YAML.load_file report_file
|
119
|
+
reports << report.fetch(:success)
|
120
|
+
end
|
121
|
+
reports.uniq!
|
122
|
+
if reports.size == 1 && reports.first == true
|
123
|
+
success = true
|
124
|
+
end
|
125
|
+
|
126
|
+
if report_files.empty?
|
127
|
+
warn "WARNING: no test reports were generated in '#{pupmod_install_dir}'"
|
128
|
+
warn "WARNING: (cont'd) marking test as `failed`"
|
129
|
+
success = false
|
130
|
+
end
|
131
|
+
|
132
|
+
return success
|
133
|
+
end
|
134
|
+
|
135
|
+
# Starts a local puppet forge on port `@port`.
|
136
|
+
def start_local_forge(pidfile)
|
137
|
+
puts "Starting fake forge (module-dir: '#{@tars_dir}' pidfile: '#{pidfile}'"
|
138
|
+
PuppetForgeServer::Server.new.go([
|
139
|
+
'--port', @port,
|
140
|
+
'--bind', 'localhost',
|
141
|
+
'--module-dir', @tars_dir,
|
142
|
+
'--pidfile', pidfile
|
143
|
+
])
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_install( muts, pupmod_install_dir )
|
147
|
+
success = false
|
148
|
+
muts.each do |mut|
|
149
|
+
report_file = File.join( pupmod_install_dir, "#{mut}.result.yaml" )
|
150
|
+
cmd = "puppet module install #{mut} " +
|
151
|
+
"--module_repository=http://localhost:#{@port} " +
|
152
|
+
"--modulepath=#{pupmod_install_dir} " +
|
153
|
+
"--target-dir=#{pupmod_install_dir}"
|
154
|
+
v1 "RUNNING TEST: `#{cmd}`"
|
155
|
+
success = system(cmd)
|
156
|
+
puts "$? = '#{$?}'"; puts "xxx success='#{success}'"
|
157
|
+
unless success
|
158
|
+
puts ("mods_dir: " + @mods_dir.rjust(79)).colorize(:background => :red)
|
159
|
+
puts `ls -la "#{@tars_dir}"`
|
160
|
+
puts ("tars_dir: " + @tars_dir.rjust(79)).colorize(:background => :red)
|
161
|
+
puts `ls -la "#{@tars_dir}"`
|
162
|
+
end
|
163
|
+
report = {:success => success, :cmd=>cmd, :output=>'tbd'}
|
164
|
+
File.open(report_file,'w'){|f| f.puts report.to_yaml }
|
165
|
+
end
|
166
|
+
success
|
167
|
+
end
|
168
|
+
|
169
|
+
# download all of the MUT's (declared) dependencies from an upstream
|
170
|
+
# puppet forge into `@mods_dir/`
|
171
|
+
def download_mut_deps( mut_dir )
|
172
|
+
FileUtils.chdir mut_dir, :verbose => verbose?
|
173
|
+
cmd = "puppet module build --render-as=json"
|
174
|
+
puts cmd if verbose?
|
175
|
+
tgz = `#{cmd}`.split("\n").last.gsub('"','')
|
176
|
+
puts "built module archive: #{tgz}" if verbose?
|
177
|
+
cmd = "puppet module install #{tgz} " +
|
178
|
+
"--module_repository=#{@upstream_puppet_forge} " +
|
179
|
+
"--modulepath=#{@mods_dir} --target-dir=#{@mods_dir}"
|
180
|
+
v1 cmd
|
181
|
+
out = `#{cmd}`
|
182
|
+
v1 out
|
183
|
+
|
184
|
+
# add the
|
185
|
+
FileUtils.cp tgz, @tars_dir, :verbose => verbose?
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
# build a tarball of each module (in a directory of modules)
|
190
|
+
# mods_dirs = Array of paths to directories of modules
|
191
|
+
def package_tarballs( mods_dirs )
|
192
|
+
pwd = Dir.pwd
|
193
|
+
mods_dirs.each do |module_dir|
|
194
|
+
next unless File.directory? module_dir
|
195
|
+
FileUtils.chdir module_dir, :verbose => (verbose?)
|
196
|
+
|
197
|
+
cmd = "puppet module build --render-as=json"
|
198
|
+
puts cmd if verbose?
|
199
|
+
tgz = `#{cmd}`.split("\n").last.gsub('"','')
|
200
|
+
puts "--[tgz] built module archive: #{tgz}" if verbose?
|
201
|
+
FileUtils.cp tgz, @tars_dir, :verbose => verbose?
|
202
|
+
end
|
203
|
+
FileUtils.chdir pwd, :verbose => verbose?
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
4
|
+
# distributed with this work for additional information
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
7
|
+
# "License"); you may not use this file except in compliance
|
8
|
+
# with the License. You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
13
|
+
# software distributed under the License is distributed on an
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
# KIND, either express or implied. See the License for the
|
16
|
+
# specific language governing permissions and limitations
|
17
|
+
# under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
module Simp
|
21
|
+
module Module
|
22
|
+
class Repoclosure
|
23
|
+
# simp-module-repoclosure version
|
24
|
+
VERSION = "0.1.0"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'simp/module/repoclosure/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |gem|
|
8
|
+
gem.name = "simp-module-repoclosure"
|
9
|
+
gem.version = Simp::Module::Repoclosure::VERSION
|
10
|
+
gem.summary = %q{Test Puppet modules' dependency declarations with a local Puppet Forge}
|
11
|
+
gem.description = %q{~~Stupidly~~ Admirably direct repoclosure for a Puppet module's `metadata.json`}
|
12
|
+
gem.license = "Apache-2.0"
|
13
|
+
gem.authors = ["Chris Tessmer"]
|
14
|
+
gem.email = "simp@simp-project.org"
|
15
|
+
gem.homepage = "https://github.com/simp/rubygem-simp-module-repoclosure"
|
16
|
+
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
|
19
|
+
`git submodule --quiet foreach --recursive pwd`.split($/).each do |submodule|
|
20
|
+
submodule.sub!("#{Dir.pwd}/",'')
|
21
|
+
|
22
|
+
Dir.chdir(submodule) do
|
23
|
+
`git ls-files`.split($/).map do |subpath|
|
24
|
+
gem.files << File.join(submodule,subpath)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
29
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
30
|
+
gem.require_paths = ['lib']
|
31
|
+
|
32
|
+
gem.add_development_dependency 'bundler', '~> 1.7'
|
33
|
+
gem.add_development_dependency 'rake', '~> 10.0'
|
34
|
+
gem.add_development_dependency 'rspec', '~> 3.0'
|
35
|
+
gem.add_development_dependency 'yard', '~> 0.8'
|
36
|
+
gem.add_runtime_dependency 'puppet'
|
37
|
+
gem.add_runtime_dependency 'parallel', '~> 1.8'
|
38
|
+
gem.add_runtime_dependency 'puppet-forge-server', '~> 1.9'
|
39
|
+
gem.add_runtime_dependency 'colorize', '~> 0.7'
|
40
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
source ENV['GEM_SOURCE'] || 'https://rubygems.org'
|
2
|
+
|
3
|
+
puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 3.3']
|
4
|
+
gem 'metadata-json-lint'
|
5
|
+
gem 'puppet', puppetversion
|
6
|
+
gem 'puppetlabs_spec_helper', '>= 1.0.0'
|
7
|
+
gem 'puppet-lint', '>= 1.0.0'
|
8
|
+
gem 'facter', '>= 1.7.0'
|
9
|
+
gem 'rspec-puppet'
|
10
|
+
|
11
|
+
# rspec must be v2 for ruby 1.8.7
|
12
|
+
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
|
13
|
+
gem 'rspec', '~> 2.0'
|
14
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# dep1
|
2
|
+
|
3
|
+
#### Table of Contents
|
4
|
+
|
5
|
+
1. [Description](#description)
|
6
|
+
1. [Setup - The basics of getting started with dep1](#setup)
|
7
|
+
* [What dep1 affects](#what-dep1-affects)
|
8
|
+
* [Setup requirements](#setup-requirements)
|
9
|
+
* [Beginning with dep1](#beginning-with-dep1)
|
10
|
+
1. [Usage - Configuration options and additional functionality](#usage)
|
11
|
+
1. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
|
12
|
+
1. [Limitations - OS compatibility, etc.](#limitations)
|
13
|
+
1. [Development - Guide for contributing to the module](#development)
|
14
|
+
|
15
|
+
## Description
|
16
|
+
|
17
|
+
Start with a one- or two-sentence summary of what the module does and/or what
|
18
|
+
problem it solves. This is your 30-second elevator pitch for your module.
|
19
|
+
Consider including OS/Puppet version it works with.
|
20
|
+
|
21
|
+
You can give more descriptive information in a second paragraph. This paragraph
|
22
|
+
should answer the questions: "What does this module *do*?" and "Why would I use
|
23
|
+
it?" If your module has a range of functionality (installation, configuration,
|
24
|
+
management, etc.), this is the time to mention it.
|
25
|
+
|
26
|
+
## Setup
|
27
|
+
|
28
|
+
### What dep1 affects **OPTIONAL**
|
29
|
+
|
30
|
+
If it's obvious what your module touches, you can skip this section. For
|
31
|
+
example, folks can probably figure out that your mysql_instance module affects
|
32
|
+
their MySQL instances.
|
33
|
+
|
34
|
+
If there's more that they should know about, though, this is the place to mention:
|
35
|
+
|
36
|
+
* A list of files, packages, services, or operations that the module will alter,
|
37
|
+
impact, or execute.
|
38
|
+
* Dependencies that your module automatically installs.
|
39
|
+
* Warnings or other important notices.
|
40
|
+
|
41
|
+
### Setup Requirements **OPTIONAL**
|
42
|
+
|
43
|
+
If your module requires anything extra before setting up (pluginsync enabled,
|
44
|
+
etc.), mention it here.
|
45
|
+
|
46
|
+
If your most recent release breaks compatibility or requires particular steps
|
47
|
+
for upgrading, you might want to include an additional "Upgrading" section
|
48
|
+
here.
|
49
|
+
|
50
|
+
### Beginning with dep1
|
51
|
+
|
52
|
+
The very basic steps needed for a user to get the module up and running. This
|
53
|
+
can include setup steps, if necessary, or it can be an example of the most
|
54
|
+
basic use of the module.
|
55
|
+
|
56
|
+
## Usage
|
57
|
+
|
58
|
+
This section is where you describe how to customize, configure, and do the
|
59
|
+
fancy stuff with your module here. It's especially helpful if you include usage
|
60
|
+
examples and code samples for doing things with your module.
|
61
|
+
|
62
|
+
## Reference
|
63
|
+
|
64
|
+
Here, include a complete list of your module's classes, types, providers,
|
65
|
+
facts, along with the parameters for each. Users refer to this section (thus
|
66
|
+
the name "Reference") to find specific details; most users don't read it per
|
67
|
+
se.
|
68
|
+
|
69
|
+
## Limitations
|
70
|
+
|
71
|
+
This is where you list OS compatibility, version compatibility, etc. If there
|
72
|
+
are Known Issues, you might want to include them under their own heading here.
|
73
|
+
|
74
|
+
## Development
|
75
|
+
|
76
|
+
Since your module is awesome, other users will want to play with it. Let them
|
77
|
+
know what the ground rules for contributing are.
|
78
|
+
|
79
|
+
## Release Notes/Contributors/Etc. **Optional**
|
80
|
+
|
81
|
+
If you aren't using changelog, put your release notes here (though you should
|
82
|
+
consider using changelog). You can also add any additional sections you feel
|
83
|
+
are necessary or important to include here. Please use the `## ` header.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'puppetlabs_spec_helper/rake_tasks'
|
2
|
+
require 'puppet-lint/tasks/puppet-lint'
|
3
|
+
PuppetLint.configuration.send('disable_80chars')
|
4
|
+
PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
|
5
|
+
|
6
|
+
desc "Validate manifests, templates, and ruby files"
|
7
|
+
task :validate do
|
8
|
+
Dir['manifests/**/*.pp'].each do |manifest|
|
9
|
+
sh "puppet parser validate --noop #{manifest}"
|
10
|
+
end
|
11
|
+
Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file|
|
12
|
+
sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/
|
13
|
+
end
|
14
|
+
Dir['templates/**/*.erb'].each do |template|
|
15
|
+
sh "erb -P -x -T '-' #{template} | ruby -c"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Class: dep1
|
2
|
+
# ===========================
|
3
|
+
#
|
4
|
+
# Full description of class dep1 here.
|
5
|
+
#
|
6
|
+
# Parameters
|
7
|
+
# ----------
|
8
|
+
#
|
9
|
+
# Document parameters here.
|
10
|
+
#
|
11
|
+
# * `sample parameter`
|
12
|
+
# Explanation of what this parameter affects and what it defaults to.
|
13
|
+
# e.g. "Specify one or more upstream ntp servers as an array."
|
14
|
+
#
|
15
|
+
# Variables
|
16
|
+
# ----------
|
17
|
+
#
|
18
|
+
# Here you should define a list of variables that this module would require.
|
19
|
+
#
|
20
|
+
# * `sample variable`
|
21
|
+
# Explanation of how this variable affects the function of this class and if
|
22
|
+
# it has a default. e.g. "The parameter enc_ntp_servers must be set by the
|
23
|
+
# External Node Classifier as a comma separated list of hostnames." (Note,
|
24
|
+
# global variables should be avoided in favor of class parameters as
|
25
|
+
# of Puppet 2.6.)
|
26
|
+
#
|
27
|
+
# Examples
|
28
|
+
# --------
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
# class { 'dep1':
|
32
|
+
# servers => [ 'pool.ntp.org', 'ntp.local.company.com' ],
|
33
|
+
# }
|
34
|
+
#
|
35
|
+
# Authors
|
36
|
+
# -------
|
37
|
+
#
|
38
|
+
# Author Name <author@domain.com>
|
39
|
+
#
|
40
|
+
# Copyright
|
41
|
+
# ---------
|
42
|
+
#
|
43
|
+
# Copyright 2016 Your name here, unless otherwise noted.
|
44
|
+
#
|
45
|
+
class dep1 {
|
46
|
+
|
47
|
+
|
48
|
+
}
|