Skip to content
This repository has been archived by the owner on Jul 18, 2019. It is now read-only.

Commit

Permalink
provide a working directory
Browse files Browse the repository at this point in the history
  • Loading branch information
kennethreitz committed Sep 17, 2018
1 parent efcf3a3 commit cacf040
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 10 deletions.
1 change: 1 addition & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ name = "pypi"

[packages]
"delegator.py" = "*"
semver = "*"

[dev-packages]
black = "*"
Expand Down
10 changes: 9 additions & 1 deletion Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 39 additions & 9 deletions terrapyn/terraform.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import os
import tempfile
import pathlib

import delegator
import semver

from . import environment
from .exceptions import DependencyNotFound
Expand Down Expand Up @@ -31,13 +33,17 @@ def _which(command):


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}>"
Expand All @@ -50,21 +56,45 @@ def __exit__(self, type, value, tb):
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:
assert c.return_code == 0
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:])

0 comments on commit cacf040

Please sign in to comment.