Additional Restructuring
This commit is contained in:
@ -1,28 +0,0 @@
|
||||
# WinRM (Kerberos)
|
||||
**Name**: "Kerberos WinRM"
|
||||
|
||||
```jsx title="Input Configuration"
|
||||
fields:
|
||||
- id: username
|
||||
type: string
|
||||
label: Username
|
||||
- id: password
|
||||
type: string
|
||||
label: Password
|
||||
secret: true
|
||||
- id: krb_realm
|
||||
type: string
|
||||
label: Kerberos Realm (Domain)
|
||||
required:
|
||||
- username
|
||||
- password
|
||||
- krb_realm
|
||||
```
|
||||
|
||||
```jsx title="Injector Configuration"
|
||||
extra_vars:
|
||||
ansible_user: '{{ username }}'
|
||||
ansible_password: '{{ password }}'
|
||||
ansible_winrm_transport: kerberos
|
||||
ansible_winrm_kerberos_realm: '{{ krb_realm }}'
|
||||
```
|
@ -1,36 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
# AWX Credential Types
|
||||
When interacting with devices via Ansible Playbooks, you need to provide the playbook with credentials to connect to the device with. Examples are domain credentials for Windows devices, and local sudo user credentials for Linux.
|
||||
|
||||
## Windows-based Credentials
|
||||
### NTLM
|
||||
NTLM-based authentication is not exactly the most secure method of remotely running playbooks on Windows devices, but it is still encrypted using SSL certificates created by the device itself when provisioned correctly to enable WinRM functionality.
|
||||
```jsx title="(NTLM) nicole.rappe@MOONGATE.LOCAL"
|
||||
Credential Type: Machine
|
||||
Username: nicole.rappe@MOONGATE.LOCAL
|
||||
Password: <Encrypted>
|
||||
Privilege Escalation Method: runas
|
||||
Privilege Escalation Username: nicole.rappe@MOONGATE.LOCAL
|
||||
```
|
||||
### Kerberos
|
||||
Kerberos-based authentication is generally considered the most secure method of authentication with Windows devices, but can be trickier to set up since it requires additional setup inside of AWX in the cluster for it to function properly. At this time, there is no working Kerberos documentation.
|
||||
```jsx title="(Kerberos WinRM) nicole.rappe"
|
||||
Credential Type: Kerberos WinRM
|
||||
Username: nicole.rappe
|
||||
Password: <Encrypted>
|
||||
Kerberos Realm (Domain): MOONGATE.LOCAL
|
||||
```
|
||||
## Linux-based Credentials
|
||||
```jsx title="(LINUX) nicole"
|
||||
Credential Type: Machine
|
||||
Username: nicole
|
||||
Password: <Encrypted>
|
||||
Privilege Escalation Method: sudo
|
||||
Privilege Escalation Username: root
|
||||
```
|
||||
|
||||
:::note
|
||||
`WinRM / Kerberos` based credentials do not currently work as-expected. At this time, use either `Linux` or `NTLM` based credentials.
|
||||
:::
|
@ -1,71 +0,0 @@
|
||||
**Purpose**:
|
||||
You will need to enable secure WinRM management of the Windows devices you are running playbooks against, as compared to the Linux devices. The following powershell script needs to be ran on every Windows device you intend to run Ansible playbooks on:
|
||||
|
||||
``` powershell
|
||||
# Script to configure WinRM over HTTPS on the Hyper-V host
|
||||
|
||||
# Ensure WinRM is enabled
|
||||
Write-Host "Enabling WinRM..."
|
||||
winrm quickconfig -force
|
||||
|
||||
# Generate a self-signed certificate (Optional: Use your certificate if you have one)
|
||||
$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "hyperv-host.local"
|
||||
$certThumbprint = $cert.Thumbprint
|
||||
|
||||
# Function to delete existing HTTPS listener
|
||||
function Remove-HTTPSListener {
|
||||
Write-Host "Removing existing HTTPS listener if it exists..."
|
||||
$listeners = Get-WSManInstance -ResourceURI winrm/config/listener -Enumerate
|
||||
foreach ($listener in $listeners) {
|
||||
if ($listener.Transport -eq "HTTPS") {
|
||||
Write-Host "Deleting listener with Address: $($listener.Address) and Transport: $($listener.Transport)"
|
||||
Remove-WSManInstance -ResourceURI winrm/config/listener -SelectorSet @{Address=$listener.Address; Transport=$listener.Transport}
|
||||
}
|
||||
}
|
||||
Start-Sleep -Seconds 5 # Wait for a few seconds to ensure deletion
|
||||
}
|
||||
|
||||
# Remove existing HTTPS listener
|
||||
Remove-HTTPSListener
|
||||
|
||||
# Confirm deletion
|
||||
$existingListeners = Get-WSManInstance -ResourceURI winrm/config/listener -Enumerate
|
||||
if ($existingListeners | Where-Object { $_.Transport -eq "HTTPS" }) {
|
||||
Write-Host "Failed to delete the existing HTTPS listener. Exiting script."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Create a new HTTPS listener
|
||||
Write-Host "Creating a new HTTPS listener..."
|
||||
$listenerCmd = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname=`"hyperv-host.local`"; CertificateThumbprint=`"$certThumbprint`"}'"
|
||||
Invoke-Expression $listenerCmd
|
||||
|
||||
# Set TrustedHosts to allow connections from any IP address (adjust as needed for security)
|
||||
Write-Host "Setting TrustedHosts to allow any IP address..."
|
||||
winrm set winrm/config/client '@{TrustedHosts="*"}'
|
||||
|
||||
# Enable the firewall rule for WinRM over HTTPS
|
||||
Write-Host "Enabling firewall rule for WinRM over HTTPS..."
|
||||
$existingFirewallRule = Get-NetFirewallRule -DisplayName "WinRM HTTPS" -ErrorAction SilentlyContinue
|
||||
if (-not $existingFirewallRule) {
|
||||
New-NetFirewallRule -Name "WINRM-HTTPS-In-TCP-PUBLIC" -DisplayName "WinRM HTTPS" -Enabled True -Direction Inbound -Protocol TCP -LocalPort 5986 -RemoteAddress Any -Action Allow
|
||||
}
|
||||
|
||||
# Ensure Kerberos authentication is enabled
|
||||
Write-Host "Enabling Kerberos authentication for WinRM..."
|
||||
winrm set winrm/config/service/auth '@{Kerberos="true"}'
|
||||
|
||||
# Configure the WinRM service to use HTTPS and Kerberos
|
||||
Write-Host "Configuring WinRM service to use HTTPS and Kerberos..."
|
||||
winrm set winrm/config/service '@{AllowUnencrypted="false"}'
|
||||
|
||||
# Configure the WinRM client to use Kerberos
|
||||
Write-Host "Configuring WinRM client to use Kerberos..."
|
||||
winrm set winrm/config/client/auth '@{Kerberos="true"}'
|
||||
|
||||
# Ensure the PowerShell execution policy is set to allow running scripts
|
||||
Write-Host "Setting PowerShell execution policy to RemoteSigned..."
|
||||
Set-ExecutionPolicy RemoteSigned -Force
|
||||
|
||||
Write-Host "Configuration complete. The Hyper-V host is ready for remote management over HTTPS with Kerberos authentication."
|
||||
```
|
@ -1,97 +0,0 @@
|
||||
# Host Inventories
|
||||
When you are deploying playbooks, you target hosts that exist in "Inventories". These inventories consist of a list of hosts and their corresponding IP addresses, as well as any host-specific variables that may be necessary to declare to run the playbook. You can see an example of my Bunny Lab inventory file at the time of writing this document, below:
|
||||
|
||||
!!! note "Inventory Data Relationships"
|
||||
An inventory file consists of hosts, groups, and variables. A host belongs to a group, and a group can have variables configured for it. If you run a playbook / job template against a host, it will assign the variables associated to the group that host belongs to (if any) during runtime.
|
||||
|
||||
```ini title="https://git.bunny-lab.io/GitOps/awx.bunny-lab.io/src/branch/main/inventories/homelab.ini"
|
||||
# Networking
|
||||
bunny-pfsense-01 ansible_host=192.168.3.1
|
||||
|
||||
# Servers
|
||||
pfsense ansible_host=192.168.3.1
|
||||
lab-jelly-01 ansible_host=192.168.3.2
|
||||
moon-storage-01 ansible_host=192.168.3.3
|
||||
virt-node-01 ansible_host=virt-node-01.bunny-lab.io
|
||||
virt-node-02 ansible_host=virt-node-02.bunny-lab.io
|
||||
lab-photos-01 ansible_host=lab-photos-01.bunny-lab.io
|
||||
lab-veeam-01 ansible_host=192.168.3.8
|
||||
lab-veeam-02 ansible_host=192.168.3.9
|
||||
awx ansible_host=192.168.3.10
|
||||
lab-games-02 ansible_host=lab-games-01.bunny-lab.io
|
||||
bunny-docker-01 ansible_host=192.168.3.12
|
||||
mail ansible_host=mail.bunny-lab.io
|
||||
lab-games-03 ansible_host=lab-games-03.bunny-lab.io
|
||||
lab-veeam-03 ansible_host=192.168.3.15
|
||||
alpine-work-01 ansible_host=192.168.3.17
|
||||
lab-auth-01 ansible_host=192.168.3.18
|
||||
lab-auth-02 ansible_host=192.168.3.20
|
||||
container-node-01 ansible_host=192.168.3.19
|
||||
lab-dc-01 ansible_host=192.168.3.25
|
||||
lab-dc-02 ansible_host=192.168.3.26
|
||||
lab-iris-01 ansible_host=192.168.3.27
|
||||
lab-games-01 ansible_host=192.168.3.28
|
||||
cloud ansible_host=192.168.3.29
|
||||
lab-dt-01 ansible_host=192.168.3.30
|
||||
lab-sophos-01 ansible_host=192.168.3.254
|
||||
|
||||
# Workstations
|
||||
bunny-dsktp-01 ansible_host=10.0.0.20
|
||||
bunny-lptp-01 ansible_host=10.0.0.17
|
||||
bunny-lptp-02 ansible_host=10.0.0.4
|
||||
lab-dt-01 ansible_host=192.168.3.30
|
||||
|
||||
# Group Definitions
|
||||
[domainControllers]
|
||||
lab-dc-01
|
||||
lab-dc-02
|
||||
|
||||
[domainControllers:vars]
|
||||
ansible_connection=winrm
|
||||
ansible_winrm_kerberos_delegation=false
|
||||
ansible_port=5986
|
||||
ansible_winrm_transport=ntlm
|
||||
ansible_winrm_server_cert_validation=ignore
|
||||
|
||||
[containerOrchestration]
|
||||
container-node-01
|
||||
|
||||
[windowsServers]
|
||||
lab-dc-01
|
||||
lab-dc-02
|
||||
virt-node-01
|
||||
virt-node-02
|
||||
lab-veeam-01
|
||||
lab-games-01
|
||||
|
||||
[windowsServers:vars]
|
||||
ansible_connection=winrm
|
||||
ansible_winrm_kerberos_delegation=false
|
||||
ansible_port=5986
|
||||
ansible_winrm_transport=ntlm
|
||||
ansible_winrm_server_cert_validation=ignore
|
||||
|
||||
[linuxServers]
|
||||
lab-jelly-01
|
||||
lab-photos-01
|
||||
mail
|
||||
alpine-work-01
|
||||
lab-auth-01
|
||||
lab-auth-02
|
||||
container-node-01
|
||||
lab-dt-01
|
||||
cloud
|
||||
|
||||
[workstations]
|
||||
bunny-dsktp-01
|
||||
bunny-lptp-01
|
||||
bunny-lptp-02
|
||||
bunny-dsktp-01
|
||||
|
||||
[workstations:vars]
|
||||
ansible_connection=winrm
|
||||
ansible_winrm_kerberos_delegation=false
|
||||
ansible_port=5986
|
||||
ansible_winrm_transport=ntlm
|
||||
ansible_winrm_server_cert_validation=ignore
|
||||
```
|
@ -1,16 +0,0 @@
|
||||
# AWX Projects
|
||||
When you want to run playbooks on host devices in your inventory files, you need to host the playbooks in a "Project". Projects can be as simple as a connection to Gitea/Github to store playbooks in a repository.
|
||||
|
||||
```jsx title="Ansible Playbooks (Gitea)"
|
||||
Name: Bunny Lab
|
||||
Source Control Type: Git
|
||||
Source Control URL: https://git.bunny-lab.io/GitOps/awx.bunny-lab.io.git
|
||||
Source Control Credential: Bunny Lab (Gitea)
|
||||
```
|
||||
|
||||
```jsx title="Resources > Credentials > Bunny Lab (Gitea)"
|
||||
Name: Bunny Lab (Gitea)
|
||||
Credential Type: Source Control
|
||||
Username: nicole.rappe
|
||||
Password: <Encrypted> #If you use MFA on Gitea/Github, use an App Password instead for the project.
|
||||
```
|
@ -1,21 +0,0 @@
|
||||
# Templates
|
||||
Templates are basically pre-constructed groups of devices, playbooks, and credentials that perform a specific kind of task against a predefined group of hosts or device inventory.
|
||||
|
||||
```jsx title="Deploy Hyper-V VM"
|
||||
Name: Deploy Hyper-V VM
|
||||
Inventory: (NTLM) MOON-HOST-01
|
||||
Playbook: playbooks/Windows/Hyper-V/Deploy-VM.yml
|
||||
Credentials: (NTLM) nicole.rappe@MOONGATE.local
|
||||
Execution Environment: AWX EE (latest)
|
||||
Project: Ansible Playbooks (Gitea)
|
||||
|
||||
Variables:
|
||||
---
|
||||
random_number: "{{ lookup('password', '/dev/null chars=digits length=4') }}"
|
||||
random_letters: "{{ lookup('password', '/dev/null chars=ascii_uppercase length=4') }}"
|
||||
vm_name: "NEXUS-TEST-{{ random_number }}{{ random_letters }}"
|
||||
vm_memory: "8589934592" #Measured in Bytes (e.g. 8GB)
|
||||
vm_storage: "68719476736" #Measured in Bytes (e.g. 64GB)
|
||||
iso_path: "C:\\ubuntu-22.04-live-server-amd64.iso"
|
||||
vm_folder: "C:\\Virtual Machines\\{{ vm_name_fact }}"
|
||||
```
|
Reference in New Issue
Block a user