Skip to content
This repository was archived by the owner on May 9, 2020. It is now read-only.

Commit 3b83835

Browse files
committed
Merge pull request #11 from dcrosta/knife-rb-env-values
Support "#{ENV['FOO']}" expressions in knife.rb
2 parents 55d0db4 + 5a304cf commit 3b83835

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

chef/api.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class ChefAPI(object):
6767
"""
6868

6969
ruby_value_re = re.compile(r'#\{([^}]+)\}')
70+
env_value_re = re.compile(r'ENV\[(.+)\]')
7071

7172
def __init__(self, url, key, client, version='0.10.8', headers={}):
7273
self.url = url.rstrip('/')
@@ -105,6 +106,10 @@ def _ruby_value(match):
105106
expr = match.group(1).strip()
106107
if expr == 'current_dir':
107108
return os.path.dirname(path)
109+
envmatch = cls.env_value_re.match(expr)
110+
if envmatch:
111+
envmatch = envmatch.group(1).strip('"').strip("'")
112+
return os.environ.get(envmatch) or ''
108113
log.debug('Unknown ruby expression in line "%s"', line)
109114
raise UnknownRubyExpression
110115
try:

chef/tests/configs/basic.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
chef_server_url 'http://chef:4000'
2-
client_key 'chef/tests/client.pem'
2+
client_key '../client.pem'
33
# Use both kind of quotes, also a comment for testing
44
node_name "test_1"

chef/tests/configs/current_dir.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
chef_server_url 'http://chef:4000'
2-
client_key 'chef/tests/client.pem'
2+
client_key '../client.pem'
33
node_name "#{current_dir}/test_1"

chef/tests/configs/env_values.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
chef_server_url 'http://chef:4000'
2+
client_key '../client.pem'
3+
node_name "#{ENV['_PYCHEF_TEST_']}"

chef/tests/test_api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ def test_current_dir(self):
1818
api = self.load('current_dir.rb')
1919
path = os.path.join(os.path.dirname(__file__), 'configs', 'test_1')
2020
self.assertEqual(api.client, path)
21+
22+
def test_env_variables(self):
23+
try:
24+
os.environ['_PYCHEF_TEST_'] = 'foobar'
25+
api = self.load('env_values.rb')
26+
self.assertEqual(api.client, 'foobar')
27+
finally:
28+
del os.environ['_PYCHEF_TEST_']

0 commit comments

Comments
 (0)