Skip to content

Instantly share code, notes, and snippets.

@zeitounator
Last active January 16, 2024 13:47
Show Gist options
  • Save zeitounator/a08dda0f93f34d0493a874a330a5d0fa to your computer and use it in GitHub Desktop.
Save zeitounator/a08dda0f93f34d0493a874a330a5d0fa to your computer and use it in GitHub Desktop.
$ tree
.
├── test.yml
├── users_initial.yml
├── users_modify.yml
└── Vagrantfile
0 directories, 4 files
$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = 'ubuntu/jammy64'
# Disable default vagrant synced_folder
config.vm.synced_folder ".", "/vagrant", disabled: true
# Virtualbox configuration
config.vm.provider "virtualbox" do |vb|
vb.name = "proof"
vb.memory = 1024
vb.cpus = 1
end
# Provision with ansible
config.vm.provision "ansible-initial", type: "ansible", run: "never" do |ansible|
ansible.playbook = "test.yml"
ansible.compatibility_mode = "2.0"
end
config.vm.provision "ansible-alter", type: "ansible", run: "never" do |ansible|
ansible.playbook = "test.yml"
ansible.extra_vars = { alter_users: true }
ansible.compatibility_mode = "2.0"
end
end
$ cat test.yml
---
- hosts: all
gather_facts: false
user: vagrant
become: true
vars_files:
- "users_{{ 'modify' if alter_users | d(false) | bool else 'initial' }}.yml"
vars:
my_hash_salt: totopipobingo
tasks:
- name: Create users in my test docker container
ansible.builtin.user:
name: "{{ item.username }}"
password: "{{ item.password | password_hash('sha512', my_hash_salt) }}"
loop: "{{ users }}"
loop_control:
label: "{{ item.username }}"
- name: Add keys for each user
ansible.posix.authorized_key:
user: "{{ item.username }}"
key: "{{ item.public_keys | join('\n') }}"
exclusive: true
loop: "{{ users }}"
loop_control:
label: "{{ item.username }}"
- name: "[verify]: getauthorized key files contents"
ansible.builtin.slurp:
src: /home/{{ item.username }}/.ssh/authorized_keys
register: key_files
loop: "{{ users }}"
loop_control:
label: "{{ item.username }}"
- name: "[verify]: show that each user has both keys"
ansible.builtin.debug:
msg: "{{ (item.content | b64decode).splitlines() }}"
loop: "{{ key_files.results }}"
loop_control:
label: "{{ item.item.username }}"
$ cat users_initial.yml
users:
- username: user1
password: secret1
public_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDau24KkhJiZ6OfuhZrkoxv/YxWKJRdefI0lULdI+Lhw user1@machine
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine
- username: user2
password: secret2
public_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFbQwAiS7z6ea+5cZq3eNU5SZ+XwmYF52Z2ZUGEtS9C2 user2@machine
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine
$ cat users_modify.yml
---
users:
- username: user1
password: secret1
public_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGHndjn7XPC59Z9KyrJHjX9/ntoIlHMqqTHRC04U+T0 user1@machine
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine
- username: user2
password: secret2
public_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/jammy64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Setting the name of the VM: proof
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 6.0.0 r127566
default: VirtualBox Version: 7.0
$ vagrant up --provision-with ansible-initial
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Running provisioner: ansible-initial (ansible)...
default: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [Create users in my test docker container] ********************************
changed: [default] => (item=user1)
changed: [default] => (item=user2)
TASK [Add keys for each user] **************************************************
changed: [default] => (item=user1)
changed: [default] => (item=user2)
TASK [[verify]: getauthorized key files contents] ******************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: show that each user has both keys] *****************************
ok: [default] => (item=user1) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDau24KkhJiZ6OfuhZrkoxv/YxWKJRdefI0lULdI+Lhw user1@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine"
]
}
ok: [default] => (item=user2) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFbQwAiS7z6ea+5cZq3eNU5SZ+XwmYF52Z2ZUGEtS9C2 user2@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine"
]
}
PLAY RECAP *********************************************************************
default : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ vagrant up --provision-with ansible-initial
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Running provisioner: ansible-initial (ansible)...
default: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [Create users in my test docker container] ********************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [Add keys for each user] **************************************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: getauthorized key files contents] ******************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: show that each user has both keys] *****************************
ok: [default] => (item=user1) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDau24KkhJiZ6OfuhZrkoxv/YxWKJRdefI0lULdI+Lhw user1@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine"
]
}
ok: [default] => (item=user2) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFbQwAiS7z6ea+5cZq3eNU5SZ+XwmYF52Z2ZUGEtS9C2 user2@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine"
]
}
PLAY RECAP *********************************************************************
default : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ vagrant up --provision-with ansible-alter
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Running provisioner: ansible-alter (ansible)...
default: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [Create users in my test docker container] ********************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [Add keys for each user] **************************************************
changed: [default] => (item=user1)
changed: [default] => (item=user2)
TASK [[verify]: getauthorized key files contents] ******************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: show that each user has both keys] *****************************
ok: [default] => (item=user1) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGHndjn7XPC59Z9KyrJHjX9/ntoIlHMqqTHRC04U+T0 user1@machine"
]
}
ok: [default] => (item=user2) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine"
]
}
PLAY RECAP *********************************************************************
default : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ vagrant up --provision-with ansible-alter
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Running provisioner: ansible-alter (ansible)...
default: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [Create users in my test docker container] ********************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [Add keys for each user] **************************************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: getauthorized key files contents] ******************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: show that each user has both keys] *****************************
ok: [default] => (item=user1) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAGHndjn7XPC59Z9KyrJHjX9/ntoIlHMqqTHRC04U+T0 user1@machine"
]
}
ok: [default] => (item=user2) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine"
]
}
PLAY RECAP *********************************************************************
default : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ vagrant up --provision-with ansible-initial
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/jammy64' version '20240110.0.0' is up to date...
==> default: Running provisioner: ansible-initial (ansible)...
default: Running ansible-playbook...
PLAY [all] *********************************************************************
TASK [Create users in my test docker container] ********************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [Add keys for each user] **************************************************
changed: [default] => (item=user1)
changed: [default] => (item=user2)
TASK [[verify]: getauthorized key files contents] ******************************
ok: [default] => (item=user1)
ok: [default] => (item=user2)
TASK [[verify]: show that each user has both keys] *****************************
ok: [default] => (item=user1) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGWtkBHm2bLuT40EJMC2d5gFVYl3N6qZcGLdf2BhA9F user1@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDau24KkhJiZ6OfuhZrkoxv/YxWKJRdefI0lULdI+Lhw user1@machine"
]
}
ok: [default] => (item=user2) => {
"msg": [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII8PnDXPKAWBK6G29tjli796Pyj2Y55RiwGWh2JT1oRu user2@machine",
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFbQwAiS7z6ea+5cZq3eNU5SZ+XwmYF52Z2ZUGEtS9C2 user2@machine"
]
}
PLAY RECAP *********************************************************************
default : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment