Skip to content

Instantly share code, notes, and snippets.

@rajabiy
Last active September 19, 2022 17:53
Show Gist options
  • Save rajabiy/0d36393249fbef36d14df94b03291fa3 to your computer and use it in GitHub Desktop.
Save rajabiy/0d36393249fbef36d14df94b03291fa3 to your computer and use it in GitHub Desktop.
here little exsample how to deploy ubuntu ova into vcenter viaansible and cloud-init.iso
yo need 2 change vcenter credentials, datastores, datacenters
virtual machine ip adreses, users and you public key
and run
ansible-playbook -i rke.yaml make-seed-and-deploy-ubuntu.yml
- hosts: localhost
become: no
vars:
vcenter_username: vcenter_user@vsphere.local
vcenter_password: "vspheresupersecretpassword"
tasks:
- name: Seed directory
file:
path: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}"
state: directory
loop: "{{ query('inventory_hostnames', 'all') }}"
- name: Cloud config meta-data file
copy:
dest: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/meta-data"
content: |
instance-id: {{hostvars[item].inventory_hostname}}
local-hostname: localhost
loop: "{{ query('inventory_hostnames', 'all') }}"
- name: Cloud config user-data file
copy:
dest: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/user-data"
content: |
#cloud-config
hostname: {{hostvars[item].inventory_hostname}}
users:
- default
- name: {{hostvars[item].ansible_user}}
ssh-authorized-keys: put your key here
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
lock_passwd: false
shell: /bin/bash
plain_text_passwd: ubuntsupersecretpassword
loop: "{{ query('inventory_hostnames', 'all') }}"
- name: Cloud config network-config file
copy:
dest: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/network-config"
content: |
version: 2
ethernets:
ens192:
match:
name: ens192
set-name: ens192
dhcp4: false
addresses:
- {{hostvars[item].ansible_host}}/24
gateway4: 10.0.0.254
nameservers:
search: [local, cluster.local]
addresses: [8.8.8.8, 1.1.1.1]
loop: "{{ query('inventory_hostnames', 'all') }}"
- name: Create an seed ISO file
community.general.iso_create:
vol_ident: cidata
src_files:
- "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/user-data"
- "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/meta-data"
- "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/network-config"
dest_iso: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/{{hostvars[item].inventory_hostname}}.iso"
interchange_level: 4
joliet: 3
loop: "{{ query('inventory_hostnames', 'all') }}"
- name: Copy file to datastore folder called iso
community.vmware.vsphere_copy:
hostname: '{{ hostvars[item].hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
validate_certs: no
src: "{{lookup('env', 'PWD')}}/seed/{{hostvars[item].inventory_hostname}}/{{hostvars[item].inventory_hostname}}.iso"
datacenter: "{{hostvars[item].datacenter}}"
datastore: "{{hostvars[item].datastore}}"
path: iso/{{hostvars[item].inventory_hostname}}.iso
loop: "{{ query('inventory_hostnames', 'all') }}"
delegate_to: localhost
- name: Deploy VMware ubuntu 20.04 OS OVA
vmware_deploy_ovf:
hostname: '{{ hostvars[item].hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
datacenter: "{{hostvars[item].datacenter}}"
datastore: "{{hostvars[item].datastore}}"
name: "{{hostvars[item].inventory_hostname}}"
validate_certs: no
disk_provisioning: thin
networks:
"VM Network": "VLAN-Mgmt"
ova: /home/user/ansible/focal-server-cloudimg-amd64.ova
allow_duplicates: no
power_on: no
fail_on_spec_warnings: no
loop: "{{ query('inventory_hostnames', 'all') }}"
delegate_to: localhost
- name: Customize virtual machine
vmware_guest:
hostname: '{{ hostvars[item].hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
datacenter: "{{hostvars[item].datacenter}}"
datastore: "{{hostvars[item].datastore}}"
validate_certs: no
name: "{{hostvars[item].inventory_hostname}}"
disk:
- size_gb: 40
type: thin
hardware:
memory_mb: 8192
num_cpus: 4
cdrom:
- controller_number: 0
unit_number: 0
state: present
type: iso
iso_path: "[{{hostvars[item].datastore}}] iso/{{hostvars[item].inventory_hostname}}.iso"
networks:
- name: "VLAN-Mgmt"
- name: "VLAN-VMs-Traffic"
loop: "{{ query('inventory_hostnames', 'all') }}"
delegate_to: localhost
- name: Power on
vmware_guest:
hostname: '{{ hostvars[item].hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
datacenter: "{{hostvars[item].datacenter}}"
datastore: "{{hostvars[item].datastore}}"
validate_certs: no
name: "{{hostvars[item].inventory_hostname}}"
state: poweredon
customvalues:
- key: "disk.EnableUUID"
value: "TRUE"
loop: "{{ query('inventory_hostnames', 'all') }}"
delegate_to: localhost
nodes:
hosts:
DR-RKE:
ansible_host: 10.0.0.209
datastore: Datastore03
hostname: 10.0.0.102
datacenter: DR-DC
HQ-RKE:
ansible_host: 10.0.0.205
datastore: Datastore03
hostname: 10.11.253.101
datacenter: HQ-DC
vars:
ansible_user: ubuntusername
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment