Tower: upload cetmix_tower_aws 18.0.1.0.1 (was 18.0.1.0.1, via marketplace)

This commit is contained in:
2026-05-03 18:54:19 +00:00
parent d4789aaed6
commit e40caa55e8
20 changed files with 1444 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,684 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Cetmix Tower AWS</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="cetmix-tower-aws">
<h1 class="title">Cetmix Tower AWS</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e427fa4368b78aacbc6faa6232b54496e83fbe4905ddef4cc17f3913e5ee3ee0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws"><img alt="cetmix/cetmix-tower" src="https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github" /></a></p>
<p><strong>⚠️ DISCLAIMER: TECHNICAL MODULE</strong></p>
<p>This module integrates Boto3 library, the Amazon Web Services (AWS)
Software Development Kit (SDK) for Python, into the Cetmix Tower.</p>
<blockquote>
<strong>This is a technical module intended for system administrators or
DevOps professionals.</strong> It may involve server configuration,
infrastructure management, or advanced setup outside the standard
Odoo interface. Not intended for direct use by end users.</blockquote>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a><ul>
<li><a class="reference internal" href="#example-of-cetmix-tower-python-command-to-list-ec2-instances" id="toc-entry-4">Example of Cetmix Tower Python Command to List EC2 Instances</a><ul>
<li><a class="reference internal" href="#navigate-to-command-creation" id="toc-entry-5">Navigate to Command Creation</a></li>
<li><a class="reference internal" href="#configure-command-settings" id="toc-entry-6">Configure Command Settings</a></li>
<li><a class="reference internal" href="#add-required-variables" id="toc-entry-7">Add Required Variables</a></li>
<li><a class="reference internal" href="#add-required-secrets" id="toc-entry-8">Add Required Secrets</a></li>
<li><a class="reference internal" href="#write-python-code" id="toc-entry-9">Write Python Code</a></li>
<li><a class="reference internal" href="#save-the-command" id="toc-entry-10">Save the Command</a></li>
</ul>
</li>
<li><a class="reference internal" href="#running-the-aws-ec2-command" id="toc-entry-11">Running the AWS EC2 Command</a><ul>
<li><a class="reference internal" href="#navigate-to-server" id="toc-entry-12">Navigate to Server</a></li>
<li><a class="reference internal" href="#execute-command-from-server" id="toc-entry-13">Execute Command from Server</a></li>
<li><a class="reference internal" href="#view-command-results" id="toc-entry-14">View Command Results</a></li>
</ul>
</li>
<li><a class="reference internal" href="#example-output" id="toc-entry-15">Example Output</a></li>
<li><a class="reference internal" href="#creating-additional-aws-commands" id="toc-entry-16">Creating Additional AWS Commands</a></li>
</ul>
</li>
<li><a class="reference internal" href="#changelog" id="toc-entry-17">Changelog</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-18">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-19">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-20">Authors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-21">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h1><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h1>
<p>Although Amazon Web Services (AWS) allows API calls without using an
SDK, we found that integrating the Amazon SDK into Cetmix Tower makes
provisioning, configuring, and maintaining AWS instances more convenient
for the end user. However, not all Cetmix Tower users require this
functionality, so to avoid overloading the system, we have included it
in a separate module.</p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<p><strong>Prerequisites</strong></p>
<p>The module has <tt class="docutils literal">boto3</tt> defined in its external dependencies, which
means, you should install the Python <tt class="docutils literal">boto3</tt> package manually if you
dont have automatic package installation configured in your Odoo
environment. Run <tt class="docutils literal">pip install boto3</tt> to install it.</p>
<p><strong>Setting up AWS Access</strong></p>
<ol class="arabic">
<li><p class="first"><strong>Create AWS Access Keys</strong></p>
<p>To use the AWS integration with Cetmix Tower, you need to create AWS
access keys:</p>
<ul class="simple">
<li>Follow the <a class="reference external" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html">official AWS
documentation</a>
(<a class="reference external" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html">https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html</a>)
for creating IAM access keys</li>
<li>Its recommended to create a dedicated IAM user with appropriate
permissions for Cetmix Tower</li>
<li>Store your access key ID and secret access key securely - youll
need them in the next step</li>
</ul>
</li>
<li><p class="first"><strong>Configure AWS Secrets in Cetmix Tower</strong></p>
<p>Create two secrets in Cetmix Tower to store your AWS credentials:</p>
<ul class="simple">
<li>Navigate to <tt class="docutils literal">Cetmix Tower &gt; Settings &gt; Keys and Secrets</tt></li>
<li>Create a new Secret with:<ul>
<li>Name: <tt class="docutils literal">AWS Access Key</tt></li>
<li>Reference: <tt class="docutils literal">aws_access_key</tt></li>
<li>Key Type: <tt class="docutils literal">Secret</tt></li>
</ul>
</li>
<li>Enter your AWS access key ID in the Secret Value tab</li>
<li>Similarly, create another Secret with:<ul>
<li>Name: <tt class="docutils literal">AWS Secret Access Key</tt></li>
<li>Reference: <tt class="docutils literal">aws_secret_access_key</tt></li>
<li>Key Type: <tt class="docutils literal">Secret</tt></li>
</ul>
</li>
<li>Enter your AWS secret access key in the Secret Value tab</li>
</ul>
<!-- -->
<blockquote>
<p>Note: These secrets will be accessible as
<tt class="docutils literal">#!cxtower.secret.aws_access_key!#</tt> and
<tt class="docutils literal">#!cxtower.secret.aws_secret_access_key!#</tt> in your commands.</p>
</blockquote>
</li>
<li><p class="first"><strong>Configure AWS Region</strong></p>
<p>Create a variable to define your AWS region:</p>
<ul class="simple">
<li>Navigate to <tt class="docutils literal">Cetmix Tower &gt; Settings &gt; Variables</tt></li>
<li>Create a new Variable with:<ul>
<li>Name: <tt class="docutils literal">AWS Region Name</tt></li>
<li>Reference: <tt class="docutils literal">aws_region_name</tt></li>
<li>Type: <tt class="docutils literal">String</tt></li>
</ul>
</li>
<li>Set your AWS region (e.g., <tt class="docutils literal"><span class="pre">us-east-1</span></tt>, <tt class="docutils literal"><span class="pre">eu-west-1</span></tt>) as the
value</li>
</ul>
</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
<p>Please check the <a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">official Boto3
Documentation</a>
(<a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">https://boto3.amazonaws.com/v1/documentation/api/latest/index.html</a>) for
the detailed information about the services and methods provided by the
Boto3 library.</p>
<blockquote>
<strong>Disclaimer</strong>: The following example demonstrates one of many
possible commands you can create and run with this module. The boto3
library provides access to the full range of AWS services and methods
- this is just a starting point to help you get familiar with the
integration.</blockquote>
<div class="section" id="example-of-cetmix-tower-python-command-to-list-ec2-instances">
<h2><a class="toc-backref" href="#toc-entry-4">Example of Cetmix Tower Python Command to List EC2 Instances</a></h2>
<div class="section" id="navigate-to-command-creation">
<h3><a class="toc-backref" href="#toc-entry-5">Navigate to Command Creation</a></h3>
<ul class="simple">
<li>Go to <tt class="docutils literal">Cetmix Tower &gt; Commands &gt; Commands</tt></li>
<li>Click the <tt class="docutils literal">Create</tt> button</li>
</ul>
</div>
<div class="section" id="configure-command-settings">
<h3><a class="toc-backref" href="#toc-entry-6">Configure Command Settings</a></h3>
<ul class="simple">
<li>Set a descriptive <tt class="docutils literal">Name</tt> (e.g., “List AWS EC2 Instances”)</li>
<li>Leave <tt class="docutils literal">Reference</tt> blank to generate automatically (or set a custom
reference)</li>
<li>Select <tt class="docutils literal">Action</tt>: “Execute Python code”</li>
<li>Set <tt class="docutils literal">Access Level</tt>: Choose appropriate level (e.g., “Manager”)</li>
<li>Optional: Set <tt class="docutils literal">Default Path</tt> if needed</li>
<li>Optional: Add <tt class="docutils literal">Tags</tt> (e.g., “aws”, “ec2”) for better organization</li>
</ul>
</div>
<div class="section" id="add-required-variables">
<h3><a class="toc-backref" href="#toc-entry-7">Add Required Variables</a></h3>
<ul class="simple">
<li>In the <tt class="docutils literal">Variables</tt> tab, add the previously configured variable:<ul>
<li><tt class="docutils literal">aws_region_name</tt></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="add-required-secrets">
<h3><a class="toc-backref" href="#toc-entry-8">Add Required Secrets</a></h3>
<ul class="simple">
<li>In the <tt class="docutils literal">Secrets</tt> field, add the previously configured secrets:<ul>
<li><tt class="docutils literal">aws_access_key</tt></li>
<li><tt class="docutils literal">aws_secret_access_key</tt></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="write-python-code">
<h3><a class="toc-backref" href="#toc-entry-9">Write Python Code</a></h3>
<ul>
<li><p class="first">Go to the <tt class="docutils literal">Code</tt> tab</p>
</li>
<li><p class="first">Enter the following Python code:</p>
<pre class="code python literal-block">
<span class="c1"># List EC2 instances using boto3</span><span class="w">
</span><span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;exit_code&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span><span class="w">
</span><span class="n">session</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#,</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">ec2</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">client</span><span class="p">(</span><span class="s1">'ec2'</span><span class="p">)</span><span class="w">
</span><span class="n">instances</span> <span class="o">=</span> <span class="n">ec2</span><span class="o">.</span><span class="n">describe_instances</span><span class="p">()</span><span class="w">
</span><span class="n">instance_details</span> <span class="o">=</span> <span class="p">[]</span><span class="w">
</span><span class="k">for</span> <span class="n">reservation</span> <span class="ow">in</span> <span class="n">instances</span><span class="p">[</span><span class="s1">'Reservations'</span><span class="p">]:</span><span class="w">
</span> <span class="k">for</span> <span class="n">instance</span> <span class="ow">in</span> <span class="n">reservation</span><span class="p">[</span><span class="s1">'Instances'</span><span class="p">]:</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">=</span> <span class="s2">&quot;Instance ID: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="p">[</span><span class="s1">'InstanceId'</span><span class="p">]</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">+=</span> <span class="s2">&quot;, Type: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'InstanceType'</span><span class="p">,</span> <span class="s1">'Unknown'</span><span class="p">)</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">+=</span> <span class="s2">&quot;, State: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'State'</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Name'</span><span class="p">,</span> <span class="s1">'Unknown'</span><span class="p">)</span><span class="w">
</span> <span class="n">instance_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">instance_detail</span><span class="p">)</span><span class="w">
</span><span class="k">if</span> <span class="n">instance_details</span><span class="p">:</span><span class="w">
</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;Found &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">instance_details</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; EC2 instances:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">instance_details</span><span class="p">)</span><span class="w">
</span><span class="k">else</span><span class="p">:</span><span class="w">
</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;No EC2 instances found&quot;</span>
</pre>
</li>
</ul>
</div>
<div class="section" id="save-the-command">
<h3><a class="toc-backref" href="#toc-entry-10">Save the Command</a></h3>
<ul class="simple">
<li>Click the <tt class="docutils literal">Save</tt> button to create the command</li>
</ul>
</div>
</div>
<div class="section" id="running-the-aws-ec2-command">
<h2><a class="toc-backref" href="#toc-entry-11">Running the AWS EC2 Command</a></h2>
<div class="section" id="navigate-to-server">
<h3><a class="toc-backref" href="#toc-entry-12">Navigate to Server</a></h3>
<ul class="simple">
<li>Go to <tt class="docutils literal">Cetmix Tower &gt; Servers &gt; Servers</tt></li>
<li>Open the server where you want to run the command</li>
</ul>
</div>
<div class="section" id="execute-command-from-server">
<h3><a class="toc-backref" href="#toc-entry-13">Execute Command from Server</a></h3>
<ul class="simple">
<li>Click the <tt class="docutils literal">Command</tt> button at the top of the server form</li>
<li>In the popup dialog:<ul>
<li>Select your AWS EC2 command from the dropdown</li>
<li>Verify the variable values (if any need adjustment)</li>
<li>Click <tt class="docutils literal">Run</tt> to execute</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="view-command-results">
<h3><a class="toc-backref" href="#toc-entry-14">View Command Results</a></h3>
<ul class="simple">
<li>After execution, the command log will display showing:<ul>
<li>The command executed</li>
<li>Execution status</li>
<li>Output message containing EC2 instance details if successful</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="example-output">
<h2><a class="toc-backref" href="#toc-entry-15">Example Output</a></h2>
<p>For a successful execution with EC2 instances:</p>
<pre class="code bash literal-block">
Found<span class="w"> </span><span class="m">3</span><span class="w"> </span>EC2<span class="w"> </span>instances:<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0abc123def456789,<span class="w"> </span>Type:<span class="w"> </span>t2.micro,<span class="w"> </span>State:<span class="w"> </span>running<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0def456abc789123,<span class="w"> </span>Type:<span class="w"> </span>t3.medium,<span class="w"> </span>State:<span class="w"> </span>stopped<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0789abc123def456,<span class="w"> </span>Type:<span class="w"> </span>m5.large,<span class="w"> </span>State:<span class="w"> </span>running
</pre>
<p>For a successful execution with no EC2 instances:</p>
<pre class="code bash literal-block">
No<span class="w"> </span>EC2<span class="w"> </span>instances<span class="w"> </span>found
</pre>
</div>
<div class="section" id="creating-additional-aws-commands">
<h2><a class="toc-backref" href="#toc-entry-16">Creating Additional AWS Commands</a></h2>
<p>The cetmix_tower_aws module provides access to the boto3 Python library
for AWS service integration. Here are some common services you can use:</p>
<pre class="code python literal-block">
<span class="c1"># Standard client initialization pattern</span><span class="w">
</span><span class="n">client</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">client</span><span class="p">(</span><span class="w">
</span> <span class="s1">'service_name'</span><span class="p">,</span> <span class="c1"># Replace with: ec2, s3, rds, cloudwatch, etc.</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}},</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1"># Or use resource interface for object-oriented access</span><span class="w">
</span><span class="n">resource</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="w">
</span> <span class="s1">'service_name'</span><span class="p">,</span> <span class="c1"># Replace with: ec2, s3, etc.</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}},</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#</span><span class="w">
</span><span class="p">)</span>
</pre>
<p>Popular AWS services include: EC2 (compute), S3 (storage), RDS
(databases), and CloudWatch (monitoring).</p>
<p>For more details, see the <a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">AWS Boto3
Documentation</a>.</p>
</div>
</div>
<div class="section" id="changelog">
<h1><a class="toc-backref" href="#toc-entry-17">Changelog</a></h1>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-18">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_aws%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-19">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-20">Authors</a></h2>
<ul class="simple">
<li>Cetmix</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-21">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws">cetmix/cetmix-tower</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</body>
</html>