Skip to content

Commit 3e19996

Browse files
Merge pull request #10 from osuosl-cookbooks/ramereth/osl_local_ip
2 parents e590b9b + 7d23c02 commit 3e19996

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

libraries/helpers.rb

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
module OSLResources
22
module Cookbook
33
module Helpers
4+
require 'ipaddr'
5+
require 'iniparse'
6+
47
# osl_ifconfig helpers
58
def default_nm_controlled
69
node['platform_version'].to_i >= 8 ? 'yes' : 'no'
710
end
811

912
# Based on https://github.com/chef/chef/blob/61a8aa44ac33fc3bbeb21fa33acf919a97272eb7/lib/chef/resource/systemd_unit.rb#L66-L83
1013
def to_ini(content)
11-
require 'iniparse'
1214
case content
1315
when Hash
1416
IniParse.gen do |doc|
@@ -50,8 +52,58 @@ def virtualbox_packages
5052
]
5153
end
5254
end
55+
56+
def osl_local_ipv4?
57+
local = false
58+
ip = IPAddr.new(node['ipaddress'])
59+
osl_local_ip.each do |net|
60+
net = IPAddr.new net
61+
local = net.include?(ip)
62+
break if local
63+
end
64+
local
65+
end
66+
67+
def osl_local_ipv6?
68+
# If we don't have an IPv6, let's just assume it's false
69+
return false unless node['ip6address']
70+
71+
local = false
72+
ip = IPAddr.new(node['ip6address'])
73+
osl_local_ip.each do |net|
74+
net = IPAddr.new net
75+
local = net.include?(ip)
76+
break if local
77+
end
78+
local
79+
end
80+
81+
private
82+
83+
def osl_local_ip
84+
# These are local to the OSU campus
85+
[
86+
'10.0.0.0/23',
87+
'10.1.0.0/23',
88+
'10.1.2.0/23',
89+
'10.1.100.0/22',
90+
'10.6.4.0/22',
91+
'10.162.136.0/24', # Milne Workstation subnet
92+
'128.193.126.192/28', # Milne Server subnet
93+
'128.193.152.128/27', # OSU Gateway from Milne workstations
94+
'140.211.9.0/24',
95+
'140.211.10.0/24',
96+
'140.211.15.0/24',
97+
'140.211.166.0/23',
98+
'140.211.168.0/24',
99+
'140.211.169.0/24',
100+
'2605:bc80:3010::/48',
101+
]
102+
end
53103
end
54104
end
55105
end
56106
Chef::DSL::Recipe.include ::OSLResources::Cookbook::Helpers
57107
Chef::Resource.include ::OSLResources::Cookbook::Helpers
108+
# Needed to used in attributes/
109+
Chef::Node.include ::OSLResources::Cookbook::Helpers
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require_relative '../../spec_helper'
2+
require_relative '../../../libraries/helpers'
3+
4+
RSpec.describe OSLResources::Cookbook::Helpers do
5+
class DummyClass < Chef::Node
6+
include OSLResources::Cookbook::Helpers
7+
end
8+
9+
subject { DummyClass.new }
10+
11+
describe '#osl_local_ipv4?' do
12+
it 'local IPv4 address' do
13+
allow(subject).to receive(:[]).with('ipaddress').and_return('140.211.166.130')
14+
expect(subject.osl_local_ipv4?).to eq true
15+
end
16+
it 'external IPv4 address' do
17+
allow(subject).to receive(:[]).with('ipaddress').and_return('216.165.191.54')
18+
expect(subject.osl_local_ipv4?).to eq false
19+
end
20+
end
21+
22+
describe '#osl_local_ipv6?' do
23+
it 'local IPv6 address' do
24+
allow(subject).to receive(:[]).with('ip6address').and_return('2605:bc80:3010::130')
25+
expect(subject.osl_local_ipv6?).to eq true
26+
end
27+
it 'external IPv6 address' do
28+
allow(subject).to receive(:[]).with('ip6address').and_return('2600:3402:600:24::154')
29+
expect(subject.osl_local_ipv6?).to eq false
30+
end
31+
end
32+
end

0 commit comments

Comments
 (0)