|
--- |
|
- name: "Dev VM ansible playbook" |
|
hosts: all |
|
gather_facts: yes |
|
vars: |
|
package_install: [ |
|
{ add_item: 'curl' }, |
|
{ add_item: 'wget' }, |
|
{ add_item: 'lsof' }, |
|
{ add_item: 'dos2unix' }, |
|
{ add_item: 'tmux' }, |
|
{ add_item: 'vim' }, |
|
{ add_item: 'git' }, |
|
{ add_item: 'make' }, |
|
{ add_item: 'tcpdump' }, |
|
{ add_item: 'socat' }, |
|
{ add_item: 'expect' }, |
|
{ add_item: 'sshfs' }, |
|
{ add_item: 'acl' }, |
|
{ add_item: 'python3-virtualenv' }, |
|
{ add_item: 'python3-pip' } |
|
] |
|
package_remove: [ |
|
{ del_item: 'telnet' } |
|
] |
|
create_folders: [ |
|
{ dir: '/etc/ansible/facts.d/', mode: '0755', owner: 'root', group: 'root' }, |
|
{ dir: '/opt/data/', mode: '0775', owner: 'root', group: 'vagrant' }, |
|
{ dir: '/root/tmp/', mode: '0700', owner: 'root', group: 'root' }, |
|
{ dir: '/mnt/sshfs/', mode: '0775', owner: 'root', group: 'root' } |
|
] |
|
newuser_name: "pyuser" |
|
newuser_home: "/opt/pyapp" |
|
|
|
tasks: |
|
|
|
- name: "checks and debug" |
|
block: |
|
- name: "OS check" |
|
assert: |
|
that: |
|
- ansible_os_family == "Debian" |
|
- ansible_architecture in ['x86_64', 'arm64'] |
|
- name: "check new user var" |
|
assert: |
|
that: |
|
- 'newuser_name is defined' |
|
- name: Display hostname |
|
debug: |
|
msg: "inventory_hostname {{ inventory_hostname }}" |
|
|
|
- name: "system config" |
|
block: |
|
- name: "create new user" |
|
ansible.builtin.user: |
|
name: "{{ newuser_name }}" |
|
comment: "py apps" |
|
home: "{{ newuser_home }}" |
|
shell: /usr/bin/bash |
|
create_home: false |
|
- name: "homedir for {{ newuser_name }}" |
|
ansible.builtin.file: |
|
path: "{{ newuser_home }}" |
|
state: directory |
|
mode: "0775" |
|
owner: "{{ newuser_name}}" |
|
group: "{{ newuser_name }}" |
|
- name: "files and folders" |
|
block: |
|
- name: "create common folders" |
|
ansible.builtin.file: |
|
path: "{{ item.dir }}" |
|
state: directory |
|
mode: "{{ item.mode }}" |
|
owner: "{{ item.owner }}" |
|
group: "{{ item.group }}" |
|
with_items: "{{ create_folders }}" |
|
become: true |
|
|
|
- name: "custom local facts" |
|
block: |
|
- name: "create customtest.fact" |
|
ansible.builtin.copy: |
|
dest: "/etc/ansible/facts.d/customtest.fact" |
|
mode: 0755 |
|
owner: root |
|
group: root |
|
content: | |
|
#!/usr/bin/env python3 |
|
# random custom ansible facts |
|
import os |
|
import sys |
|
import platform |
|
import datetime |
|
import json |
|
# var: |
|
date = str(datetime.datetime.now()) |
|
# output |
|
print(json.dumps({ |
|
"time" : date |
|
})) |
|
become: true |
|
- name: "reload facts" |
|
ansible.builtin.setup: |
|
fact_path: "/etc/ansible/facts.d" |
|
- name: "show fact" |
|
debug: |
|
msg: "customtest {{ ansible_local.customtest.time }}" |
|
- name: "check custom fact was set" |
|
assert: |
|
that: |
|
- ansible_local.customtest.time is defined |
|
|
|
- name: "install software" |
|
block: |
|
- name: "install OS packages" |
|
ansible.builtin.package: |
|
name: "{{ item.add_item }}" |
|
state: present |
|
retries: 3 |
|
with_items: "{{ package_install }}" |
|
become: true |
|
tags: |
|
- software |
|
- name: "remove OS packages" |
|
ansible.builtin.package: |
|
name: "{{ item.del_item }}" |
|
state: absent |
|
with_items: "{{ package_remove }}" |
|
become: true |
|
tags: |
|
- software |
|
- name: "install python tools" |
|
block: |
|
- name: "create requirements file" |
|
ansible.builtin.copy: |
|
dest: "{{ newuser_home }}/requirements.txt" |
|
mode: 0644 |
|
owner: "{{ newuser_name }}" |
|
group: "{{ newuser_name }}" |
|
content: | |
|
# -- ansible managed file -- |
|
pyyaml |
|
pytest |
|
dnspython |
|
invoke |
|
become: true |
|
tags: |
|
- software |
|
- name: "install requirements" |
|
pip: |
|
requirements: requirements.txt |
|
virtualenv: "{{ newuser_home }}/venv/" |
|
chdir: "{{ newuser_home }}" |
|
become: true |
|
become_method: sudo |
|
become_user: "{{ newuser_name }}" |
|
tags: |
|
- software |
|
|
|
- name: "Cockpit Web UI setup" |
|
block: |
|
- name: "install cockpit" |
|
ansible.builtin.package: |
|
name: cockpit |
|
state: present |
|
tags: |
|
- software |
|
- name: "turn on cockpit socket" |
|
service: |
|
name: cockpit.socket |
|
state: started |
|
enabled: yes |
|
- name: "Pause until web ui is up" |
|
uri: |
|
url: "http://localhost:9090/" |
|
follow_redirects: none |
|
method: GET |
|
register: _result |
|
until: _result.status == 200 |
|
retries: 30 |
|
delay: 5 # seconds |
|
become: true |
|
|
|
- name: "Finish up" |
|
block: |
|
- name: "script to run ansible" |
|
ansible.builtin.copy: |
|
dest: /home/vagrant/run-playbook.sh |
|
mode: 0755 |
|
content: | |
|
echo "running playbook.yml on localhost"; |
|
if [[ root = "$(whoami)" ]]; then |
|
echo "Error: do not run as root"; |
|
exit 1; |
|
fi |
|
export ANSIBLE_PYTHON_INTERPRETER=/usr/bin/python3 |
|
ansible-playbook -v --connection=local -i "127.0.0.1," -- /vagrant/playbook.yml; |
|
- name: "create readme" |
|
ansible.builtin.copy: |
|
dest: /home/vagrant/readme.txt |
|
mode: 0644 |
|
content: | |
|
# --- Dev VM details --- |
|
# distro: {{ ansible_distribution }} {{ ansible_distribution_version }} {{ ansible_architecture }} |
|
# ansible: {{ ansible_version }} |
|
# python: {{ ansible_playbook_python }} |
|
- name: "debug note" |
|
debug: |
|
msg: "-- playbook.yml has finished --" |