docs: update claude setup
refactor: Move some things to roles refactor: fix some linting
This commit is contained in:
@@ -1,233 +0,0 @@
|
||||
# Playbook to build new VMs in RHV Cluste
|
||||
# Currently only builds RHEL VMs
|
||||
|
||||
# Create Host
|
||||
|
||||
- name: Preflight checks
|
||||
hosts: tag_build
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- assert:
|
||||
that:
|
||||
- site == "sagely_dc"
|
||||
- is_virtual
|
||||
|
||||
- name: Ensure Primary IP exists and is in DNS
|
||||
hosts: tag_build
|
||||
gather_facts: false
|
||||
collections:
|
||||
- netbox.netbox
|
||||
- freeipa.ansible_freeipa
|
||||
- redhat.rhv
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Obtain SSO token for RHV
|
||||
ovirt_auth:
|
||||
url: "{{ ovirt_url }}"
|
||||
username: "{{ ovirt_username }}"
|
||||
insecure: true
|
||||
password: "{{ ovirt_password }}"
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Get unused IP Address from pool
|
||||
netbox_ip_address:
|
||||
netbox_url: "{{ netbox_api }}"
|
||||
netbox_token: "{{ netbox_token }}"
|
||||
data:
|
||||
prefix: 192.168.16.0/20
|
||||
assigned_object:
|
||||
name: eth0
|
||||
virtual_machine: "{{ inventory_hostname }}"
|
||||
state: new
|
||||
register: new_ip
|
||||
when: primary_ip4 is undefined
|
||||
delegate_to: localhost
|
||||
|
||||
- set_fact:
|
||||
primary_ip4: "{{ new_ip.ip_address.address|ipaddr('address') }}"
|
||||
vm_hostname: "{{ inventory_hostname.split('.')[0] }}"
|
||||
vm_domain: "{{ inventory_hostname.split('.',1)[1] }}"
|
||||
delegate_to: localhost
|
||||
when: primary_ip4 is undefined
|
||||
|
||||
- name: Primary IPv4 Assigned in Netbox
|
||||
netbox_virtual_machine:
|
||||
netbox_url: "{{ netbox_api }}"
|
||||
netbox_token: "{{ netbox_token }}"
|
||||
data:
|
||||
primary_ip4: "{{ primary_ip4 }}"
|
||||
name: "{{ inventory_hostname }}"
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Primary IPv4 Address
|
||||
debug:
|
||||
var: primary_ip4
|
||||
|
||||
- name: Ensure IP Address in IdM
|
||||
ipadnsrecord:
|
||||
records:
|
||||
- name: "{{ vm_hostname }}"
|
||||
zone_name: "{{ vm_domain }}"
|
||||
record_type: A
|
||||
record_value:
|
||||
- "{{ new_ip.ip_address.address|ipaddr('address') }}"
|
||||
create_reverse: true
|
||||
ipaadmin_password: "{{ ipaadmin_password }}"
|
||||
delegate_to: idm1.mgmt.toal.ca
|
||||
|
||||
- name: Create VMs
|
||||
hosts: tag_build
|
||||
connection: local
|
||||
gather_facts: no
|
||||
collections:
|
||||
- netbox.netbox
|
||||
- redhat.rhv
|
||||
vars:
|
||||
# Workaround to get correct venv python interpreter
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
|
||||
|
||||
tasks:
|
||||
- name: Basic Disk Profile
|
||||
set_fact:
|
||||
vm_disks:
|
||||
- name: '{{ inventory_hostname }}_boot'
|
||||
bootable: true
|
||||
sparse: true
|
||||
descr: '{{ inventory_hostname }} Boot / Root disk'
|
||||
interface: virtio
|
||||
size: '{{ disk|default(40) }}'
|
||||
state: present
|
||||
storage_domain: "{{ rhv_storage_domain }}"
|
||||
activate: true
|
||||
when: vm_disks is not defined
|
||||
|
||||
- name: Create VM Disks
|
||||
ovirt_disk:
|
||||
auth: '{{ ovirt_auth }}'
|
||||
name: '{{ item.name }}'
|
||||
description: '{{ item.descr }}'
|
||||
interface: '{{ item.interface }}'
|
||||
size: '{{ item.size|int * 1024000 }}'
|
||||
state: '{{ item.state }}'
|
||||
sparse: '{{ item.sparse }}'
|
||||
wait: true
|
||||
storage_domain: '{{ item.storage_domain }}'
|
||||
async: 300
|
||||
poll: 15
|
||||
loop: '{{ vm_disks }}'
|
||||
|
||||
- set_fact:
|
||||
nb_query_filter: "slug={{ platform }}"
|
||||
- debug: msg='{{ query("netbox.netbox.nb_lookup", "platforms", api_filter=nb_query_filter, api_endpoint=netbox_api, token=netbox_token)[0].value.name }}'
|
||||
|
||||
- name: Create VM in RHV
|
||||
ovirt_vm:
|
||||
auth: '{{ ovirt_auth }}'
|
||||
name: '{{ inventory_hostname }}'
|
||||
state: present
|
||||
memory: '{{ memory }}MiB'
|
||||
memory_guaranteed: '{{ (memory / 2)|int }}MiB'
|
||||
disks: '{{ vm_disks }}'
|
||||
cpu_cores: '{{ vcpus }}'
|
||||
cluster: '{{ cluster }}'
|
||||
# This is ugly Can we do better?
|
||||
operating_system: '{{ query("netbox.netbox.nb_lookup", "platforms", api_filter=nb_query_filter, api_endpoint=netbox_api, token=netbox_token)[0].value.name }}'
|
||||
type: server
|
||||
graphical_console:
|
||||
protocol:
|
||||
- vnc
|
||||
- spice
|
||||
boot_devices:
|
||||
- hd
|
||||
async: 300
|
||||
poll: 15
|
||||
notify: PXE Boot
|
||||
register: vm_result
|
||||
|
||||
- name: Assign NIC
|
||||
ovirt_nic:
|
||||
auth: '{{ ovirt_auth }}'
|
||||
interface: virtio
|
||||
mac_address: '{{ item.mac_address|default(omit) }}'
|
||||
name: '{{ item.name }}'
|
||||
profile: '{{ item.untagged_vlan.name }}'
|
||||
network: '{{ item.untagged_vlan.name }}' # This is fragile
|
||||
state: '{{ (item.enabled == True) |ternary("plugged","unplugged") }}'
|
||||
linked: yes
|
||||
vm: '{{ inventory_hostname }}'
|
||||
loop: '{{ interfaces }}'
|
||||
register: interface_result
|
||||
|
||||
- debug: var=interface_result
|
||||
|
||||
- name: Host configured in Satellite
|
||||
redhat.satellite.host:
|
||||
username: "{{ satellite_admin_user }}"
|
||||
password: "{{ satellite_admin_pass }}"
|
||||
server_url: "{{ satellite_url }}"
|
||||
name: "{{ inventory_hostname }}"
|
||||
hostgroup: "RHEL8/RHEL8 Sandbox"
|
||||
organization: Toal.ca
|
||||
location: Lab
|
||||
ip: "{{ primary_ip4 }}"
|
||||
mac: "{{ interface_result.results[0].nic.mac.address }}" #fragile
|
||||
build: "{{ vm_result.changed |ternary(true,false) }}"
|
||||
validate_certs: no
|
||||
|
||||
- name: Assign interface MACs to Netbox
|
||||
netbox_vm_interface:
|
||||
netbox_url: "{{ netbox_api }}"
|
||||
netbox_token: "{{ netbox_token }}"
|
||||
data:
|
||||
name: "{{ item.nic.name }}"
|
||||
mac_address: "{{ item.nic.mac.address }}"
|
||||
virtual_machine: "{{ inventory_hostname }}"
|
||||
loop: "{{ interface_result.results }}"
|
||||
|
||||
handlers:
|
||||
- name: PXE Boot
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ inventory_hostname }}"
|
||||
boot_devices:
|
||||
- network
|
||||
state: running
|
||||
register: vm_build_result
|
||||
|
||||
- name: Ensure VM is running and reachable
|
||||
hosts: tag_build
|
||||
gather_facts: no
|
||||
connection: local
|
||||
collections:
|
||||
- redhat.rhv
|
||||
vars:
|
||||
# Hack to work around virtualenv python interpreter
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
|
||||
tasks:
|
||||
- name: VM is running
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ inventory_hostname }}"
|
||||
state: running
|
||||
boot_devices:
|
||||
- hd
|
||||
|
||||
- name: Wait for SSH to be ready
|
||||
wait_for_connection:
|
||||
timeout: 1800
|
||||
sleep: 5
|
||||
|
||||
# - name: Ensure IP address is correct in Netbox
|
||||
# netbox_virtual_machine:
|
||||
# data:
|
||||
# name: "{{ inventory_hostname }}"
|
||||
# primary_ip4: "{{ primary_ip4 }}"
|
||||
# netbox_url: "{{ netbox_api }}"
|
||||
# netbox_token: "{{ netbox_token }}"
|
||||
# state: present
|
||||
# delegate_to: localhost
|
||||
|
||||
#TODO: Clear Build tag
|
||||
247
playbooks/deploy_openclaw.yml
Normal file
247
playbooks/deploy_openclaw.yml
Normal file
@@ -0,0 +1,247 @@
|
||||
---
|
||||
# Deploy OpenClaw AI Gateway on a Proxmox VM
|
||||
#
|
||||
# OpenClaw: https://docs.openclaw.ai
|
||||
# Ansible install docs: https://docs.openclaw.ai/install/ansible
|
||||
# Signal channel docs: https://docs.openclaw.ai/channels/signal
|
||||
#
|
||||
# Prerequisites:
|
||||
# Inventory host: openclaw.toal.ca (in group 'openclaw')
|
||||
# host_vars required:
|
||||
# openclaw_vm_ssh_public_key — SSH public key injected via cloud-init
|
||||
# openclaw_vm_ip — static IP or 'dhcp'
|
||||
# openclaw_vm_gateway — required for static IP
|
||||
# openclaw_vm_vnet — Proxmox SDN VNet (e.g. lan)
|
||||
#
|
||||
# Vault secrets (1Password):
|
||||
# vault_proxmox_token_secret — Proxmox API token
|
||||
# vault_openclaw_api_key — Model provider API key (Anthropic, OpenAI, etc.)
|
||||
# vault_openclaw_signal_phone — Signal account phone number (E.164, if Signal enabled)
|
||||
#
|
||||
# Security architecture:
|
||||
# - OPNsense firewall provides perimeter security
|
||||
# - UFW on VM: allow SSH (22) + gateway (18789); deny everything else inbound
|
||||
# - Docker CE for agent sandbox isolation
|
||||
# - Systemd hardening: NoNewPrivileges, PrivateTmp, ProtectSystem
|
||||
#
|
||||
# Signal channel MANUAL STEP required after deploy:
|
||||
# sudo -i -u openclaw
|
||||
# signal-cli link -n "OpenClaw" # scan QR with Signal app
|
||||
# openclaw pairing approve signal
|
||||
#
|
||||
# Play order:
|
||||
# Play 1: openclaw_create_vm — Create Ubuntu VM in Proxmox (cloud-init)
|
||||
# Play 2: openclaw_wait — Wait for SSH to become available
|
||||
# Play 3: openclaw_install — Install OpenClaw, security stack, Signal channel
|
||||
#
|
||||
# Usage:
|
||||
# ansible-navigator run playbooks/deploy_openclaw.yml
|
||||
# ansible-navigator run playbooks/deploy_openclaw.yml --tags openclaw_create_vm
|
||||
# ansible-navigator run playbooks/deploy_openclaw.yml --tags openclaw_install
|
||||
# ansible-navigator run playbooks/deploy_openclaw.yml --tags openclaw_install,openclaw_signal
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Play 1: Create Ubuntu VM in Proxmox using cloud-init
|
||||
# ---------------------------------------------------------------------------
|
||||
- name: Create OpenClaw VM in Proxmox
|
||||
hosts: openclaw.toal.ca
|
||||
gather_facts: false
|
||||
connection: local
|
||||
tags: openclaw_create_vm
|
||||
|
||||
vars:
|
||||
# Proxmox connection — override in host_vars if needed
|
||||
proxmox_node: pve1
|
||||
proxmox_api_user: ansible@pam
|
||||
proxmox_api_token_id: ansible
|
||||
proxmox_api_token_secret: "{{ vault_proxmox_token_secret }}"
|
||||
proxmox_validate_certs: false
|
||||
proxmox_storage: local-lvm
|
||||
proxmox_iso_dir: /var/lib/vz/template/iso
|
||||
# VM spec — override in host_vars for the openclaw inventory host
|
||||
openclaw_vm_name: openclaw
|
||||
openclaw_vm_id: 0
|
||||
openclaw_vm_cpu: 2
|
||||
openclaw_vm_memory_mb: 4096
|
||||
openclaw_vm_disk_gb: 40
|
||||
openclaw_vm_vnet: lan
|
||||
openclaw_vm_user: ubuntu
|
||||
openclaw_vm_ssh_public_key: "" # required — set in host_vars
|
||||
openclaw_vm_ip: dhcp # set to x.x.x.x for static
|
||||
openclaw_vm_prefix: 24
|
||||
openclaw_vm_gateway: ""
|
||||
openclaw_vm_nameserver: ""
|
||||
openclaw_vm_cloud_image_url: "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
|
||||
openclaw_vm_cloud_image_filename: noble-server-cloudimg-amd64.img
|
||||
# Computed
|
||||
__openclaw_proxmox_api_host: "{{ hostvars['proxmox_api']['ansible_host'] }}"
|
||||
__openclaw_proxmox_api_port: "{{ hostvars['proxmox_api']['ansible_port'] }}"
|
||||
|
||||
tasks:
|
||||
- name: Download Ubuntu 24.04 cloud image to Proxmox host
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ openclaw_vm_cloud_image_url }}"
|
||||
dest: "{{ proxmox_iso_dir }}/{{ openclaw_vm_cloud_image_filename }}"
|
||||
mode: "0644"
|
||||
delegate_to: proxmox_host
|
||||
|
||||
- name: Create VM definition
|
||||
community.proxmox.proxmox_kvm:
|
||||
api_host: "{{ __openclaw_proxmox_api_host }}"
|
||||
api_user: "{{ proxmox_api_user }}"
|
||||
api_port: "{{ __openclaw_proxmox_api_port }}"
|
||||
api_token_id: "{{ proxmox_api_token_id }}"
|
||||
api_token_secret: "{{ proxmox_api_token_secret }}"
|
||||
validate_certs: "{{ proxmox_validate_certs }}"
|
||||
node: "{{ proxmox_node }}"
|
||||
vmid: "{{ openclaw_vm_id | default(omit, true) }}"
|
||||
name: "{{ openclaw_vm_name }}"
|
||||
cores: "{{ openclaw_vm_cpu }}"
|
||||
memory: "{{ openclaw_vm_memory_mb }}"
|
||||
cpu: host
|
||||
machine: q35
|
||||
bios: ovmf
|
||||
efidisk0:
|
||||
storage: "{{ proxmox_storage }}"
|
||||
format: raw
|
||||
efitype: 4m
|
||||
pre_enrolled_keys: false
|
||||
scsihw: virtio-scsi-single
|
||||
net:
|
||||
net0: "virtio,bridge={{ openclaw_vm_vnet }}"
|
||||
boot: "order=scsi0"
|
||||
onboot: true
|
||||
state: present
|
||||
|
||||
- name: Retrieve VM info
|
||||
community.proxmox.proxmox_vm_info:
|
||||
api_host: "{{ __openclaw_proxmox_api_host }}"
|
||||
api_user: "{{ proxmox_api_user }}"
|
||||
api_port: "{{ __openclaw_proxmox_api_port }}"
|
||||
api_token_id: "{{ proxmox_api_token_id }}"
|
||||
api_token_secret: "{{ proxmox_api_token_secret }}"
|
||||
validate_certs: "{{ proxmox_validate_certs }}"
|
||||
node: "{{ proxmox_node }}"
|
||||
name: "{{ openclaw_vm_name }}"
|
||||
type: qemu
|
||||
config: current
|
||||
register: __openclaw_vm_info
|
||||
retries: 5
|
||||
|
||||
- name: Set VM ID fact
|
||||
ansible.builtin.set_fact:
|
||||
openclaw_vm_id: "{{ __openclaw_vm_info.proxmox_vms[0].vmid }}"
|
||||
cacheable: true
|
||||
|
||||
- name: Check if disk is already imported (scsi0 present in config)
|
||||
ansible.builtin.set_fact:
|
||||
__openclaw_disk_imported: "{{ __openclaw_vm_info.proxmox_vms[0].config.scsi0 is defined }}"
|
||||
|
||||
- name: Import cloud image as primary disk
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
qm importdisk {{ openclaw_vm_id }}
|
||||
{{ proxmox_iso_dir }}/{{ openclaw_vm_cloud_image_filename }}
|
||||
{{ proxmox_storage }} --format raw
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: not __openclaw_disk_imported | bool
|
||||
|
||||
- name: Attach imported disk as scsi0
|
||||
ansible.builtin.command:
|
||||
cmd: "qm set {{ openclaw_vm_id }} --scsi0 {{ proxmox_storage }}:vm-{{ openclaw_vm_id }}-disk-0,iothread=1,cache=writeback"
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: not __openclaw_disk_imported | bool
|
||||
|
||||
- name: Resize disk to configured size
|
||||
ansible.builtin.command:
|
||||
cmd: "qm disk resize {{ openclaw_vm_id }} scsi0 {{ openclaw_vm_disk_gb }}G"
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: not __openclaw_disk_imported | bool
|
||||
|
||||
- name: Add cloud-init drive
|
||||
ansible.builtin.command:
|
||||
cmd: "qm set {{ openclaw_vm_id }} --ide2 {{ proxmox_storage }}:cloudinit"
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: not __openclaw_disk_imported | bool
|
||||
|
||||
- name: Write SSH public key to temp file on Proxmox host
|
||||
ansible.builtin.copy:
|
||||
content: "{{ openclaw_vm_ssh_public_key }}"
|
||||
dest: "/tmp/openclaw-sshkey-{{ openclaw_vm_id }}.pub"
|
||||
mode: "0600"
|
||||
delegate_to: proxmox_host
|
||||
no_log: false
|
||||
|
||||
- name: Configure cloud-init user and SSH key
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
qm set {{ openclaw_vm_id }}
|
||||
--ciuser {{ openclaw_vm_user }}
|
||||
--sshkeys /tmp/openclaw-sshkey-{{ openclaw_vm_id }}.pub
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
|
||||
- name: Configure cloud-init network (static)
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
qm set {{ openclaw_vm_id }}
|
||||
--ipconfig0 ip={{ openclaw_vm_ip }}/{{ openclaw_vm_prefix }},gw={{ openclaw_vm_gateway }}
|
||||
--nameserver {{ openclaw_vm_nameserver }}
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: openclaw_vm_ip != 'dhcp'
|
||||
|
||||
- name: Configure cloud-init network (DHCP)
|
||||
ansible.builtin.command:
|
||||
cmd: "qm set {{ openclaw_vm_id }} --ipconfig0 ip=dhcp"
|
||||
delegate_to: proxmox_host
|
||||
changed_when: true
|
||||
when: openclaw_vm_ip == 'dhcp'
|
||||
|
||||
- name: Start VM
|
||||
community.proxmox.proxmox_kvm:
|
||||
api_host: "{{ __openclaw_proxmox_api_host }}"
|
||||
api_user: "{{ proxmox_api_user }}"
|
||||
api_port: "{{ __openclaw_proxmox_api_port }}"
|
||||
api_token_id: "{{ proxmox_api_token_id }}"
|
||||
api_token_secret: "{{ proxmox_api_token_secret }}"
|
||||
validate_certs: "{{ proxmox_validate_certs }}"
|
||||
node: "{{ proxmox_node }}"
|
||||
name: "{{ openclaw_vm_name }}"
|
||||
state: started
|
||||
|
||||
- name: Remove temporary SSH key file
|
||||
ansible.builtin.file:
|
||||
path: "/tmp/openclaw-sshkey-{{ openclaw_vm_id }}.pub"
|
||||
state: absent
|
||||
delegate_to: proxmox_host
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Play 2: Wait for VM to become reachable
|
||||
# ---------------------------------------------------------------------------
|
||||
- name: Wait for OpenClaw VM SSH
|
||||
hosts: openclaw.toal.ca
|
||||
gather_facts: false
|
||||
tags: openclaw_create_vm
|
||||
|
||||
tasks:
|
||||
- name: Wait for SSH port
|
||||
ansible.builtin.wait_for_connection:
|
||||
timeout: 300
|
||||
sleep: 10
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Play 3: Install OpenClaw, security stack, and Signal channel
|
||||
# ---------------------------------------------------------------------------
|
||||
- name: Install and configure OpenClaw
|
||||
hosts: openclaw.toal.ca
|
||||
gather_facts: true
|
||||
become: true
|
||||
tags: openclaw_install
|
||||
|
||||
roles:
|
||||
- role: openclaw
|
||||
@@ -56,11 +56,8 @@
|
||||
connection: local
|
||||
tags: sno_deploy_vm
|
||||
|
||||
tasks:
|
||||
- name: Create VM
|
||||
ansible.builtin.include_role:
|
||||
name: sno_deploy
|
||||
tasks_from: create_vm.yml
|
||||
roles:
|
||||
- role: proxmox_vm
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Play 2: Configure OPNsense - Local DNS Overrides
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
when: network_connections is defined
|
||||
|
||||
- name: Set Network OS from Netbox info.
|
||||
gather_facts: no
|
||||
gather_facts: false
|
||||
hosts: switch01
|
||||
tasks:
|
||||
- name: Set network os type for Cisco
|
||||
@@ -19,14 +19,14 @@
|
||||
hosts: switch01
|
||||
become_method: enable
|
||||
connection: network_cli
|
||||
gather_facts: no
|
||||
gather_facts: false
|
||||
|
||||
roles:
|
||||
- toallab.infrastructure
|
||||
|
||||
- name: DHCP Server
|
||||
hosts: service_dhcp
|
||||
become: yes
|
||||
become: true
|
||||
|
||||
pre_tasks:
|
||||
# - name: Gather interfaces for dhcp service
|
||||
@@ -51,7 +51,7 @@
|
||||
# domain_name_servers: 10.0.2.3
|
||||
# routers: 192.168.222.129
|
||||
roles:
|
||||
- name: sage905.netbox-to-dhcp
|
||||
- sage905.netbox-to-dhcp
|
||||
|
||||
- name: Include Minecraft tasks
|
||||
import_playbook: minecraft.yml
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
- name: Create 1Password Secret
|
||||
hosts: localhost
|
||||
tasks:
|
||||
- onepassword.connect.generic_item:
|
||||
vault_id: "e63n3krpqx7qpohuvlyqpn6m34"
|
||||
title: Lab Secrets Test
|
||||
state: created
|
||||
fields:
|
||||
- label: Codeword
|
||||
value: "hunter2"
|
||||
section: "Personal Info"
|
||||
field_type: concealed
|
||||
# no_log: true
|
||||
register: op_item
|
||||
@@ -1,16 +0,0 @@
|
||||
- name: Create Windows AD Server
|
||||
hosts: WinAD
|
||||
gather_facts: false
|
||||
connection: local
|
||||
become: false
|
||||
|
||||
vars:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
|
||||
roles:
|
||||
- oatakan.ansible-role-ovirt
|
||||
|
||||
- name: Configure AD Controller
|
||||
hosts: WinAD
|
||||
become: false
|
||||
- oatakan.ansible-role-windows-ad-controller
|
||||
Reference in New Issue
Block a user