Add octocatalog-diff job
authorBastian Blank <waldi@debian.org>
Tue, 11 Apr 2017 16:50:00 +0000 (18:50 +0200)
committerBastian Blank <bastian.blank@credativ.de>
Wed, 19 Apr 2017 08:00:45 +0000 (10:00 +0200)
.gitlab-ci.yml [new file with mode: 0644]
.octocatalog-diff.cfg.rb [new file with mode: 0644]
Gemfile [new file with mode: 0644]
spec/octocatalog/facts/czerny.debian.org.json [new file with mode: 0644]
spec/octocatalog/facts/villa.debian.org.json [new file with mode: 0644]
spec/octocatalog/hiera.yaml [new file with mode: 0644]
spec/octocatalog/run-octocatalog [new file with mode: 0755]

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644 (file)
index 0000000..568ea63
--- /dev/null
@@ -0,0 +1,34 @@
+.test-octocatalog: &test-octocatalog
+  image: ruby:2.3
+
+  script:
+    - unset BUNDLER_VERSION BUNDLE_APP_CONFIG BUNDLE_BIN BUNDLE_PATH GEM_HOME
+
+    - git config --global user.name "Your Name"
+    - git config --global user.email "you@example.com"
+
+    - apt-get update
+    - apt-get install -y cmake libldap-dev libsasl2-dev
+    - bundle install --binstubs bin --with octocatalog
+
+    - git branch -f base $REF_BASE
+    - git branch -f test $CI_BUILD_REF
+
+    - echo -n "$R10K" > r10k.yaml
+    - bundle exec r10k deploy environment --verbose debug base test
+    - spec/octocatalog/run-octocatalog base test
+
+test-octocatalog/master:
+  <<: *test-octocatalog
+
+  except:
+    - master
+
+  variables:
+    REF_BASE: origin/master
+    R10K: |
+      cachedir: 'cache'
+      sources:
+        plain:
+          remote: '$CI_PROJECT_DIR'
+          basedir: 'environments'
diff --git a/.octocatalog-diff.cfg.rb b/.octocatalog-diff.cfg.rb
new file mode 100644 (file)
index 0000000..6fcf5f0
--- /dev/null
@@ -0,0 +1,12 @@
+module OctocatalogDiff
+  class Config
+    def self.config
+      settings = {}
+      settings[:hiera_config] = 'spec/octocatalog/hiera.yaml'
+      settings[:hiera_path] = 'hieradata'
+      settings[:storeconfigs] = false
+      settings[:validate_references] = %w(before notify require subscribe)
+      settings
+    end
+  end
+end
diff --git a/Gemfile b/Gemfile
new file mode 100644 (file)
index 0000000..4e096ff
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,9 @@
+source ENV['GEM_SOURCE'] || 'https://rubygems.org'
+
+gem 'puppet', '>= 4.8'
+gem 'r10k'
+gem 'ruby-ldap'
+
+group :octocatalog, optional: true do
+  gem 'octocatalog-diff'
+end
diff --git a/spec/octocatalog/facts/czerny.debian.org.json b/spec/octocatalog/facts/czerny.debian.org.json
new file mode 100644 (file)
index 0000000..cb84d9b
--- /dev/null
@@ -0,0 +1,257 @@
+{
+  "hostname": "czerny",
+  "lsbminordistrelease": "7",
+  "kernel": "Linux",
+  "hoster": "man-da",
+  "bios_vendor": "HP",
+  "bios_version": "P67",
+  "bios_release_date": "05/05/2011",
+  "manufacturer": "HP",
+  "productname": "ProLiant DL380 G7",
+  "serialnumber": "CZ214405M3",
+  "uuid": "39333835-3731-5A43-3231-343430354D33",
+  "type": "Rack Mount Chassis",
+  "ipaddress": "192.168.75.109",
+  "facterversion": "2.2.0",
+  "rubysitedir": "/usr/local/lib/site_ruby/2.1.0",
+  "operatingsystemmajrelease": "8",
+  "uptime_seconds": 3317584,
+  "osfamily": "Debian",
+  "uptime_days": 38,
+  "virtual": "physical",
+  "is_virtual": "false",
+  "architecture": "amd64",
+  "debarchitecture": "amd64",
+  "hardwaremodel": "x86_64",
+  "operatingsystem": "Debian",
+  "os": {
+    "name": "Debian",
+    "family": "Debian",
+    "release": {
+      "major": "8",
+      "minor": "7",
+      "full": "8.7"
+    },
+    "lsb": {
+      "distcodename": "jessie",
+      "distid": "Debian",
+      "distdescription": "Debian GNU/Linux 8.7 (jessie)",
+      "distrelease": "8.7",
+      "majdistrelease": "8",
+      "minordistrelease": "7"
+    }
+  },
+  "id": "root",
+  "ipaddress6": "2001:41b8:202:deb:6564:a62:52c3:4b6d",
+  "processors": {
+    "models": [
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+      "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz"
+    ],
+    "count": 16,
+    "physicalcount": 2
+  },
+  "processor0": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor1": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor2": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor3": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor4": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor5": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor6": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor7": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor8": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor9": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor10": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor11": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor12": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor13": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor14": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processor15": "Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz",
+  "processorcount": "16",
+  "physicalprocessorcount": "2",
+  "interfaces": "bond0,bond2,br0,eth0,eth1,eth2,eth3,lo,tap0,tap2,tap3,tap4,tap5,tap6,tap7,tap8,tap9,tap10,tap11,tap12,tap13,tap14,tap15",
+  "macaddress_bond0": "16:7c:38:54:5a:62",
+  "mtu_bond0": "1500",
+  "ipaddress_bond2": "192.168.75.109",
+  "macaddress_bond2": "44:1e:a1:3b:bf:04",
+  "netmask_bond2": "255.255.255.0",
+  "mtu_bond2": "1500",
+  "ipaddress_br0": "82.195.75.109",
+  "ipaddress6_br0": "2001:41b8:202:deb:6564:a62:52c3:4b6d",
+  "macaddress_br0": "44:1e:a1:3b:bf:00",
+  "netmask_br0": "255.255.255.192",
+  "mtu_br0": "1500",
+  "macaddress_eth0": "44:1e:a1:3b:bf:00",
+  "mtu_eth0": "1500",
+  "macaddress_eth1": "44:1e:a1:3b:bf:02",
+  "mtu_eth1": "1500",
+  "macaddress_eth2": "44:1E:A1:3B:BF:04",
+  "mtu_eth2": "1500",
+  "macaddress_eth3": "44:1E:A1:3B:BF:06",
+  "mtu_eth3": "1500",
+  "ipaddress_lo": "127.0.0.1",
+  "netmask_lo": "255.0.0.0",
+  "mtu_lo": "65536",
+  "macaddress_tap0": "fe:d2:c2:3b:3a:78",
+  "mtu_tap0": "1500",
+  "macaddress_tap2": "fe:af:f2:28:07:b6",
+  "mtu_tap2": "1500",
+  "macaddress_tap3": "fe:55:d4:0b:24:49",
+  "mtu_tap3": "1500",
+  "macaddress_tap4": "fe:82:48:9b:5c:22",
+  "mtu_tap4": "1500",
+  "macaddress_tap5": "fe:91:63:c0:a0:4e",
+  "mtu_tap5": "1500",
+  "macaddress_tap6": "fe:34:75:2a:58:48",
+  "mtu_tap6": "1500",
+  "macaddress_tap7": "fe:a6:a9:74:a8:9e",
+  "mtu_tap7": "1500",
+  "macaddress_tap8": "fe:ec:98:c2:ed:f9",
+  "mtu_tap8": "1500",
+  "macaddress_tap9": "fe:ce:b7:96:70:4a",
+  "mtu_tap9": "1500",
+  "macaddress_tap10": "fe:3d:97:6a:3e:c8",
+  "mtu_tap10": "1500",
+  "macaddress_tap11": "fe:48:65:c0:f5:40",
+  "mtu_tap11": "1500",
+  "macaddress_tap12": "fe:a5:d4:7c:78:ea",
+  "mtu_tap12": "1500",
+  "macaddress_tap13": "fe:b4:c4:a2:80:a1",
+  "mtu_tap13": "1500",
+  "macaddress_tap14": "fe:87:c3:07:48:14",
+  "mtu_tap14": "1500",
+  "macaddress_tap15": "fe:8c:db:73:1e:f6",
+  "mtu_tap15": "1500",
+  "lsbdistcodename": "jessie",
+  "path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+  "hardwareisa": "unknown",
+  "kernelrelease": "3.16.0-4-amd64",
+  "filesystems": "ext2,ext3,ext4,xfs",
+  "kernelversion": "3.16.0",
+  "selinux": "false",
+  "lsbmajdistrelease": "8",
+  "memorysize": "94.60 GB",
+  "memoryfree": "43.54 GB",
+  "swapsize": "3.72 GB",
+  "swapfree": "1.91 GB",
+  "swapsize_mb": "3812.00",
+  "swapfree_mb": "1959.95",
+  "memorysize_mb": "96870.70",
+  "memoryfree_mb": "44582.64",
+  "puppetversion": "3.7.2",
+  "uptime_hours": 921,
+  "sshdsakey": "AAAAB3NzaC1kc3MAAACBAOq8wwM/x6pBTJq1CKlpIh7n+ibjOnZZJ3mgffVEhYgHI3AKGXugVm1btdVAeDGxJSHJgqSMDruK5Mfoo0JoIT1ffmgs7zzpUQP4d+HYnHzKIasU0VHxKzw8OQCU1LKBP0LTp0ekpmtch4xdRbNBTUdgKYqFbvkkkqbA+wZbH5k5AAAAFQCkmbraImv1ZMZvWfWMVK28OG3IqQAAAIBYjixICIVK5PMwEc5wGQax1oP9mBkNo/T2rQBjbuJ3c+ps/IF96Pi2l6yemprsydcm8OlFPEL/BGGSauihsvk4hF0St7ObaCH+4QzCvKVweeRAqSp9RqqjZ+oC/q3GK9nxLMDCd4P6aO/DbtNrrGYMKkt9IKS/fd8zVoQkrqbk5QAAAIBjSl569h008tPkITW3nykJoDCztvBYvNgKhEWYJTGhHVNrQlKldzLqkDNRdPpoJ/a17pqRr1e+vJakjt7vcYKFH071q1ENSm03R7gGW9wpI/S70fBpiBDH6G0hedFw+VpqSF27zGxAoTOaypTYrVEkklFFR9noDWIztT0RqlmN7Q==",
+  "sshfp_dsa": "SSHFP 2 1 da48c8b334b977e0e69f67fb4c81b07096b3d1e1\nSSHFP 2 2 30a7d1c9488420628dea664b24daed514b93a1c46a360b95b9e350976d925633",
+  "sshrsakey": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDnlwSIDXoqBbsmAruOLcHQg2v0aOnQCqLp845Ii/6kmRroU5ZKwVRw378lZNU2oM/nM7TFwhk9pgEYhMURc9A4dhRLwp3p2ZvBfQrm8a/4D0taAkx4p5JEleksw58RRw44P042K5iRMBBGacubYLgvCsEKJsK1GB82i5wUBGniGGtMVyQbRiu8TRyOkdMKSaSOiXjTff7pc2OdNJH5sST0ALCrvny6p+b78PkHxa5o8giqu+gtyfeAiHwQJ3oe8Fuo2GdV8ksC4h+QLX3qgDERHq09o61wTIEsFI1TWomS8KaWtLzxyGWkcbfkLCk+ZiUiw3xehhvmqWrvf/NACyIB",
+  "sshfp_rsa": "SSHFP 1 1 4d646ab674ddeb5a15ad78d8117e0b7ce8cbe174\nSSHFP 1 2 efc6f36cb0bcab5efef2252a0bcf3f5ab980924b64119a8749810616725a327d",
+  "sshed25519key": "AAAAC3NzaC1lZDI1NTE5AAAAIAJIdIMOGvtxWeQfI0vyd/2ztni+S8DjsXdRapNcbqOD",
+  "sshfp_ed25519": "SSHFP 4 1 e34c8b249c55072d182fb83a03a518240c24527a\nSSHFP 4 2 f3bee02eb0f32936d20d899994277da35b421f30c530bd4611523615281906f8",
+  "blockdevice_sda_size": 6001095958528,
+  "blockdevice_sda_vendor": "HP",
+  "blockdevice_sda_model": "LOGICAL VOLUME",
+  "blockdevices": "sda",
+  "uptime": "38 days",
+  "domain": "debian.org",
+  "gid": "root",
+  "network_bond2": "192.168.75.0",
+  "network_br0": "82.195.75.64",
+  "network_lo": "127.0.0.0",
+  "augeasversion": "1.2.0",
+  "rubyversion": "2.1.5",
+  "lsbdistdescription": "Debian GNU/Linux 8.7 (jessie)",
+  "timezone": "UTC",
+  "ps": "ps -ef",
+  "lsbdistid": "Debian",
+  "fqdn": "czerny.debian.org",
+  "uniqueid": "c3526d4b",
+  "macaddress": "16:7c:38:54:5a:62",
+  "lsbdistrelease": "8.7",
+  "kernelmajversion": "3.16",
+  "partitions": {
+    "sda1": {
+      "uuid": "f9265c8c-a6d1-48bb-912e-f699be8c1698",
+      "size": "39062501",
+      "mount": "/",
+      "filesystem": "ext3"
+    },
+    "sda2": {
+      "size": "11681827960",
+      "filesystem": "LVM2_member"
+    }
+  },
+  "operatingsystemrelease": "8.7",
+  "system_uptime": {
+    "seconds": 3317584,
+    "hours": 921,
+    "days": 38,
+    "uptime": "38 days"
+  },
+  "netmask": "255.255.255.0",
+  "mounts": "/,/dev/hugepages,/dev/mqueue,/sys/fs/cgroup/blkio,/sys/fs/cgroup/cpu,cpuacct,/sys/fs/cgroup/cpuset,/sys/fs/cgroup/devices,/sys/fs/cgroup/freezer,/sys/fs/cgroup/net_cls,net_prio,/sys/fs/cgroup/perf_event,/sys/fs/cgroup/systemd,/sys/fs/pstore,/sys/kernel/debug,/sys/kernel/security",
+  "has_srv_build_trees": false,
+  "has_srv_buildd": false,
+  "has_etc_ssh_ssh_host_ed25519_key": true,
+  "has_srv_mirrors_debian": false,
+  "has_srv_mirrors_debian_debug": false,
+  "has_srv_mirrors_debian_ports": false,
+  "has_srv_mirrors_debian_security": false,
+  "has_dev_hwrng": false,
+  "onion_tor_service_hostname": "{}",
+  "onion_balance_service_hostname": "{}",
+  "cluster": "ganeti3.debian.org",
+  "cluster_nodes": "clementi.debian.org czerny.debian.org",
+  "systemproductname": "ProLiant DL380 G7",
+  "hw_can_temp_sensors": true,
+  "brokenhosts": false,
+  "puppet_vardir": "/var/lib/puppet",
+  "v4ips": "82.195.75.109,192.168.75.109",
+  "v6ips": "2001:41b8:202:deb:6564:a62:52c3:4b6d",
+  "apache2": false,
+  "apache2deb9": false,
+  "clamd": false,
+  "exim4": true,
+  "postfix": false,
+  "postgres": false,
+  "postgrey": false,
+  "greylistd": false,
+  "policydweight": false,
+  "spamd": false,
+  "php5": false,
+  "php5suhosin": false,
+  "syslogversion": "3.5",
+  "unbound": true,
+  "munin_async": true,
+  "samhain": true,
+  "systemd": true,
+  "tor_ge_0_2_9": false,
+  "kvmdomain": false,
+  "concat_basedir": "/var/lib/puppet/concat",
+  "mta": "exim4",
+  "staticsync_user_exists": false,
+  "weblogsync_user_exists": false,
+  "buildd_user_exists": false,
+  "portforwarder_user_exists": false,
+  "smartarraycontroller": true,
+  "threewarecontroller": false,
+  "megaraid": false,
+  "mptraid": false,
+  "aacraid": false,
+  "swraid": false,
+  "root_home": "/root",
+  "staging_http_get": "curl",
+  "is_pe": false
+}
diff --git a/spec/octocatalog/facts/villa.debian.org.json b/spec/octocatalog/facts/villa.debian.org.json
new file mode 100644 (file)
index 0000000..ccafb4d
--- /dev/null
@@ -0,0 +1,218 @@
+{
+  "ipaddress": "212.211.132.32",
+  "uptime_hours": 980,
+  "hostname": "villa",
+  "uptime_seconds": 3528362,
+  "lsbdistdescription": "Debian GNU/Linux 8.7 (jessie)",
+  "kernel": "Linux",
+  "hoster": "scanplus",
+  "blockdevice_sda_size": 440346238976,
+  "blockdevice_sda_vendor": "HP",
+  "blockdevice_sda_model": "LOGICAL VOLUME",
+  "blockdevices": "sda",
+  "partitions": {
+    "sda1": {
+      "uuid": "ccd11f2f-1ec7-41d2-82bc-af67c7f9442c",
+      "size": "39061504",
+      "mount": "/",
+      "filesystem": "ext4"
+    },
+    "sda2": {
+      "size": "2",
+      "filesystem": "dos"
+    },
+    "sda5": {
+      "size": "820983808",
+      "filesystem": "LVM2_member"
+    }
+  },
+  "os": {
+    "name": "Debian",
+    "family": "Debian",
+    "release": {
+      "major": "8",
+      "minor": "7",
+      "full": "8.7"
+    },
+    "lsb": {
+      "distcodename": "jessie",
+      "distid": "Debian",
+      "distdescription": "Debian GNU/Linux 8.7 (jessie)",
+      "distrelease": "8.7",
+      "majdistrelease": "8",
+      "minordistrelease": "7"
+    }
+  },
+  "virtual": "physical",
+  "is_virtual": "false",
+  "memorysize": "7.80 GB",
+  "memoryfree": "7.10 GB",
+  "swapsize": "3.72 GB",
+  "swapfree": "3.60 GB",
+  "swapsize_mb": "3812.00",
+  "swapfree_mb": "3681.32",
+  "memorysize_mb": "7990.73",
+  "memoryfree_mb": "7273.55",
+  "osfamily": "Debian",
+  "path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+  "operatingsystemrelease": "8.7",
+  "fqdn": "villa.debian.org",
+  "processors": {
+    "models": [
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+      "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz"
+    ],
+    "count": 16,
+    "physicalcount": 2
+  },
+  "architecture": "amd64",
+  "debarchitecture": "amd64",
+  "hardwaremodel": "x86_64",
+  "operatingsystem": "Debian",
+  "processor0": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor1": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor2": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor3": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor4": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor5": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor6": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor7": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor8": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor9": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor10": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor11": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor12": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor13": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processor14": "Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz",
+  "processor15": "Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz",
+  "processorcount": "16",
+  "facterversion": "2.2.0",
+  "ipaddress6": "2001:a78:5:0:216:35ff:fe7f:be4f",
+  "lsbdistid": "Debian",
+  "system_uptime": {
+    "seconds": 3528362,
+    "hours": 980,
+    "days": 40,
+    "uptime": "40 days"
+  },
+  "kernelrelease": "3.16.0-4-amd64",
+  "kernelversion": "3.16.0",
+  "id": "root",
+  "operatingsystemmajrelease": "8",
+  "interfaces": "eth0,eth1,lo",
+  "ipaddress_eth0": "212.211.132.32",
+  "ipaddress6_eth0": "2001:a78:5:0:216:35ff:fe7f:be4f",
+  "macaddress_eth0": "f4:ce:46:b9:e5:60",
+  "netmask_eth0": "255.255.255.192",
+  "mtu_eth0": "1500",
+  "macaddress_eth1": "f4:ce:46:b9:e5:62",
+  "mtu_eth1": "1500",
+  "ipaddress_lo": "127.0.0.1",
+  "netmask_lo": "255.0.0.0",
+  "mtu_lo": "65536",
+  "lsbdistrelease": "8.7",
+  "gid": "root",
+  "domain": "debian.org",
+  "uptime_days": 40,
+  "rubyversion": "2.1.5",
+  "bios_vendor": "HP",
+  "bios_version": "P64",
+  "bios_release_date": "10/01/2009",
+  "manufacturer": "HP",
+  "productname": "ProLiant DL360 G6",
+  "serialnumber": "CZJ005078X",
+  "uuid": "35393135-3836-5A43-4A30-303530373858",
+  "type": "Rack Mount Chassis",
+  "network_eth0": "212.211.132.0",
+  "network_lo": "127.0.0.0",
+  "filesystems": "ext2,ext3,ext4",
+  "kernelmajversion": "3.16",
+  "ps": "ps -ef",
+  "lsbminordistrelease": "7",
+  "rubysitedir": "/usr/local/lib/site_ruby/2.1.0",
+  "augeasversion": "1.2.0",
+  "physicalprocessorcount": "2",
+  "macaddress": "f4:ce:46:b9:e5:60",
+  "hardwareisa": "unknown",
+  "puppetversion": "3.7.2",
+  "timezone": "UTC",
+  "uniqueid": "d3d42084",
+  "lsbmajdistrelease": "8",
+  "lsbdistcodename": "jessie",
+  "selinux": "false",
+  "uptime": "40 days",
+  "sshdsakey": "AAAAB3NzaC1kc3MAAACBAK/EneAEPRyW62MTFpr72n+zSzpL05qMp4jblfFQ8GxIirJCjX7Nthmsi0jmnicVMWEUEJrNy+Gspl87Cl8YXFQqA3R4ysSkjc1ZXN11l93UIWtBWRhbwTEUo4BFPqnZKrSd5od3jd68A/aP0lHa21P7rOLwMwQRiwphnWVjDyaHAAAAFQC46xX/1O2zzaUc9QTqAomsGCMAdwAAAIEApMsvZuv9z70BmX4rbO2ioOBCzQgkUZ3STjtE2t9Ex+spf6+8seSAtQA94gz0LA/GI09yy39fAOCNsh1gZTFngCaTZkH0NX9KQOwL7i/Z4X6Ss34w3y86yaFW9GAhGUhYnAB6/E4nShvH+/4TIFb+7FgEPl8neRCvLDgU9TLVvkAAAACBAIkM0bCEEfEvuFZq96lurC+IQ6+av0GmRJEhRjnfmYH34vs6XotXHWxzAmWUkPMTxyVMn7qIdlvi3u/RmKLy5ostmrX7PCVe9MDqrO+hdcwtsv1JPUJiM2JPttdMy4hHyiPMjG3pE1cA2OiDZkH3Fgbj9kGHinK/dV78RfDb73Qf",
+  "sshfp_dsa": "SSHFP 2 1 d75d1d9b24f3a07088706ef6533b6a8229192b86\nSSHFP 2 2 d8d8f31180dfde45cb39b0fabb65b3d20af819a7eb47fe59f9f0f278dc34860b",
+  "sshrsakey": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDPtZ76Wr0RTiDlY6xblfv+BSEgLa3n85GcNptKnypp5RbqHzUH94IAWsgx3AiP3SmevKRUWnQ2HcoQ51be1O4OA2BSGxT0d7Zsxq/WI4GvD+yJ8Kb2kRkjPFCUrp2zp3OBDBeEsfgDH6E8kOCQNiM2jSh276/bRAgz+wE6rGVtTLFYEdsqrTtb7moS7zbDjFCeBxfFmYyLH5EvBiY75D1sOuXBm9kalLpei5fe5MHCYekQtqPJPk8AJqv+uv0yBJTY5ifoAquKk5qNRVmVyVZyO414x/q02yATzUagL7clF+LqAfNV5TZCxdR0IcRt45d3f/Ac4L0qjJWRuI1XTR/h",
+  "sshfp_rsa": "SSHFP 1 1 e0866e35ab20a0dab08158fe223f92197f2d8bd9\nSSHFP 1 2 b5f3bb9e462f2357cf5dee4c9af10062f551c87c48399a5bcb740f3f0d6f5c52",
+  "sshecdsakey": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLTQXoO1vgPhblirINlhOyv/jlJJz8uDrFClbU4bp9F9+FQKc05OQ20XORWT/mfZHLg1lsOvXMdXcNWTQ8Ro5ZA=",
+  "sshfp_ecdsa": "SSHFP 3 1 791593233e69cb1785477fb4d1dc807d184791e7\nSSHFP 3 2 c5a3539240840fa6a6a48d4871654f0509078a8373f2fa9d7b3c639e33886bcb",
+  "sshed25519key": "AAAAC3NzaC1lZDI1NTE5AAAAICU+HgxYzAWGFK9D997SifOK/CxaZ+s4G+pPETE5nrOn",
+  "sshfp_ed25519": "SSHFP 4 1 595e05fdc12bb78e7d3c5c2c8dcf241aca06efcc\nSSHFP 4 2 5b5cbc300552fc49ab13c5daf074878884d5c69af6b594a480401553f94597fc",
+  "netmask": "255.255.255.192",
+  "has_srv_build_trees": false,
+  "has_srv_buildd": false,
+  "has_etc_ssh_ssh_host_ed25519_key": true,
+  "has_srv_mirrors_debian": false,
+  "has_srv_mirrors_debian_debug": false,
+  "has_srv_mirrors_debian_ports": false,
+  "has_srv_mirrors_debian_security": true,
+  "has_dev_hwrng": false,
+  "kvmdomain": false,
+  "mounts": "/,/dev/hugepages,/dev/mqueue,/srv,/sys/fs/cgroup/blkio,/sys/fs/cgroup/cpu,cpuacct,/sys/fs/cgroup/cpuset,/sys/fs/cgroup/devices,/sys/fs/cgroup/freezer,/sys/fs/cgroup/net_cls,net_prio,/sys/fs/cgroup/perf_event,/sys/fs/cgroup/systemd,/sys/fs/pstore,/sys/kernel/debug,/sys/kernel/security",
+  "brokenhosts": false,
+  "systemproductname": "ProLiant DL360 G6",
+  "hw_can_temp_sensors": true,
+  "smartarraycontroller": true,
+  "threewarecontroller": false,
+  "megaraid": false,
+  "mptraid": false,
+  "aacraid": false,
+  "swraid": false,
+  "staticsync_user_exists": false,
+  "weblogsync_user_exists": false,
+  "buildd_user_exists": false,
+  "portforwarder_user_exists": false,
+  "onion_tor_service_hostname": "{\"security.debian.org\":\"suhhvhg4eoow257o.onion\"}",
+  "onion_balance_service_hostname": "{}",
+  "staging_http_get": "curl",
+  "puppet_vardir": "/var/lib/puppet",
+  "apache2": true,
+  "apache2deb9": true,
+  "clamd": false,
+  "exim4": true,
+  "postfix": false,
+  "postgres": false,
+  "postgrey": false,
+  "greylistd": false,
+  "policydweight": false,
+  "spamd": false,
+  "php5": false,
+  "php5suhosin": false,
+  "syslogversion": "3.5",
+  "unbound": true,
+  "munin_async": true,
+  "samhain": true,
+  "systemd": true,
+  "tor_ge_0_2_9": true,
+  "root_home": "/root",
+  "v4ips": "212.211.132.32",
+  "v6ips": "2001:a78:5:0:216:35ff:fe7f:be4f",
+  "concat_basedir": "/var/lib/puppet/concat",
+  "is_pe": false,
+  "mta": "exim4"
+}
diff --git a/spec/octocatalog/hiera.yaml b/spec/octocatalog/hiera.yaml
new file mode 100644 (file)
index 0000000..225639c
--- /dev/null
@@ -0,0 +1,9 @@
+---
+:backends:
+  - yaml
+:yaml:
+  :datadir: hieradata
+:hierarchy:
+  - '%{hoster}'
+  - 'clusters/%{cluster}'
+  - 'common'
diff --git a/spec/octocatalog/run-octocatalog b/spec/octocatalog/run-octocatalog
new file mode 100755 (executable)
index 0000000..2d08704
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -euE
+
+ENV_BASE=$1
+ENV_TEST=$2
+
+for fact in spec/octocatalog/facts/*; do
+  hostname=$(basename $fact .json)
+  bundle exec octocatalog-diff \
+    --no-parallel \
+    --bootstrapped-from-dir environments/$ENV_BASE/ \
+    --bootstrapped-to-dir environments/$ENV_TEST/ \
+    --hostname $hostname \
+    --fact-file $fact \
+    --puppet-binary $CI_PROJECT_DIR/bin/puppet \
+    --display-source || [ $? == 2 ]
+done