mirror of
https://github.com/kennethreitz-archive/terrapyn.git
synced 2026-06-05 07:06:15 +00:00
provide a working directory
This commit is contained in:
@@ -5,6 +5,7 @@ name = "pypi"
|
||||
|
||||
[packages]
|
||||
"delegator.py" = "*"
|
||||
semver = "*"
|
||||
|
||||
[dev-packages]
|
||||
black = "*"
|
||||
|
||||
Generated
+9
-1
@@ -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
@@ -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:])
|
||||
|
||||
Reference in New Issue
Block a user