<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="https://derushadigital.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://derushadigital.com/" rel="alternate" type="text/html" /><updated>2021-06-17T11:06:17+00:00</updated><id>https://derushadigital.com/feed.xml</id><title type="html">Derusha Digital Designs</title><subtitle>silly ideas well documented</subtitle><author><name>Allen Derusha</name></author><entry><title type="html">Install and Configure Ansible AWX on Ubuntu 18+</title><link href="https://derushadigital.com/other%20projects/2021/06/10/Ansible-AWX-On-Ubuntu-18+.html" rel="alternate" type="text/html" title="Install and Configure Ansible AWX on Ubuntu 18+" /><published>2021-06-10T00:00:00+00:00</published><updated>2021-06-10T00:00:00+00:00</updated><id>https://derushadigital.com/other%20projects/2021/06/10/Ansible-AWX-On-Ubuntu-18+</id><content type="html" xml:base="https://derushadigital.com/other%20projects/2021/06/10/Ansible-AWX-On-Ubuntu-18+.html">&lt;p&gt;Complete installation script for deploying AWX on Ubuntu with Kubernetes&lt;/p&gt;

&lt;h1 id=&quot;install-and-configure-ansible-awx-on-ubuntu-18&quot;&gt;Install and Configure Ansible AWX on Ubuntu 18+&lt;/h1&gt;

&lt;p&gt;Since AWX moved the primary installation method to Kubernetes, it’s become a little more difficult to setup a test/dev installation of AWX.  Nearly every guide I could find on the internet was written for AWX 17 and below, so I assembled this script to deploy Ansible AWX on Ubuntu 18 and above.&lt;/p&gt;

&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;SSH access to Ubuntu 18/20 host which will run AWX (system requires 4 CPUs and 4GB RAM)&lt;/li&gt;
  &lt;li&gt;Logged-in user account with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo&lt;/code&gt; access&lt;/li&gt;
  &lt;li&gt;Hostname set correctly such that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hostname&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hostname --fqdn&lt;/code&gt; return the correct responses&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;run-script-from-github&quot;&gt;Run script from GitHub&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://raw.githubusercontent.com/aderusha/aderusha.github.io/master/scripts/ubuntu-minikube-awx.sh
&lt;span class=&quot;nb&quot;&gt;chmod&lt;/span&gt; +x ubuntu-minikube-awx.sh
./ubuntu-minikube-awx.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;ubuntu-minikube-awxsh&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ubuntu-minikube-awx.sh&lt;/code&gt;&lt;/h2&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Color codes for progress text&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'\033[1;37m'&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'\033[0;32m'&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'\033[0m'&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# This script needs to run with permissions granted to the docker user group later, so check all of that first&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;docker
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;getent group &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Creating group &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;groupadd &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi

if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;getent group &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;:&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Adding user &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; to group &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;usermod &lt;span class=&quot;nt&quot;&gt;-aG&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi

if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-gn&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Relaunching with group &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;sg &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKERGROUP&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$*&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# download and install docker&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Downloading and installing Docker&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
curl &lt;span class=&quot;nt&quot;&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-key add -
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;add-apt-repository &lt;span class=&quot;s2&quot;&gt;&quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;lsb_release &lt;span class=&quot;nt&quot;&gt;-cs&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; stable&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt update
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-y&lt;/span&gt; docker-ce docker-ce-cli containerd.io

&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl restart docker

&lt;span class=&quot;c&quot;&gt;# install kubectl snap&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Downloading and installing kubectl&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;snap &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;kubectl &lt;span class=&quot;nt&quot;&gt;--classic&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# install minikube&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Downloading and installing minikube&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
curl &lt;span class=&quot;nt&quot;&gt;-LO&lt;/span&gt; https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;dpkg &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; minikube_latest_amd64.deb
minikube start &lt;span class=&quot;nt&quot;&gt;--addons&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;ingress &lt;span class=&quot;nt&quot;&gt;--install-addons&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--kubernetes-version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;stable &lt;span class=&quot;nt&quot;&gt;--driver&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;docker 

&lt;span class=&quot;c&quot;&gt;# confirm permissions on minikube dirs&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$USER&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.kube &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.minikube
&lt;span class=&quot;nb&quot;&gt;chmod&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; u+wrx &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.kube &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.minikube

&lt;span class=&quot;c&quot;&gt;# show running pods&lt;/span&gt;
minikube kubectl &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; get pods &lt;span class=&quot;nt&quot;&gt;-A&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Creating and starting minikube services&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# setup minikube as a service to launch on start&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/systemd/system/minikube.service &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
[Unit]
Description=minikube Kubernetes service
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/minikube start
ExecStop=/usr/bin/minikube stop
Group=docker
User=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# reload systemd and enable the service&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; daemon-reload
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;minikube.service
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl start minikube.service

&lt;span class=&quot;c&quot;&gt;# setup k8s dashboard as a service to launch on start&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/systemd/system/minikube-dashboard.service &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
[Unit]
Description=minikube Kubernetes Dashboard UI
After=minikube.service

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/usr/bin/minikube dashboard
Group=docker
User=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# reload systemd and enable the service&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; daemon-reload
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;minikube-dashboard.service
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl start minikube-dashboard.service

&lt;span class=&quot;c&quot;&gt;# setup kubectl proxy for dashboard, leave disabled&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/systemd/system/kubectl-proxy-8001.service &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
[Unit]
Description=minikube Kubernetes proxy service 8001
After=minikube-dashboard.service

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/bin/bash -c &quot;/snap/bin/kubectl proxy --address 0.0.0.0 --port=8001 --accept-hosts '.*'&quot;
Group=docker
User=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# reload systemd and disable the service (k8s dashboard has no user auth, enable as needed)&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; daemon-reload
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl disable kubectl-proxy-8001.service

&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Deploying AWX Operator&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;AWX_OPERATOR_RELEASE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;--silent&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;https://api.github.com/repos/ansible/awx-operator/releases/latest&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'&quot;tag_name&quot;:'&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-E&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'s/.*&quot;([^&quot;]+)&quot;.*/\1/'&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
minikube kubectl &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; apply &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/ansible/awx-operator/&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;AWX_OPERATOR_RELEASE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/deploy/awx-operator.yaml

&lt;span class=&quot;c&quot;&gt;# continue once STATUS == Running&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Waiting for AWX Operator&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;until&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;minikube kubectl get pods | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;awx-operator.*Running&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;wc&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-ge&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;1&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do 
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;1
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# create deployment file&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Deploying AWX&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt; &amp;gt;&amp;gt; awx-deploy.yml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;hostname&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
spec:
  service_type: NodePort
  ingress_type: ingress
  hostname: &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;hostname&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--fqdn&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# execute deployment file&lt;/span&gt;
minikube kubectl apply &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; awx-deploy.yml

&lt;span class=&quot;c&quot;&gt;# wait until we have 2 pods running which start with &quot;${HOSTNAME}-&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Waiting for AWX&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;until&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;minikube kubectl get pods | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;-.*Running&quot;&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;wc&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-l&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-ge&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;2&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;do 
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;1
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# create a port forward service for access to AWX&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Creating AWX port forward&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo tee&lt;/span&gt; /etc/systemd/system/kubectl-awx-forward.service &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
[Unit]
Description=minikube AWX port forward 80
After=minikube.service

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/bin/bash -c &quot;/snap/bin/kubectl port-forward --address=0.0.0.0 --namespace=default  --kubeconfig /root/.kube/config service/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;-service 80:80&quot;
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF

&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;# copy kubectl config to root homedir for service&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo cp&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/.kube /root

&lt;span class=&quot;c&quot;&gt;# reload systemd and enable the service&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nt&quot;&gt;--system&lt;/span&gt; daemon-reload
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl &lt;span class=&quot;nb&quot;&gt;enable &lt;/span&gt;kubectl-awx-forward.service
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;systemctl start kubectl-awx-forward.service

&lt;span class=&quot;c&quot;&gt;# continue after AWX upgrade&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Waiting for AWX upgrade to complete&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;NC&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;30
&lt;span class=&quot;k&quot;&gt;while &lt;/span&gt;wget &lt;span class=&quot;nt&quot;&gt;-qO-&lt;/span&gt; http://127.0.0.1 | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;AWX is currently upgrading&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; /dev/null&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;do 
  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;1
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# collect the password for AWX user &quot;admin&quot;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;AWX_ADMINPASS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;minikube kubectl &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; get secret &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-admin-password&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jsonpath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'{.data.password}'&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;base64&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--decode&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--iso-8601&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;seconds&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;AWX installed and running, access with user &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; and password &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;WHITE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;AWX_ADMINPASS&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>Allen Derusha</name></author><category term="Other Projects" /><category term="Ansible" /><category term="AWX" /><category term="Other Projects" /><summary type="html">Complete installation script for deploying AWX on Ubuntu with Kubernetes</summary></entry><entry><title type="html">Fire HD 10 Tablet VESA Mount</title><link href="https://derushadigital.com/digital%20designs/2021/04/22/Fire-HD-10-VESA.html" rel="alternate" type="text/html" title="Fire HD 10 Tablet VESA Mount" /><published>2021-04-22T00:00:00+00:00</published><updated>2021-04-22T00:00:00+00:00</updated><id>https://derushadigital.com/digital%20designs/2021/04/22/Fire-HD-10-VESA</id><content type="html" xml:base="https://derushadigital.com/digital%20designs/2021/04/22/Fire-HD-10-VESA.html">&lt;p&gt;3D printable VESA mount for the Fire HD 10 Tablet&lt;/p&gt;

&lt;h1 id=&quot;fire-hd-10-tablet-vesa-mount&quot;&gt;&lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount&quot;&gt;Fire HD 10 Tablet VESA Mount&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount&quot;&gt;This project&lt;/a&gt; provides a 100x100 VESA mount for an &lt;a href=&quot;https://amzn.to/3xaqCTT&quot;&gt;Amazon Fire HD 10 Tablet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have been working out some ideas to get a little better functionality out of my DRO scales through the awesome &lt;a href=&quot;https://www.touchdro.com/&quot;&gt;TouchDRO&lt;/a&gt; project.  This required an Android device that I could mount near my mill, which means I needed a sturdy mount that could protect the tablet from an environment where oil and conductive metal chips would be flying around pretty regularly.  The tablet itself is a little too big to fit on my printer so the model has been split into two pieces.  This also allows the mount to fully enclose the tablet on all sides once assembled.  The result is easy to print, attractive, and functional.&lt;/p&gt;

&lt;p&gt;The Fire HD 10 Tablet VESA Mount can be used with any 100mm x 100mm pattern VESA mount.  &lt;a href=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm&quot;&gt;An accompanying project&lt;/a&gt; also includes a suitable VESA adapter for common DRO mounting arms.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount/blob/main/images/Fire_HD_10_Tablet_VESA_Mount_parts.jpg?raw=true&quot; alt=&quot;Fire_HD_10_Tablet_VESA_Mount_parts.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount/blob/main/images/Fire_HD_10_VESA_mount_X-Ray.png?raw=true&quot; alt=&quot;Fire_HD_10_VESA_mount_X-Ray.png&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3d-models&quot;&gt;3D Models&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount/blob/main/Fire%20HD%2010%20Tablet%20VESA%20Mount%20left%20side.stl&quot;&gt;Fire HD 10 Tablet VESA Mount left side&lt;/a&gt;&lt;/strong&gt; Left side enclosure for the Fire HD 10 Tablet&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount/blob/main/Fire%20HD%2010%20Tablet%20VESA%20Mount%20right%20side%20-%20external%20power.stl&quot;&gt;Fire HD 10 Tablet VESA Mount right side - external power&lt;/a&gt;&lt;/strong&gt; Right side enclosure with external opening for USB C power connector on the side&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount/blob/main/Fire%20HD%2010%20Tablet%20VESA%20Mount%20right%20side%20-%20enclosed%20power.stl&quot;&gt;Fire HD 10 Tablet VESA Mount right side - enclosed power&lt;/a&gt;&lt;/strong&gt; Right side enclosure with enclosed USB C power to extend out of the rear to protect against foreign material ingress into the tablet and enclosure.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bom&quot;&gt;BOM&lt;/h2&gt;

&lt;p&gt;To complete this assembly you will also need the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3xaqCTT&quot;&gt;Amazon Fire HD 10 Tablet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3nay0de&quot;&gt;2x M3 socket-head screws between 16-30mm in length&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3nay0de&quot;&gt;2x M3 nuts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3v8zLuc&quot;&gt;4x M4 nuts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3awdGOx&quot;&gt;1x Right-angle USB C cable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;assembly&quot;&gt;Assembly&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Print the left side and one of the two right side models. I’ve used &lt;a href=&quot;https://amzn.to/3v2XJHk&quot;&gt;Overture PETG&lt;/a&gt; with .20mm layers to good effect.  No supports should be required if your printer is dialed in.&lt;/li&gt;
  &lt;li&gt;Press-fit the 4x M4 nuts into the two halves of the enclosure.&lt;/li&gt;
  &lt;li&gt;Insert the 2x M3 nuts into the pockets on the back of the left side enclosure&lt;/li&gt;
  &lt;li&gt;If using the enclosed model, attach the right-angle USB-C cable to the Fire HD 10 Tablet&lt;/li&gt;
  &lt;li&gt;Slide the tablet into the left-side enclosure, then slide on the right side while guiding the USB cable into the cutouts provided.&lt;/li&gt;
  &lt;li&gt;Insert M3 nuts into the holes in the right side then tighten them to pull the two halves together.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Be careful when selecting M4 screws for attachment to your VESA mount.  Anything longer than 6mm will run into the back of the tablet.&lt;/li&gt;
  &lt;li&gt;A 3mm hole runs through the right side to the tablet’s power button.  You can use a 2mm hex key or similar to access the power button through this hole if needed.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="Digital Designs" /><category term="3D Print" /><summary type="html">3D printable VESA mount for the Fire HD 10 Tablet</summary></entry><entry><title type="html">VESA mount for DRO Arm</title><link href="https://derushadigital.com/digital%20designs/2021/04/22/VESA-Mount-for-DRO-Arm.html" rel="alternate" type="text/html" title="VESA mount for DRO Arm" /><published>2021-04-22T00:00:00+00:00</published><updated>2021-04-22T00:00:00+00:00</updated><id>https://derushadigital.com/digital%20designs/2021/04/22/VESA-Mount-for-DRO-Arm</id><content type="html" xml:base="https://derushadigital.com/digital%20designs/2021/04/22/VESA-Mount-for-DRO-Arm.html">&lt;p&gt;3D printable VESA mount for common DRO mounting arms&lt;/p&gt;

&lt;h1 id=&quot;vesa-mount-for-dro-arm&quot;&gt;&lt;a href=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm&quot;&gt;VESA-Mount-for-DRO-Arm&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;100mm x 100mm VESA mount for common DRO mounting arms that have a 10mm mounting hole through a 20mm thick bar.&lt;/p&gt;

&lt;p&gt;I have been working out some ideas to get a little better functionality out of my DRO scales through the awesome &lt;a href=&quot;https://www.touchdro.com/&quot;&gt;TouchDRO&lt;/a&gt; project.  This required an Android device that I could mount near my mill, which means I needed a sturdy mount that could protect the tablet from an environment where oil and conductive metal chips would be flying around pretty regularly.  As I already had a DRO mount, I &lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount&quot;&gt;created a VESA enclosure&lt;/a&gt; for the &lt;a href=&quot;https://amzn.to/3xaqCTT&quot;&gt;Amazon Fire HD 10 Tablet&lt;/a&gt; and then this VESA mount for the DRO arm.  Together, they provide a rigid and secure solution for touchscreen DRO at my machine.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/images/VESA-Mount-for-DRO-Arm_X-Ray.png?raw=true&quot; alt=&quot;VESA-Mount-for-DRO-Arm_X-Ray.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/images/VESA-Mount-for-DRO-Arm-assembled.jpg?raw=true&quot; alt=&quot;VESA-Mount-for-DRO-Arm-assembled.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/images/VESA-Mount-for-DRO-Arm-installed.jpg?raw=true&quot; alt=&quot;VESA-Mount-for-DRO-Arm-installed.jpg&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3d-models&quot;&gt;3D Models&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/VESA_mount_for_DRO_bar_-_bar_side.stl&quot;&gt;VESA mount for DRO bar - Bar side&lt;/a&gt;&lt;/strong&gt; This part attaches to the DRO mount.  You can modify this model to fit your own mount if needed, then use the rest of the project as-is.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/VESA_mount_for_DRO_bar_-_VESA_side_main.stl&quot;&gt;VESA mount for DRO bar - VESA side main body&lt;/a&gt;&lt;/strong&gt; 100mm x 100mm pattern VESA mount with one side of a pivot hinge&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/VESA-Mount-for-DRO-Arm/blob/main/VESA_mount_for_DRO_bar_-_VESA_side_pylon.stl&quot;&gt;VESA mount for DRO bar - VESA side pylon&lt;/a&gt;&lt;/strong&gt; The other pivot hinge which fits into the VESA mount and is secured with 2x M3 bolts&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bom&quot;&gt;BOM&lt;/h2&gt;

&lt;p&gt;To complete this assembly you will also need the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3v8zLuc&quot;&gt;4x 8mm M4 socket-head screws&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3tGI2Fm&quot;&gt;1x 30mm M4 socket-head screw&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3v8zLuc&quot;&gt;1x M4 nut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3nay0de&quot;&gt;2x M3 nuts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3nay0de&quot;&gt;2x M3 socket-head screws between 10-30mm in length&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;assembly&quot;&gt;Assembly&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Print all three included models. I’ve used &lt;a href=&quot;https://amzn.to/3v2XJHk&quot;&gt;Overture PETG&lt;/a&gt; with .20mm layers to good effect.  No supports should be required if your printer is dialed in.&lt;/li&gt;
  &lt;li&gt;Press-fit the M4 nut into the VESA side pylon.&lt;/li&gt;
  &lt;li&gt;Insert the 2x M3 nuts into the pockets on the side of the VESA side pylon.&lt;/li&gt;
  &lt;li&gt;Set the Bar Side mount in place on the main body, then bring the pylon into place by setting it in at an angle on the main body and rotating it to vertical.&lt;/li&gt;
  &lt;li&gt;Attach the pylon to the main body with M3 socket-head screws.&lt;/li&gt;
  &lt;li&gt;Run the 30mm M4 screw through the assembled parts to allow the mount to pivot.  Tighten this screw to adjust the friction of the tilt adjustment of this mount.&lt;/li&gt;
  &lt;li&gt;Use the 4x 8mm M4 screws to secure this mount to your VESA device.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;If you’re using this with the &lt;a href=&quot;https://github.com/aderusha/Fire-HD-10-Tablet-VESA-Mount&quot;&gt;Fire 10 HD Tablet VESA enclosure&lt;/a&gt;, be sure to use 8mm screws or you’ll run your screws into the tablet.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="Digital Designs" /><category term="3D Print" /><summary type="html">3D printable VESA mount for common DRO mounting arms</summary></entry><entry><title type="html">TouchDRO DIY Enclosure</title><link href="https://derushadigital.com/digital%20designs/2021/04/20/TouchDRO-DIY-Enclosure.html" rel="alternate" type="text/html" title="TouchDRO DIY Enclosure" /><published>2021-04-20T00:00:00+00:00</published><updated>2021-04-20T00:00:00+00:00</updated><id>https://derushadigital.com/digital%20designs/2021/04/20/TouchDRO-DIY-Enclosure</id><content type="html" xml:base="https://derushadigital.com/digital%20designs/2021/04/20/TouchDRO-DIY-Enclosure.html">&lt;p&gt;An enclosure for the &lt;a href=&quot;https://www.touchdro.com/store/diy-dro-kit-for-glass-scales.html&quot;&gt;TouchDRO DIY kit for glass scales&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&quot;enclosure-for-the-touchdro-diy-kit-for-glass-scales&quot;&gt;Enclosure for the &lt;a href=&quot;https://www.touchdro.com/store/diy-dro-kit-for-glass-scales.html&quot;&gt;TouchDRO DIY kit for glass scales&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;This model provides an enclosure for the &lt;a href=&quot;https://www.touchdro.com/store/diy-dro-kit-for-glass-scales.html&quot;&gt;TouchDRO DIY kit for glass scales&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The awesome &lt;a href=&quot;https://www.touchdro.com/&quot;&gt;TouchDRO&lt;/a&gt; project now offers an &lt;a href=&quot;https://www.touchdro.com/store/diy-dro-kit-for-glass-scales.html&quot;&gt;inexpensive DIY kit&lt;/a&gt; you can assemble yourself.  The kit doesn’t include an enclosure, so I created one that might work out for you.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/images/Installed.jpg?raw=true&quot; alt=&quot;Installed.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/images/Interior.jpg?raw=true&quot; alt=&quot;Interior.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/images/Model_view.png?raw=true&quot; alt=&quot;Model_view.png&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3d-models&quot;&gt;3D Models&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_top.stl&quot;&gt;TouchDRO_DIY_enclosure_top&lt;/a&gt;&lt;/strong&gt; Top half of the enclosure with inlaid text labels&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_top_inlay.stl&quot;&gt;TouchDRO_DIY_enclosure_top_inlay&lt;/a&gt;&lt;/strong&gt; Inlay text for two-color prints&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_bottom.stl&quot;&gt;TouchDRO_DIY_enclosure_bottom&lt;/a&gt;&lt;/strong&gt; Bottom half of the enclosure&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_top_inlay.stl&quot;&gt;TouchDRO_DIY_enclosure_bottom_-_DDD_Wall_Control&lt;/a&gt;&lt;/strong&gt; Bottom half of the enclosure for use with the &lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System&quot;&gt;DDD Printable Wall Control System&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;bom&quot;&gt;BOM&lt;/h2&gt;

&lt;p&gt;To complete this assembly you will also need the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3xf0tDp&quot;&gt;4x 35mm M4 socket-head screws&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3v8zLuc&quot;&gt;4x M4 nuts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/2QPi0RX&quot;&gt;8x 4-40 Jack Screws + nuts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://amzn.to/3eq09ZM&quot;&gt;LocTite thread locker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;assembly&quot;&gt;Assembly&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Print the top side and one of the two bottom half models. I’ve used &lt;a href=&quot;https://amzn.to/3v2XJHk&quot;&gt;Overture PETG&lt;/a&gt; with .20mm layers to good effect.  No supports should be required if your printer is dialed in.&lt;/li&gt;
  &lt;li&gt;Press-fit the &lt;a href=&quot;https://amzn.to/3v8zLuc&quot;&gt;4x M4 nuts&lt;/a&gt; into the two halves of the enclosure.&lt;/li&gt;
  &lt;li&gt;Mount the DB9 shells to the top enclosure with &lt;a href=&quot;https://amzn.to/2QPi0RX&quot;&gt;8x 4-40 Jack Screws + nuts&lt;/a&gt;.  Use some &lt;a href=&quot;https://amzn.to/3eq09ZM&quot;&gt;red LocTite&lt;/a&gt; to keep this secured.&lt;/li&gt;
  &lt;li&gt;Place the top onto the enclosure and secure with &lt;a href=&quot;https://amzn.to/3xf0tDp&quot;&gt;4x 35mm M4 socket-head screws&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;For nice and readable text labels, print the &lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_top_inlay.stl&quot;&gt;TouchDRO DIY enclosure top inlay&lt;/a&gt; model in one color, leave that on your print bed, then print the rest of the &lt;a href=&quot;https://github.com/aderusha/TouchDRO-DIY-Enclosure/blob/main/TouchDRO_DIY_enclosure_top.stl&quot;&gt;top enclosure model&lt;/a&gt; over it.&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="Digital Designs" /><category term="3D Print" /><summary type="html">An enclosure for the TouchDRO DIY kit for glass scales.</summary></entry><entry><title type="html">HASPone v1.01</title><link href="https://derushadigital.com/haswitchplate/2021/04/01/HASP-v1.01.html" rel="alternate" type="text/html" title="HASPone v1.01" /><published>2021-04-01T00:00:00+00:00</published><updated>2021-04-01T00:00:00+00:00</updated><id>https://derushadigital.com/haswitchplate/2021/04/01/HASP-v1.01</id><content type="html" xml:base="https://derushadigital.com/haswitchplate/2021/04/01/HASP-v1.01.html">&lt;p&gt;HASPone firmware bug fixes and new features&lt;/p&gt;

&lt;h1 id=&quot;haspone-v101-release&quot;&gt;HASPone v1.01 release&lt;/h1&gt;

&lt;p&gt;One huge advantage to utilizing blueprints is that the core software projects (ESP firmware, Nextion firmware, and the blueprints) are now mostly-decoupled, such that I can build smaller, more-frequent releases without impacting all the other stuff.  We’ve had a few bugfixes in the ESP codebase, so I figured it’s time to release these changes in case anyone else encounters the bugs that have been addressed.&lt;/p&gt;

&lt;p&gt;Expect this to be the pace of things in the future, more frequent, smaller updates that should be (in most cases) non-disruptive.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;haspone-v101&quot;&gt;HASPone v1.01&lt;/h1&gt;

&lt;h2 id=&quot;new-features&quot;&gt;New features&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Add reboot on touch while waiting for WiFi or MQTT connect&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug fixes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Remove MQTT and telnet loop process while handling Nextion ACKs&lt;/li&gt;
  &lt;li&gt;Prevent writes to EEPROM on WiFi init&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="HASwitchPlate" /><category term="HASwitchPlate" /><summary type="html">HASPone firmware bug fixes and new features</summary></entry><entry><title type="html">Announcing HASPone!</title><link href="https://derushadigital.com/haswitchplate/2021/03/03/HASP-v1.00.html" rel="alternate" type="text/html" title="Announcing HASPone!" /><published>2021-03-03T00:00:00+00:00</published><updated>2021-03-03T00:00:00+00:00</updated><id>https://derushadigital.com/haswitchplate/2021/03/03/HASP-v1.00</id><content type="html" xml:base="https://derushadigital.com/haswitchplate/2021/03/03/HASP-v1.00.html">&lt;p&gt;Huge update - new name, and new everything else too.&lt;/p&gt;

&lt;h1 id=&quot;announcing-haspone&quot;&gt;Announcing HASPone!&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/euthQeH.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This has been a long time in the making!  This release brings us to a place where I think we’ve finally reached something we can call a 1.0 release.   To celebrate, I’m changing the name of the project to &lt;strong&gt;HASPone&lt;/strong&gt;.  The new name comes with a new home in a &lt;a href=&quot;https://github.com/HASwitchPlate/HASPone&quot;&gt;new repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are so many things new or different about this release that it’s hard to list them all.  So first, let me start with the bad news: &lt;strong&gt;This update is going to break basically everything&lt;/strong&gt;.  Packages are gone, &lt;a href=&quot;https://github.com/HASwitchPlate/HASPone/tree/main/Home_Assistant/blueprints&quot;&gt;Blueprints are in&lt;/a&gt;, and with that comes the need to nuke your packages.  The good news? Re-creating most of what you have today should be a breeze, and you can do it without once opening a code editor.&lt;/p&gt;

&lt;p&gt;That’s right:&lt;/p&gt;

&lt;h1 id=&quot;no-more-yaml-&quot;&gt;🎉NO MORE YAML! 🎉&lt;/h1&gt;

&lt;p&gt;Some other highlights:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Massive performance and memory utilization improvements&lt;/li&gt;
  &lt;li&gt;Support for MQTT over TLS and accessing HTTPS servers for things like firmware updates&lt;/li&gt;
  &lt;li&gt;8x speedup in LCD serial communication&lt;/li&gt;
  &lt;li&gt;Improved error checking and reporting&lt;/li&gt;
  &lt;li&gt;Tight integration with the Home Assistant device registry&lt;/li&gt;
  &lt;li&gt;No more packages, no more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt;, no more code editors, and NO MORE YAML!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;if-youve-deployed-the-dev-release&quot;&gt;If you’ve deployed the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dev&lt;/code&gt; release:&lt;/h2&gt;

&lt;p&gt;…you’ll need to wipe all of that out.  Thanks for your help testing!  Delete any automations created and delete any blueprints you’ve imported.  There’s a whole new batch for you to work with in the HASPone release.  Update the ESP and LCD firmware in the web administration page - there have been substantial changes between the 1.0 release and what you have been testing!&lt;/p&gt;

&lt;h2 id=&quot;update-home-assistant-to-20213&quot;&gt;Update Home Assistant to 2021.3&lt;/h2&gt;

&lt;p&gt;HASPone is making use of several new features found in &lt;a href=&quot;https://www.home-assistant.io/blog/2021/03/03/release-20213/&quot;&gt;Home Assistant release 2021.3&lt;/a&gt;.  Make sure you update Home Assistant before proceeding!&lt;/p&gt;

&lt;h2 id=&quot;upgrading-to-haspone&quot;&gt;Upgrading to HASPone&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/HASwitchPlate/HASPone/wiki/Updating-legacy-HASP-to-HASPone&quot;&gt;Follow this guide&lt;/a&gt; to get your HASPs updated to HASPone.&lt;/p&gt;

&lt;h2 id=&quot;after-youve-upgraded-to-haspone&quot;&gt;After you’ve upgraded to HASPone&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/HASwitchPlate/HASPone/wiki/HASPone-Blueprints-for-Home-Assistant&quot;&gt;Check out this guide to deploying your first couple of blueprints&lt;/a&gt;.  Once you’ve done this a few times the rest is easy!&lt;/p&gt;

&lt;h2 id=&quot;click-here-for-the-haspone-discussion-forum&quot;&gt;&lt;a href=&quot;https://github.com/HASwitchPlate/HASPone/discussions&quot;&gt;Click here for the HASPone Discussion Forum&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I suspect this will make everyone’s interaction with HASP (and each other) much easier to handle.&lt;/p&gt;

&lt;p&gt;Finally - &lt;strong&gt;stay tuned&lt;/strong&gt;!  There is a lot more in store for the HASwitchPlate project and this release is only a part of what we have planned!&lt;/p&gt;</content><author><name>Allen Derusha</name></author><category term="HASwitchPlate" /><category term="HASwitchPlate" /><summary type="html">Huge update - new name, and new everything else too.</summary></entry><entry><title type="html">DDD Printable Wall Control System</title><link href="https://derushadigital.com/digital%20designs/2020/11/09/DDD-Printable-Wall-Control-System.html" rel="alternate" type="text/html" title="DDD Printable Wall Control System" /><published>2020-11-09T00:00:00+00:00</published><updated>2020-11-09T00:00:00+00:00</updated><id>https://derushadigital.com/digital%20designs/2020/11/09/DDD-Printable-Wall-Control-System</id><content type="html" xml:base="https://derushadigital.com/digital%20designs/2020/11/09/DDD-Printable-Wall-Control-System.html">&lt;p&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System&quot;&gt;3D printable modular mounting system&lt;/a&gt; for &lt;a href=&quot;https://amzn.to/35emTsm&quot;&gt;Wall Control pegboards&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;ddd-printable-wall-control-system&quot;&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System&quot;&gt;DDD Printable Wall Control System&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/blob/main/images/installed.jpg?raw=true&quot; alt=&quot;Installed DDD Printable Wall Control System&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The DDD Printable Wall Control project provides a wide range of modular pegboard hangers for use with the &lt;a href=&quot;https://amzn.to/35emTsm&quot;&gt;Wall Control powder-coated steel pegboard solutions available on Amazon&lt;/a&gt;.  After much research I landed on Wall Control as a durable, high-strength and low-price organization solution which works with existing 1/4” standard pegboard pegs.  The panels also add 1” slots which allows for greater strength and rigidity for compatible hangers.  I’ve found their panels to be inexpensive, well-made, and available in a range of colors and sizes.&lt;/p&gt;

&lt;p&gt;Wall Control sells &lt;a href=&quot;https://amzn.to/35fkhuu&quot;&gt;a line of high quality hanger accessories compatible with these slots&lt;/a&gt; and I’ve found them to be reasonably priced and of good quality.  However, printed solutions can offer a highly-customized solutions made at home for your own organization needs and can do so quickly and inexpensively.  One might consider leveraging both solutions as needs arise.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;ddd-printable-wall-control-designs&quot;&gt;DDD Printable Wall Control Designs&lt;/h2&gt;

&lt;p&gt;The DDD Printable Wall Control collection is designed for easy printability, with all parts provided in a printable orientation and no supports should required.  The &lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Quickhooks&quot;&gt;Quickhooks&lt;/a&gt; series are fast-printing models for lightweight use cases.  &lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Sidepieces&quot;&gt;Sidepieces&lt;/a&gt; and &lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Centerpieces&quot;&gt;Centerpieces&lt;/a&gt; snap together to create strong, modular hanger solutions.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Quickhooks&quot;&gt;Quickhooks&lt;/a&gt;&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Quickhooks&quot;&gt;&lt;img src=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/blob/main/images/Quickhooks_example.png?raw=true&quot; width=&quot;288&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Quickhooks&quot;&gt;Quickhooks&lt;/a&gt; are fast-printing, two part hook/hanger solutions designed for quick and easy printing for lightweight use cases. Available in a range of sizes.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Sidepieces&quot;&gt;Sidepieces&lt;/a&gt;&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Sidepieces&quot;&gt;&lt;img src=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/blob/main/images/Sidepieces_example.png?raw=true&quot; width=&quot;390&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Sidepieces&quot;&gt;Sidepieces&lt;/a&gt; are designed with a hook that catches into the Wall Control slots.  Sidepieces extend out from the wall and come in a variety of lengths and shapes, and are offered in left/right/center variations.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Centerpieces&quot;&gt;Centerpieces&lt;/a&gt;&lt;/th&gt;
      &lt;th&gt; &lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Centerpieces&quot;&gt;&lt;img src=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/blob/main/images/Centerpieces_example.png?raw=true&quot; width=&quot;650&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Centerpieces&quot;&gt;Centerpieces&lt;/a&gt; are designed to mount between a pair of sidepieces.  Centerpieces are designed to create custom hook, shelf, or hangar solutions which can snap into place between a variety of sidepieces. Some centerpiece models offer an additional locking feature which allows for completely rigid connections to a Wall Control panel.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;using-ddd-printable-wall-control&quot;&gt;Using DDD Printable Wall Control&lt;/h2&gt;

&lt;p&gt;The simplest use case to create a single hook might involve a sidepiece along with a retainer to help keep the part in place in the slot.  Most use cases will involve a left/right combination of sidepieces, with a centerpiece in the middle to create a modular hanging solution with interchangeable snap-fit parts.&lt;/p&gt;

&lt;p&gt;The parts are designed with a press-fit, one can use a vice or clamps to force the parts together.  The final fit will be determined by the calibration of your printer, if anything is loose you can add a drop of glue to keep parts held tightly.&lt;/p&gt;

&lt;h2 id=&quot;locking-wall-control-parts&quot;&gt;Locking Wall Control parts&lt;/h2&gt;

&lt;p&gt;Several &lt;a href=&quot;https://github.com/aderusha/DDD-Printable-Wall-Control-System/tree/main/Centerpieces&quot;&gt;Centerpiece&lt;/a&gt; models offer a locking feature based on a fantastic idea from &lt;a href=&quot;https://www.thingiverse.com/seth_a/designs&quot;&gt;Seth Altobelli&lt;/a&gt;.  A &lt;a href=&quot;Centerpieces/Locking_spacer/8mm%20Lock%20Pin.stl&quot;&gt;locking screw&lt;/a&gt; can be printed and screwed into these models to provide a solid, positive-lock fit with the Wall Control system.  A locked part is fully constrained and will not move while hanging or removing a tool which greatly improves the experience over traditional pegboard offerings.&lt;/p&gt;

&lt;p&gt;The locking screw uses a 1/4” square drive, same as one would use to drive a 1/4” drive socket.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;about-powder-coated-wall-control-panels&quot;&gt;About powder coated Wall Control Panels&lt;/h2&gt;

&lt;p&gt;Wall control panels are available in a range of colors or as a simple unpainted, steel sheet.  The slots cut in the plain steel panels are slightly wider than those in the powder coated panels due to the thickness of the paint itself.  The catches in these models are designed to attach firmly to the powder coated panels, while unpainted panels might have a little more play due to the difference in thickness.  If your assembled part doesn’t fit tight, try including one of the locking parts to ensure a secure fit.&lt;/p&gt;</content><author><name>Allen Derusha</name></author><category term="Digital Designs" /><category term="3D Print" /><summary type="html">3D printable modular mounting system for Wall Control pegboards</summary></entry><entry><title type="html">HASP v0.40</title><link href="https://derushadigital.com/haswitchplate/2020/03/29/HASP-v0.40.html" rel="alternate" type="text/html" title="HASP v0.40" /><published>2020-03-29T00:00:00+00:00</published><updated>2020-03-29T00:00:00+00:00</updated><id>https://derushadigital.com/haswitchplate/2020/03/29/HASP-v0.40</id><content type="html" xml:base="https://derushadigital.com/haswitchplate/2020/03/29/HASP-v0.40.html">&lt;p&gt;New fonts, new pages, new automations, new models, and some core code improvements&lt;/p&gt;

&lt;h1 id=&quot;hasp-v040-release&quot;&gt;HASP v0.40 release&lt;/h1&gt;

&lt;p&gt;New fonts, new pages, new automations, new models, and some core code improvements&lt;/p&gt;

&lt;h2 id=&quot;nextion-hmi&quot;&gt;Nextion HMI&lt;/h2&gt;

&lt;p&gt;This release marks the first major update the Nextion HMI used by the HASP project.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Proportional fonts - Noto Sans has been added in 6 different sizes and styles&lt;/li&gt;
  &lt;li&gt;Anti-aliased fonts - The existing Consolas and Wingdings fonts, as well as the new Noto Sans font are now all anti-aliased.&lt;/li&gt;
  &lt;li&gt;FontAwesome icons - All &lt;a href=&quot;https://fontawesome.com/cheatsheet&quot;&gt;free FontAwesome icon codepoints&lt;/a&gt; have been added to the Noto Sans fonts in the project, allowing mixed used of text and icons anywhere text is allowed.&lt;/li&gt;
  &lt;li&gt;Removed page 9 with graph component - A poll of users suggested this wasn’t being used and we gained a lot of RAM by removing it.&lt;/li&gt;
  &lt;li&gt;Added new page 9 with HVAC control demonstration&lt;/li&gt;
  &lt;li&gt;Added new page 10 with Ceiling Fan control demonstration&lt;/li&gt;
  &lt;li&gt;Added new page 11 with one large, blank button for future use&lt;/li&gt;
  &lt;li&gt;Removed QR code from page 0 - again, a memory saving feature.  WiFi setup QR is now a static picture object.&lt;/li&gt;
  &lt;li&gt;Upgraded to Nextion firmware 1.60 - latest release as of this writing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;home-assistant-automations&quot;&gt;Home Assistant Automations&lt;/h2&gt;

&lt;p&gt;Nearly too many to list but here are the major points:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Full compatibility with Lovelace UI&lt;/li&gt;
  &lt;li&gt;Color “theme” support with pull-down list of included themes&lt;/li&gt;
  &lt;li&gt;Interactive color select UI&lt;/li&gt;
  &lt;li&gt;Font select UI for page select buttons&lt;/li&gt;
  &lt;li&gt;Icons added to several pages&lt;/li&gt;
  &lt;li&gt;New automations for HVAC control&lt;/li&gt;
  &lt;li&gt;New automations for Ceiling Fan control&lt;/li&gt;
  &lt;li&gt;General compatibility and code cleanup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;esp8266-code-v040&quot;&gt;ESP8266 code v0.40&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Improvement in WiFi performance and stability by disabling power save modes&lt;/li&gt;
  &lt;li&gt;Updates to better utilize new QR image and icon fonts&lt;/li&gt;
  &lt;li&gt;Add support for haptic or audio feedback device, thanks &lt;a href=&quot;https://github.com/benmprojects&quot;&gt;@benmprojects&lt;/a&gt;!&lt;/li&gt;
  &lt;li&gt;Add backlight reset button in web UI&lt;/li&gt;
  &lt;li&gt;Updated ESP8266 Arduino core to 2.6.3&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;home-assistant-update-procedure&quot;&gt;Home Assistant Update Procedure&lt;/h2&gt;

&lt;p&gt;Run the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; script to pull down the updated automations using one of the guides below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#standard-home-assistant-installation&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for standard installations (hassio etc)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#home-assistant-core-installation&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for Home Assistant Core installations (venv etc)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#manual-home-assistant-installation&quot;&gt;Manual installation process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;links-for-more-hasp-info&quot;&gt;Links for more HASP info&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/tree/master/Documentation&quot;&gt;Main documentation page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy HASwitchPlate PCBs&lt;/a&gt; - strongly recommended for safe assembly.  &lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy them from me&lt;/a&gt; or &lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/raw/master/PCB/HASwitchPlate.gerbers.zip&quot;&gt;download the gerbers&lt;/a&gt; and send them to your favorite &lt;a href=&quot;https://www.allpcb.com/?Mb_InviteId=34099&quot;&gt;short-run PCB fab&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-single-wide-assembled/&quot;&gt;Buy an assembled device ready to install&lt;/a&gt; if the build process seems intimidating&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.gg/tnBsMw4&quot;&gt;HASwitchPlate Discord chat&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/HASwitchPlate&quot;&gt;HASwitchPlate Reddit community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="HASwitchPlate" /><category term="HASwitchPlate" /><summary type="html">New fonts, new pages, new automations, new models, and some core code improvements</summary></entry><entry><title type="html">HASP v0.39</title><link href="https://derushadigital.com/haswitchplate/2020/02/11/HASP-v0.39.html" rel="alternate" type="text/html" title="HASP v0.39" /><published>2020-02-11T00:00:00+00:00</published><updated>2020-02-11T00:00:00+00:00</updated><id>https://derushadigital.com/haswitchplate/2020/02/11/HASP-v0.39</id><content type="html" xml:base="https://derushadigital.com/haswitchplate/2020/02/11/HASP-v0.39.html">&lt;p&gt;Home Assistant Lovelace compatibility release&lt;/p&gt;

&lt;h1 id=&quot;hasp-v039-release&quot;&gt;HASP v0.39 release&lt;/h1&gt;

&lt;p&gt;Home Assistant Lovelace compatibility release&lt;/p&gt;

&lt;h2 id=&quot;home-assistant-automations&quot;&gt;Home Assistant Automations&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Remove “views” as they will be deprecated in 107&lt;/li&gt;
  &lt;li&gt;Fixed automations utilizing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;time_pattern&lt;/code&gt; to match documentation&lt;/li&gt;
  &lt;li&gt;Changed weather provider to NWS as Met.no is no longer allowed to be configured manually&lt;/li&gt;
  &lt;li&gt;Another MDI icon rename fix&lt;/li&gt;
  &lt;li&gt;Update deployhasp.sh with some fixes for newer Home Assistant installations&lt;/li&gt;
  &lt;li&gt;Added “migrate-hasp-107.sh” to automatically remove the “view” statements for compatibility w/ version 107&lt;/li&gt;
  &lt;li&gt;Added example Lovelace YAML to replace some of the functionality lost from “view”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;fix-for-home-assistant-v107&quot;&gt;Fix for Home Assistant v107&lt;/h2&gt;

&lt;p&gt;Home Assistant is finally removing the “States” UI which has some unique functionality not present in Lovelace.  In order to keep your configuration compatible with the new release, you can execute &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;migrate-hasp-107.sh&lt;/code&gt; from your Home Installation directory to clear out the offending statements in your existing installation.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;su &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /bin/bash homeassistant
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/.homeassistant
bash &amp;lt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;wget &lt;span class=&quot;nt&quot;&gt;-qO-&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; /dev/null https://raw.githubusercontent.com/aderusha/HASwitchPlate/master/Home_Assistant/migrate-hasp-107.sh&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;home-assistant-update-procedure&quot;&gt;Home Assistant Update Procedure&lt;/h2&gt;

&lt;p&gt;Run the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; script to pull down the updated automations using one of the guides below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#automatic-home-assistant-installation&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for standard installations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#hassio&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for Hass.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#manual-home-assistant-installation&quot;&gt;Manual installation process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;links-for-more-hasp-info&quot;&gt;Links for more HASP info&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/tree/master/Documentation&quot;&gt;Main documentation page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy HASwitchPlate PCBs&lt;/a&gt; - strongly recommended for safe assembly.  &lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy them from me&lt;/a&gt; or &lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/raw/master/PCB/HASwitchPlate.gerbers.zip&quot;&gt;download the gerbers&lt;/a&gt; and send them to your favorite &lt;a href=&quot;https://www.allpcb.com/?Mb_InviteId=34099&quot;&gt;short-run PCB fab&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-single-wide-assembled/&quot;&gt;Buy an assembled device ready to install&lt;/a&gt; if the build process seems intimidating&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.gg/tnBsMw4&quot;&gt;HASwitchPlate Discord chat&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/HASwitchPlate&quot;&gt;HASwitchPlate Reddit community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="HASwitchPlate" /><category term="HASwitchPlate" /><summary type="html">Home Assistant Lovelace compatibility release</summary></entry><entry><title type="html">HASP v0.38</title><link href="https://derushadigital.com/haswitchplate/2019/06/02/HASP-v0.38.html" rel="alternate" type="text/html" title="HASP v0.38" /><published>2019-06-02T00:00:00+00:00</published><updated>2019-06-02T00:00:00+00:00</updated><id>https://derushadigital.com/haswitchplate/2019/06/02/HASP-v0.38</id><content type="html" xml:base="https://derushadigital.com/haswitchplate/2019/06/02/HASP-v0.38.html">&lt;p&gt;Stability and performance improvements&lt;/p&gt;

&lt;h1 id=&quot;hasp-v038-release&quot;&gt;HASP v0.38 release&lt;/h1&gt;

&lt;p&gt;Stability and performance improvements&lt;/p&gt;

&lt;h2 id=&quot;esp8266-code-v038&quot;&gt;ESP8266 code v0.38&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Updated ESP8266 Arduino core to 2.5.2, which comes more stability and performance improvements&lt;/li&gt;
  &lt;li&gt;Fix mDNS.  Again.&lt;/li&gt;
  &lt;li&gt;Update ArduinoJSON to 6.x for easier builds, better performance, and lower memory utilization&lt;/li&gt;
  &lt;li&gt;Fixed issue with SoftwareSerial for debug messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;home-assistant-automations&quot;&gt;Home Assistant Automations&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Fixed automations utilizing JSON messages to remove trailing null array element&lt;/li&gt;
  &lt;li&gt;Changed Page 9 (graph) color automations to only trigger when page is selected&lt;/li&gt;
  &lt;li&gt;Yay MDI icons changing names for no apparent reason. Fixed.&lt;/li&gt;
  &lt;li&gt;Added “default page” example automation, set a default page for HASP and it will switch back to that page after a set time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;esp8266-update-procedure&quot;&gt;ESP8266 Update Procedure&lt;/h2&gt;

&lt;p&gt;If you’re using the &lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Home_Assistant/hasp-examples/plate01/hasp_plate01_00_autofirmwareupdate.yaml&quot;&gt;AutoFirmwareUpdate&lt;/a&gt; automation your devices should pull this update at 3:00am.  Otherwise, log into the admin web page and you can pull the update from the firmware page.&lt;/p&gt;

&lt;h2 id=&quot;home-assistant-update-procedure&quot;&gt;Home Assistant Update Procedure&lt;/h2&gt;

&lt;p&gt;Run the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; script to pull down the updated automations using one of the guides below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#automatic-home-assistant-installation&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for standard installations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#hassio&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deployhasp.sh&lt;/code&gt; for Hass.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/blob/master/Documentation/05_Home_Assistant.md#manual-home-assistant-installation&quot;&gt;Manual installation process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;links-for-more-hasp-info&quot;&gt;Links for more HASP info&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/tree/master/Documentation&quot;&gt;Main documentation page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy HASwitchPlate PCBs&lt;/a&gt; - strongly recommended for safe assembly.  &lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-pcb/&quot;&gt;Buy them from me&lt;/a&gt; or &lt;a href=&quot;https://github.com/aderusha/HASwitchPlate/raw/master/PCB/HASwitchPlate.gerbers.zip&quot;&gt;download the gerbers&lt;/a&gt; and send them to your favorite &lt;a href=&quot;https://www.allpcb.com/?Mb_InviteId=34099&quot;&gt;short-run PCB fab&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tindie.com/products/luma/ha-switchplate-hasp-single-wide-assembled/&quot;&gt;Buy an assembled device ready to install&lt;/a&gt; if the build process seems intimidating&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://discord.gg/tnBsMw4&quot;&gt;HASwitchPlate Discord chat&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/HASwitchPlate&quot;&gt;HASwitchPlate Reddit community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Allen Derusha</name></author><category term="HASwitchPlate" /><category term="HASwitchPlate" /><summary type="html">Stability and performance improvements</summary></entry></feed>