provide a working directory

This commit is contained in:
2018-09-17 04:29:24 -04:00
parent efcf3a3808
commit cacf0406e6
3 changed files with 49 additions and 10 deletions
+1
View File
@@ -5,6 +5,7 @@ name = "pypi"
[packages]
"delegator.py" = "*"
semver = "*"
[dev-packages]
black = "*"
Generated
+9 -1
View File
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "adac48e8ce62bb17d66188bf9b13b819a7bbadec269cafc96dba2e40c682a792"
"sha256": "ddb51aaa9e29c91e0a3a5328aa86a591e428bd035c358c32b78bda0ab5117293"
},
"pipfile-spec": 6,
"requires": {
@@ -37,6 +37,14 @@
"sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
],
"version": "==0.6.0"
},
"semver": {
"hashes": [
"sha256:41c9aa26c67dc16c54be13074c352ab666bce1fa219c7110e8f03374cd4206b0",
"sha256:5b09010a66d9a3837211bb7ae5a20d10ba88f8cb49e92cb139a69ef90d5060d8"
],
"index": "pypi",
"version": "==2.8.1"
}
},
"develop": {
+39 -9
View File
@@ -1,7 +1,9 @@
import os
import tempfile
import pathlib
import delegator
import semver
from . import environment
from .exceptions import DependencyNotFound
@@ -31,13 +33,17 @@ class BaseCommand:
class TerraformInstance(BaseCommand):
def __init__(self, *, environ=None):
def __init__(self, *, working_dir=None, environ=None):
self.environ = environment.evaluate(environ=environ)
self.version = None
self.temp_dir = None
self._version = None
self._temp_dir = None
if working_dir:
self._working_dir = pathlib.Path(working_dir)
else:
self._working_dir = None
self._sanity_check()
self.setup()
self._sanity_check()
def __repr__(self):
return f"<TerraformCommand version={self.version!r}>"
@@ -50,16 +56,40 @@ class TerraformInstance(BaseCommand):
self.cleanup()
def setup(self):
self.temp_dir = tempfile.mkdtemp(suffix="-terraform-plan", prefix="terrapyn-")
if not self.temp_dir and self.temp_dir is not False:
self.temp_dir
def cleanup(self):
if self.temp_dir:
os.rmdir(self.temp_dir)
self.temp_dir = None
self._temp_dir = False
@property
def version(self):
return f"{self._version['major']}.{self._version['minor']}.{self._version['patch']}"
@property
def temp_dir(self):
if not self._temp_dir:
self._temp_dir = pathlib.Path(tempfile.mkdtemp(suffix="-terraform-plan", prefix="terrapyn-"))
return self._temp_dir
@property
def working_dir(self):
# Make the working directory, if it doesn't already exist.
if self._working_dir:
os.makedirs(self._working_dir, exist_okay=True)
return self._working_dir
else:
return self.temp_dir
def tf(self, *args, output=True):
# Change to working directory.
os.chdir(self.temp_dir)
def _tf(self, *args, output=True):
cmd = [self.environ["TERRAFORM_PATH"]] + list(args)
c = delegator.run(cmd, timeout=self.environ["TERRAPYN_TIMEOUT"])
c = delegator.run(cmd, timeout=self.environ["TERRAPYN_TIMEOUT"], cwd=self.working_dir)
if not output:
return c
else:
@@ -67,4 +97,4 @@ class TerraformInstance(BaseCommand):
return c.out.strip()
def _sanity_check(self):
self.version = self._tf("--version").split()[1][1:]
self._version = semver.parse(self.tf("--version").split()[1][1:])