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

Commit 105b22e

Browse files
fpedrinikamilbednarz
authored andcommitted
Add ability to pass encryption key as string to ChefApi
1 parent 7b266cb commit 105b22e

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

chef/api.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,16 @@ class ChefAPI(object):
5353
5454
In order to use :class:`EncryptedDataBagItem` object it is necessary
5555
to specify either a path to a file containing the Chef secret key and
56-
the Encrypted Databag version to be used (v1 by default)
56+
the Encrypted Databag version to be used (v1 by default).
57+
If both secret_file and secret_key are passed as argument, secret_key
58+
will take precedence.
5759
"""
5860

5961
ruby_value_re = re.compile(r'#\{([^}]+)\}')
6062
env_value_re = re.compile(r'ENV\[(.+)\]')
6163
ruby_string_re = re.compile(r'^\s*(["\'])(.*?)\1\s*$')
6264

63-
64-
def __init__(self, url, key, client, version='0.10.8', headers={}, ssl_verify=True, secret_file=None, encryption_version=1):
65+
def __init__(self, url, key, client, version='0.10.8', headers={}, ssl_verify=True, secret_file=None, secret_key=None, encryption_version=1):
6566
self.url = url.rstrip('/')
6667
self.parsed_url = six.moves.urllib.parse.urlparse(self.url)
6768
if not isinstance(key, Key):
@@ -71,19 +72,23 @@ def __init__(self, url, key, client, version='0.10.8', headers={}, ssl_verify=Tr
7172
self.key = key
7273
self.client = client
7374
self.version = version
74-
self.encryption_version = encryption_version
7575
self.headers = dict((k.lower(), v) for k, v in six.iteritems(headers))
76+
self.encryption_version = encryption_version
7677
self.version_parsed = pkg_resources.parse_version(self.version)
7778
self.platform = self.parsed_url.hostname == 'api.opscode.com'
7879
self.ssl_verify = ssl_verify
7980
if not api_stack_value():
8081
self.set_default()
8182
self.encryption_key = None
83+
# Read the secret key from the input file
8284
if secret_file is not None:
8385
self.secret_file = secret_file
8486
if os.path.exists(self.secret_file):
8587
self.encryption_key = open(self.secret_file).read().strip()
86-
88+
if secret_key is not None:
89+
if encryption_key is not None:
90+
log.debug('Two encryption key found (file and parameter). The key passed as parameter will be used')
91+
self.encryption_key = secret_key
8792

8893
@classmethod
8994
def from_config_file(cls, path):
@@ -95,8 +100,8 @@ def from_config_file(cls, path):
95100
# Can't even read the config file
96101
log.debug('Unable to read config file "%s"', path)
97102
return
98-
url = key_path = client_name = encryption_version = None
99103
ssl_verify = True
104+
url = key_path = client_name = encryption_version = None
100105
for line in open(path):
101106
if not line.strip() or line.startswith('#'):
102107
continue # Skip blanks and comments

0 commit comments

Comments
 (0)