mirror of
https://github.com/roles-ansible/ansible_role_i3wm.git
synced 2024-08-16 10:09:53 +02:00
initial commit
This commit is contained in:
commit
2aa70d66fb
48 changed files with 998 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.molecule
|
11
.yamllint
Normal file
11
.yamllint
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
extends: default
|
||||||
|
|
||||||
|
rules:
|
||||||
|
braces:
|
||||||
|
max-spaces-inside: 1
|
||||||
|
level: error
|
||||||
|
brackets:
|
||||||
|
max-spaces-inside: 1
|
||||||
|
level: error
|
||||||
|
line-length: disable
|
||||||
|
comments-indentation: disable
|
103
README.md
Normal file
103
README.md
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
I3 WM
|
||||||
|
=====
|
||||||
|
|
||||||
|
Install and a basic configuration of I3 Window Manager
|
||||||
|
See: https://i3wm.org/
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
No requirements.
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
*additional i3 packages*
|
||||||
|
|
||||||
|
i3_packages_extra:
|
||||||
|
|
||||||
|
*background image*
|
||||||
|
|
||||||
|
i3_desktop_env:
|
||||||
|
|
||||||
|
*i3 workspaces*
|
||||||
|
|
||||||
|
`__i3_workspaces` could be overwritte with `i3_workspaces`
|
||||||
|
|
||||||
|
*i3 keybindings*
|
||||||
|
|
||||||
|
`__i3_keybindings` coud be overwritten with `i3_keybindings`
|
||||||
|
|
||||||
|
*additional i3 keybindings*
|
||||||
|
|
||||||
|
i3_keybindings_extra: []
|
||||||
|
|
||||||
|
*monitor settings and bindings to i3 workspaces*
|
||||||
|
|
||||||
|
i3_monitors: []
|
||||||
|
|
||||||
|
*applications bindings to i3 workspaces*
|
||||||
|
|
||||||
|
i3_applications: []
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
|
||||||
|
|
||||||
|
- hosts: all
|
||||||
|
vars_files:
|
||||||
|
- vars/main.yml
|
||||||
|
roles:
|
||||||
|
- { role: i3 }
|
||||||
|
|
||||||
|
*`vars/main.yml`*
|
||||||
|
|
||||||
|
i3_desktop_env:
|
||||||
|
background: "~/wallpaper.jpg"
|
||||||
|
|
||||||
|
i3_packages_extra:
|
||||||
|
- ranger
|
||||||
|
|
||||||
|
i3_keybindings_extra:
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (mute/unmute)
|
||||||
|
key: $mod+F12
|
||||||
|
exec: --no-startup-id amixer sset Master toggle
|
||||||
|
- keybinding:
|
||||||
|
name: Volue (default)
|
||||||
|
key: $mod+Shift+F12
|
||||||
|
exec: --no-startup-id amixer sset Master 40%
|
||||||
|
|
||||||
|
i3_monitors:
|
||||||
|
- monitor:
|
||||||
|
id: 1
|
||||||
|
output: "VGA-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "0x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [1,2,3,4,5,6]
|
||||||
|
- monitor:
|
||||||
|
id: 2
|
||||||
|
output: "HDMI-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "1920x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [7,8,9,0]
|
||||||
|
|
||||||
|
i3_applications:
|
||||||
|
- application:
|
||||||
|
class: "Firefox"
|
||||||
|
name: "firefox"
|
||||||
|
workspace: 1
|
||||||
|
on_startup: false
|
||||||
|
- application:
|
||||||
|
class: "Code"
|
||||||
|
name: "code"
|
||||||
|
workspace: 7
|
||||||
|
on_startup: true
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
Apache
|
22
defaults/main.yml
Normal file
22
defaults/main.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
i3_keybindings_extra: []
|
||||||
|
# - keybinding:
|
||||||
|
# name: example
|
||||||
|
# key: $mod+Shift+F10
|
||||||
|
# exec: --no-startup-id touch /tmp/example.txt
|
||||||
|
|
||||||
|
i3_monitors: [] # see: xrandr
|
||||||
|
# - monitor:
|
||||||
|
# id: 1
|
||||||
|
# output: "VGA-1"
|
||||||
|
# mode: "1920x1080"
|
||||||
|
# pos: "0x0"
|
||||||
|
# rotate: "normal"
|
||||||
|
# workspaces: [1,2,3,4,5,6,7,8,9,0] # bind workspace to a specific monitor
|
||||||
|
|
||||||
|
i3_applications: []
|
||||||
|
# - application:
|
||||||
|
# class: "Firefox"
|
||||||
|
# name: "firefox"
|
||||||
|
# workspace: 1 # bind application to a specific workspace
|
||||||
|
# on_startup: false
|
15
meta/main.yml
Normal file
15
meta/main.yml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Owe Bretthauer
|
||||||
|
description: i3wm (https://i3wm.org/)
|
||||||
|
license: license (Apache)
|
||||||
|
min_ansible_version: 2.2
|
||||||
|
platforms:
|
||||||
|
- name: Debian
|
||||||
|
versions:
|
||||||
|
- stretch
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- xenial
|
||||||
|
galaxy_tags: [i3wm]
|
||||||
|
dependencies: []
|
9
molecule/default/Dockerfile.j2
Normal file
9
molecule/default/Dockerfile.j2
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Molecule managed
|
||||||
|
|
||||||
|
FROM {{ item.image }}
|
||||||
|
|
||||||
|
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
|
||||||
|
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
|
||||||
|
elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
|
||||||
|
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
|
||||||
|
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
|
16
molecule/default/INSTALL.rst
Normal file
16
molecule/default/INSTALL.rst
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
*******
|
||||||
|
Install
|
||||||
|
*******
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
============
|
||||||
|
|
||||||
|
* Docker Engine
|
||||||
|
* docker-py
|
||||||
|
|
||||||
|
Install
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ sudo pip install docker-py
|
59
molecule/default/create.yml
Normal file
59
molecule/default/create.yml
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
- name: Create
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||||
|
vars:
|
||||||
|
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||||
|
molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
|
||||||
|
molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
|
||||||
|
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||||
|
tasks:
|
||||||
|
- name: Create Dockerfiles from image names
|
||||||
|
template:
|
||||||
|
src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
|
||||||
|
dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
register: platforms
|
||||||
|
|
||||||
|
- name: Discover local Docker images
|
||||||
|
docker_image_facts:
|
||||||
|
name: "molecule_local/{{ item.item.name }}"
|
||||||
|
with_items: "{{ platforms.results }}"
|
||||||
|
register: docker_images
|
||||||
|
|
||||||
|
- name: Build an Ansible compatible image
|
||||||
|
docker_image:
|
||||||
|
path: "{{ molecule_ephemeral_directory }}"
|
||||||
|
name: "molecule_local/{{ item.item.image }}"
|
||||||
|
dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
|
||||||
|
force: "{{ item.item.force | default(true) }}"
|
||||||
|
with_items: "{{ platforms.results }}"
|
||||||
|
when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
|
||||||
|
|
||||||
|
- name: Create molecule instance(s)
|
||||||
|
docker_container:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
hostname: "{{ item.name }}"
|
||||||
|
image: "molecule_local/{{ item.image }}"
|
||||||
|
state: started
|
||||||
|
recreate: false
|
||||||
|
log_driver: syslog
|
||||||
|
command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
|
||||||
|
privileged: "{{ item.privileged | default(omit) }}"
|
||||||
|
volumes: "{{ item.volumes | default(omit) }}"
|
||||||
|
capabilities: "{{ item.capabilities | default(omit) }}"
|
||||||
|
ports: "{{ item.exposed_ports | default(omit) }}"
|
||||||
|
register: server
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
async: 7200
|
||||||
|
poll: 0
|
||||||
|
|
||||||
|
- name: Wait for instance(s) creation to complete
|
||||||
|
async_status:
|
||||||
|
jid: "{{ item.ansible_job_id }}"
|
||||||
|
register: docker_jobs
|
||||||
|
until: docker_jobs.finished
|
||||||
|
retries: 300
|
||||||
|
with_items: "{{ server.results }}"
|
27
molecule/default/destroy.yml
Normal file
27
molecule/default/destroy.yml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
- name: Destroy
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||||
|
vars:
|
||||||
|
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||||
|
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||||
|
tasks:
|
||||||
|
- name: Destroy molecule instance(s)
|
||||||
|
docker_container:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
state: absent
|
||||||
|
force_kill: "{{ item.force_kill | default(true) }}"
|
||||||
|
register: server
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
async: 7200
|
||||||
|
poll: 0
|
||||||
|
|
||||||
|
- name: Wait for instance(s) deletion to complete
|
||||||
|
async_status:
|
||||||
|
jid: "{{ item.ansible_job_id }}"
|
||||||
|
register: docker_jobs
|
||||||
|
until: docker_jobs.finished
|
||||||
|
retries: 300
|
||||||
|
with_items: "{{ server.results }}"
|
32
molecule/default/molecule.yml
Normal file
32
molecule/default/molecule.yml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
driver:
|
||||||
|
name: docker
|
||||||
|
lint:
|
||||||
|
name: yamllint
|
||||||
|
platforms:
|
||||||
|
- name: debian_stretch_default
|
||||||
|
image: debian:stretch
|
||||||
|
# - name: debian_jessie_default
|
||||||
|
# image: debian:jessie
|
||||||
|
- name: ubuntu_xenial_default
|
||||||
|
image: ubuntu:xenial
|
||||||
|
# - name: ubuntu_trusty_default
|
||||||
|
# image: ubuntu:trusty
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
lint:
|
||||||
|
name: ansible-lint
|
||||||
|
scenario:
|
||||||
|
name: default
|
||||||
|
test_sequence:
|
||||||
|
- lint
|
||||||
|
- syntax
|
||||||
|
- create
|
||||||
|
- prepare
|
||||||
|
- converge
|
||||||
|
verifier:
|
||||||
|
name: testinfra
|
||||||
|
lint:
|
||||||
|
name: flake8
|
51
molecule/default/playbook.yml
Normal file
51
molecule/default/playbook.yml
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
|
||||||
|
vars:
|
||||||
|
i3_desktop_env:
|
||||||
|
background: "~/wallpaper.jpg"
|
||||||
|
|
||||||
|
i3_packages_extra:
|
||||||
|
- ranger
|
||||||
|
|
||||||
|
i3_keybindings_extra:
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (mute/unmute)
|
||||||
|
key: $mod+F12
|
||||||
|
exec: --no-startup-id amixer sset Master toggle
|
||||||
|
- keybinding:
|
||||||
|
name: Volue (default)
|
||||||
|
key: $mod+Shift+F12
|
||||||
|
exec: --no-startup-id amixer sset Master 40%
|
||||||
|
|
||||||
|
i3_monitors:
|
||||||
|
- monitor:
|
||||||
|
id: 1
|
||||||
|
output: "VGA-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "0x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [1, 2, 3, 4, 5, 6]
|
||||||
|
- monitor:
|
||||||
|
id: 2
|
||||||
|
output: "HDMI-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "1920x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [7, 8, 9, 0]
|
||||||
|
|
||||||
|
i3_applications:
|
||||||
|
- application:
|
||||||
|
class: "Firefox"
|
||||||
|
name: "firefox"
|
||||||
|
workspace: 1
|
||||||
|
on_startup: false
|
||||||
|
- application:
|
||||||
|
class: "Code"
|
||||||
|
name: "code"
|
||||||
|
workspace: 7
|
||||||
|
on_startup: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: i3
|
5
molecule/default/prepare.yml
Normal file
5
molecule/default/prepare.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
- name: Prepare
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
tasks: []
|
Binary file not shown.
14
molecule/default/tests/test_default.py
Normal file
14
molecule/default/tests/test_default.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
import testinfra.utils.ansible_runner
|
||||||
|
|
||||||
|
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||||
|
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
|
||||||
|
|
||||||
|
|
||||||
|
def test_hosts_file(host):
|
||||||
|
f = host.file('/etc/hosts')
|
||||||
|
|
||||||
|
assert f.exists
|
||||||
|
assert f.user == 'root'
|
||||||
|
assert f.group == 'root'
|
BIN
molecule/default/tests/test_default.pyc
Normal file
BIN
molecule/default/tests/test_default.pyc
Normal file
Binary file not shown.
9
molecule/no_vars/Dockerfile.j2
Normal file
9
molecule/no_vars/Dockerfile.j2
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Molecule managed
|
||||||
|
|
||||||
|
FROM {{ item.image }}
|
||||||
|
|
||||||
|
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
|
||||||
|
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
|
||||||
|
elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
|
||||||
|
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
|
||||||
|
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
|
16
molecule/no_vars/INSTALL.rst
Normal file
16
molecule/no_vars/INSTALL.rst
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
*******
|
||||||
|
Install
|
||||||
|
*******
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
============
|
||||||
|
|
||||||
|
* Docker Engine
|
||||||
|
* docker-py
|
||||||
|
|
||||||
|
Install
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ sudo pip install docker-py
|
59
molecule/no_vars/create.yml
Normal file
59
molecule/no_vars/create.yml
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
- name: Create
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||||
|
vars:
|
||||||
|
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||||
|
molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
|
||||||
|
molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
|
||||||
|
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||||
|
tasks:
|
||||||
|
- name: Create Dockerfiles from image names
|
||||||
|
template:
|
||||||
|
src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
|
||||||
|
dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
register: platforms
|
||||||
|
|
||||||
|
- name: Discover local Docker images
|
||||||
|
docker_image_facts:
|
||||||
|
name: "molecule_local/{{ item.item.name }}"
|
||||||
|
with_items: "{{ platforms.results }}"
|
||||||
|
register: docker_images
|
||||||
|
|
||||||
|
- name: Build an Ansible compatible image
|
||||||
|
docker_image:
|
||||||
|
path: "{{ molecule_ephemeral_directory }}"
|
||||||
|
name: "molecule_local/{{ item.item.image }}"
|
||||||
|
dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
|
||||||
|
force: "{{ item.item.force | default(true) }}"
|
||||||
|
with_items: "{{ platforms.results }}"
|
||||||
|
when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
|
||||||
|
|
||||||
|
- name: Create molecule instance(s)
|
||||||
|
docker_container:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
hostname: "{{ item.name }}"
|
||||||
|
image: "molecule_local/{{ item.image }}"
|
||||||
|
state: started
|
||||||
|
recreate: false
|
||||||
|
log_driver: syslog
|
||||||
|
command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
|
||||||
|
privileged: "{{ item.privileged | default(omit) }}"
|
||||||
|
volumes: "{{ item.volumes | default(omit) }}"
|
||||||
|
capabilities: "{{ item.capabilities | default(omit) }}"
|
||||||
|
ports: "{{ item.exposed_ports | default(omit) }}"
|
||||||
|
register: server
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
async: 7200
|
||||||
|
poll: 0
|
||||||
|
|
||||||
|
- name: Wait for instance(s) creation to complete
|
||||||
|
async_status:
|
||||||
|
jid: "{{ item.ansible_job_id }}"
|
||||||
|
register: docker_jobs
|
||||||
|
until: docker_jobs.finished
|
||||||
|
retries: 300
|
||||||
|
with_items: "{{ server.results }}"
|
27
molecule/no_vars/destroy.yml
Normal file
27
molecule/no_vars/destroy.yml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
- name: Destroy
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||||
|
vars:
|
||||||
|
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
|
||||||
|
molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
|
||||||
|
tasks:
|
||||||
|
- name: Destroy molecule instance(s)
|
||||||
|
docker_container:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
state: absent
|
||||||
|
force_kill: "{{ item.force_kill | default(true) }}"
|
||||||
|
register: server
|
||||||
|
with_items: "{{ molecule_yml.platforms }}"
|
||||||
|
async: 7200
|
||||||
|
poll: 0
|
||||||
|
|
||||||
|
- name: Wait for instance(s) deletion to complete
|
||||||
|
async_status:
|
||||||
|
jid: "{{ item.ansible_job_id }}"
|
||||||
|
register: docker_jobs
|
||||||
|
until: docker_jobs.finished
|
||||||
|
retries: 300
|
||||||
|
with_items: "{{ server.results }}"
|
28
molecule/no_vars/molecule.yml
Normal file
28
molecule/no_vars/molecule.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
driver:
|
||||||
|
name: docker
|
||||||
|
lint:
|
||||||
|
name: yamllint
|
||||||
|
platforms:
|
||||||
|
- name: debian_stretch_empty_vars
|
||||||
|
image: debian:stretch
|
||||||
|
- name: ubuntu_xenial_empty_vars
|
||||||
|
image: ubuntu:xenial
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
lint:
|
||||||
|
name: ansible-lint
|
||||||
|
scenario:
|
||||||
|
name: no_vars
|
||||||
|
test_sequence:
|
||||||
|
- lint
|
||||||
|
- syntax
|
||||||
|
- create
|
||||||
|
- prepare
|
||||||
|
- converge
|
||||||
|
verifier:
|
||||||
|
name: testinfra
|
||||||
|
lint:
|
||||||
|
name: flake8
|
6
molecule/no_vars/playbook.yml
Normal file
6
molecule/no_vars/playbook.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: i3
|
5
molecule/no_vars/prepare.yml
Normal file
5
molecule/no_vars/prepare.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
- name: Prepare
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
tasks: []
|
Binary file not shown.
14
molecule/no_vars/tests/test_default.py
Normal file
14
molecule/no_vars/tests/test_default.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
import testinfra.utils.ansible_runner
|
||||||
|
|
||||||
|
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||||
|
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
|
||||||
|
|
||||||
|
|
||||||
|
def test_hosts_file(host):
|
||||||
|
f = host.file('/etc/hosts')
|
||||||
|
|
||||||
|
assert f.exists
|
||||||
|
assert f.user == 'root'
|
||||||
|
assert f.group == 'root'
|
BIN
molecule/no_vars/tests/test_default.pyc
Normal file
BIN
molecule/no_vars/tests/test_default.pyc
Normal file
Binary file not shown.
48
tasks/main.yml
Normal file
48
tasks/main.yml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
# register variables
|
||||||
|
- import_tasks: variables.yml
|
||||||
|
|
||||||
|
# ensure i3 packages are installed.
|
||||||
|
- include_tasks: setup-Debian.yml
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
|
# create i3 config file
|
||||||
|
- name: create i3 config folder
|
||||||
|
file:
|
||||||
|
path: ~/.config/i3/
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: register i3 config file
|
||||||
|
action: stat path="~/.config/i3/config"
|
||||||
|
register: "config_file"
|
||||||
|
|
||||||
|
- name: backup i3 config file
|
||||||
|
block:
|
||||||
|
|
||||||
|
- name: backup i3 config file if exists
|
||||||
|
copy:
|
||||||
|
src: ~/.config/i3/config
|
||||||
|
dest: ~/.config/i3/config.bak
|
||||||
|
remote_src: true
|
||||||
|
when: config_file.stat.exists
|
||||||
|
- name: create i3 config file
|
||||||
|
template:
|
||||||
|
src: config.j2
|
||||||
|
dest: ~/.config/i3/config
|
||||||
|
- name: check i3 config file
|
||||||
|
command: i3 -C
|
||||||
|
register: check_config_response
|
||||||
|
failed_when: check_config_response.stdout.find('ERROR') != -1
|
||||||
|
rescue:
|
||||||
|
|
||||||
|
- name: register backup i3 config file
|
||||||
|
action: stat path="~/.config/i3/config.bak"
|
||||||
|
register: "config_file_backup"
|
||||||
|
|
||||||
|
- name: restore backup file
|
||||||
|
copy:
|
||||||
|
src: ~/.config/i3/config.bak
|
||||||
|
dest: ~/.config/i3/config
|
||||||
|
remote_src: true
|
||||||
|
when: config_file_backup.stat.exists
|
7
tasks/setup-Debian.yml
Normal file
7
tasks/setup-Debian.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
- name: ensure i3 packages are installed.
|
||||||
|
apt:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: "present"
|
||||||
|
with_items: "{{ i3_packages }}"
|
||||||
|
become: true
|
32
tasks/variables.yml
Normal file
32
tasks/variables.yml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
# register os-specific variables
|
||||||
|
- name: register os-specific variables
|
||||||
|
include_vars: "{{ ansible_os_family }}.yml"
|
||||||
|
|
||||||
|
# i3 packages
|
||||||
|
- name: define i3_packages
|
||||||
|
set_fact:
|
||||||
|
i3_packages: "{{ __i3_packages | list }}"
|
||||||
|
when: i3_packages is not defined
|
||||||
|
|
||||||
|
- name: define i3_packages_extra
|
||||||
|
set_fact:
|
||||||
|
i3_packages: "{{ i3_packages | list + i3_packages_extra | list }}"
|
||||||
|
when: i3_packages_extra is defined
|
||||||
|
|
||||||
|
# i3 workspaces
|
||||||
|
- name: define i3_packages
|
||||||
|
set_fact:
|
||||||
|
i3_workspaces: "{{ __i3_workspaces | list }}"
|
||||||
|
when: i3_workspaces is not defined
|
||||||
|
|
||||||
|
# i3 keybindings
|
||||||
|
- name: define i3_packages
|
||||||
|
set_fact:
|
||||||
|
i3_keybindings: "{{ __i3_keybindings | list }}"
|
||||||
|
when: i3_keybindings is not defined
|
||||||
|
|
||||||
|
- name: define extra i3 keybindings
|
||||||
|
set_fact:
|
||||||
|
i3_keybindings: "{{ i3_keybindings | list + i3_keybindings_extra | list }}"
|
||||||
|
when: i3_keybindings_extra is defined
|
172
templates/config.j2
Normal file
172
templates/config.j2
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
set $term urxvt
|
||||||
|
|
||||||
|
# Font for window titles. Will also be used by the bar unless a different font
|
||||||
|
# is used in the bar {} block below.
|
||||||
|
font pango:monospace 8
|
||||||
|
focus_follows_mouse no
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec $term
|
||||||
|
bindsym $mod+Shift+Return exec $term -e tmux
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
|
||||||
|
# bindsym $mod+d exec rofi (a program launcher)
|
||||||
|
bindsym $mod+d exec rofi -show run
|
||||||
|
bindsym $mod+Shift+d exec rofi -show window
|
||||||
|
bindsym $mod+Shift+s exec rofi -show ssh
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+j focus left
|
||||||
|
bindsym $mod+k focus down
|
||||||
|
bindsym $mod+l focus up
|
||||||
|
bindsym $mod+odiaeresis focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+j move left
|
||||||
|
bindsym $mod+Shift+k move down
|
||||||
|
bindsym $mod+Shift+l move up
|
||||||
|
bindsym $mod+Shift+odiaeresis move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# split in horizontal orientation
|
||||||
|
bindsym $mod+h split h
|
||||||
|
|
||||||
|
# split in vertical orientation
|
||||||
|
bindsym $mod+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+w layout tabbed
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
|
||||||
|
# exit i3 (logs you out of your X session)
|
||||||
|
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
||||||
|
|
||||||
|
# Custom Bindings
|
||||||
|
bindsym $mod+Shift+x exec i3lock
|
||||||
|
|
||||||
|
# workspace variables
|
||||||
|
{% for workspace in i3_workspaces %}
|
||||||
|
set $workspace{{ workspace.id }} "{{ workspace.name }}"
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
{% for workspace in i3_workspaces %}
|
||||||
|
bindsym $mod+{{ workspace.id }} workspace $workspace{{ workspace.id }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
{% for workspace in i3_workspaces %}
|
||||||
|
bindsym $mod+Shift+{{ workspace.id }} move container to workspace $workspace{{ workspace.id }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for monitor in i3_monitors %}
|
||||||
|
{% for workspace in monitor.workspaces %}
|
||||||
|
workspace $workspace{{ workspace }} output {{ monitor.output }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for application in i3_applications %}
|
||||||
|
assign [class="{{ application.class }}"] $workspace{{ application.workspace }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
for_window [instance="dropdown"] floating enable
|
||||||
|
for_window [instance="dropdown"] resize set 1024 800
|
||||||
|
for_window [instance="dropdown"] move position center
|
||||||
|
for_window [instance="dropdown"] move scratchpad
|
||||||
|
exec --no-startup-id $term -name dropdown -e tmux
|
||||||
|
bindsym $mod+t [instance="dropdown"] scratchpad show; move position center
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# These bindings trigger as soon as you enter the resize mode
|
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym j resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym k resize grow height 10 px or 10 ppt
|
||||||
|
bindsym l resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym odiaeresis resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||||
|
# finds out, if available)
|
||||||
|
bar {
|
||||||
|
status_command i3status
|
||||||
|
}
|
||||||
|
|
||||||
|
# Background
|
||||||
|
{% if i3_desktop_env is defined %}
|
||||||
|
{% if i3_desktop_env.background is defined %}
|
||||||
|
exec_always feh --bg-scale {{ i3_desktop_env.background}}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Setup Monitors
|
||||||
|
exec xrandr {% for monitor in i3_monitors %} --output {{ monitor.output }} --mode {{ monitor.mode }} --pos {{ monitor.pos }} --rotate normal {% endfor %}
|
||||||
|
|
||||||
|
exec compton
|
||||||
|
|
||||||
|
# Start Default Applications
|
||||||
|
{% for application in i3_applications if application.on_startup %}
|
||||||
|
exec {{ application.name }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# Register Keybindings
|
||||||
|
{% for keybinding in i3_keybindings %}
|
||||||
|
bindsym {{ keybinding.key }} exec {{ keybinding.exec }}
|
||||||
|
{% endfor%}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
1.5:0f088850-bf54-474c-8c3e-1757635022f1
|
|
@ -0,0 +1 @@
|
||||||
|
1514602261
|
1
tests/.vagrant/machines/debian/virtualbox/creator_uid
Normal file
1
tests/.vagrant/machines/debian/virtualbox/creator_uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1000
|
1
tests/.vagrant/machines/debian/virtualbox/id
Normal file
1
tests/.vagrant/machines/debian/virtualbox/id
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0f088850-bf54-474c-8c3e-1757635022f1
|
1
tests/.vagrant/machines/debian/virtualbox/index_uuid
Normal file
1
tests/.vagrant/machines/debian/virtualbox/index_uuid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
62683cf08f3445f5b4d94e256a9b1fb6
|
27
tests/.vagrant/machines/debian/virtualbox/private_key
Normal file
27
tests/.vagrant/machines/debian/virtualbox/private_key
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAogF7HrxBOB46/Vif7FTfFP/+UI5jr+rHI5IHV63Dyu4cb/Lj
|
||||||
|
8w+jxsB8OcssKPv0xMTkmjZEwrU8hEd3ZThUjpkKaPo/AovlYNOEN5tDeRnmwOYI
|
||||||
|
236gvj8Gt6J+rFqROESPwsUCqcgVgm9CM6Uvz9bSguxw3CFNMaEOIj3V7sp09Cdu
|
||||||
|
lUbewS35P2120N3gveJTfYbUdv6uJN8mkuPiIFZkSTfrnFq+lSCFMXC7dvRej8QO
|
||||||
|
toV4w4tPEvhaydclI5+Jzy8+7fxippMyoel3LYeMCumyss6t2ULphwqa2JTU4++M
|
||||||
|
jx/5c3YydVsclQ4kZHrbFo2Qc3iusqsnN0vgRwIDAQABAoIBAG/lefamrJ1oM/Jc
|
||||||
|
zkjb7iGBF1TopG4TSWyGJlAnEv8NK9Me/tcZTFOxC5yXem7saAmovQTOyvt5Vs0+
|
||||||
|
13awS6caiZgskGzf15TjQ4Vs1lPE0h8WQ7PnaHs+6RLZR4kgHQGySWGL1eUS79hh
|
||||||
|
pGYriDST+l63lNRWpAzNYwe/kg4V6xAwCx8VMldkQyfsg927h3EdunuCRekrL2PQ
|
||||||
|
rbV0EtjguMHMYmQodfNgvtSzmsGwyPcFzc12A32GPdVasEzt0Nfg3dTCtna4Ytdh
|
||||||
|
zT2xqINEXFaTimNXE9zCZ79yOhU4u1OMUlWJJ8N+s6d7AoOIstVwtUxRwm2z4vzu
|
||||||
|
VVKtKQECgYEAzWaeXwCcCwZM5Hy7/fzePQay1HxSsNtFR0sMCyIBs35Gj8SMpgeQ
|
||||||
|
CaA5lN+IY2VxI2d/wsRB/mftStZfHAQTMPOdvubAKBt5cLvYiHXXt5ZDCLXU4lBh
|
||||||
|
FwUMgRDWTwt/nC8ouA4uwwdZXlG26J1K1BqLkbbXuJnlfQU74MifpQcCgYEAyeoz
|
||||||
|
EV9vsmS1kJ0wJ8uZFo06CkfEqXcAtsSmdFJHBG04PByrhQKAvoEEj5SvTl4c3RL8
|
||||||
|
kci7HpVtylmHa9CT+WdRrAUaoom4j6vtZANskus5P+QwDnn4GIshlO/mCdyQHI08
|
||||||
|
VwKF4yLn3UzPNQcpW9BYTedbLpLhRPgixEK0WsECgYEAm3fR5ayrb7jMGKHFFWEB
|
||||||
|
wgVA9I5JdK3zSRwnuIF78iVhOU6W+tB8mJybGPD85ecRdK/RR1WPcgWt2VhbUvRO
|
||||||
|
pl2vB6DWz0TEbazxH5C6v63PfVdMFCSs6GSc61AYNmpIo6oaUv4BLQNyBG8rV/Q+
|
||||||
|
gD67Z4aSz5pE1pVQljqkg58CgYAJg4+EcgrBTR2BAucR+PXtqhniAh+yHHlcI0f0
|
||||||
|
kyvleX/81Rz/125Zi5q7aTYZazXQ9OQRunOWrVPPBQjse5d9WPDwOg1XO0YG/wLg
|
||||||
|
g4jKI2s/J3FcPUMDZQrgCa29KTdhIQaG0web/DkQpF3fEcdRHDAM+6nAOAuFRGve
|
||||||
|
84WsAQKBgGVDq2zYykg92VrauW1kS7hsQtNQAfQT4a0oVrcaiWUcO/8JHRpv+yAy
|
||||||
|
68tE8U0bhR1oTzDojCFryCj+YJgSKdzzGd9fUreN29YGudkp7gF1AJ+UbenOcaZe
|
||||||
|
fTDeEXhYTN3+GeV1yNOS5Y+u3+Iy6WQLgZSLIeiHPd+SxZRCdXWv
|
||||||
|
-----END RSA PRIVATE KEY-----
|
1
tests/.vagrant/machines/debian/virtualbox/synced_folders
Normal file
1
tests/.vagrant/machines/debian/virtualbox/synced_folders
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"rsync":{"/vagrant":{"type":"rsync","guestpath":"/vagrant","hostpath":"/home/owe/workspace/private/ansible/i3/tests","disabled":false,"__vagrantfile":true,"owner":"vagrant","group":"vagrant"}}}
|
|
@ -0,0 +1 @@
|
||||||
|
1.5:297c8844-ecdf-472a-beb7-07f31a0fa84b
|
|
@ -0,0 +1 @@
|
||||||
|
1514602561
|
1
tests/.vagrant/machines/xenial/virtualbox/creator_uid
Normal file
1
tests/.vagrant/machines/xenial/virtualbox/creator_uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1000
|
1
tests/.vagrant/machines/xenial/virtualbox/id
Normal file
1
tests/.vagrant/machines/xenial/virtualbox/id
Normal file
|
@ -0,0 +1 @@
|
||||||
|
297c8844-ecdf-472a-beb7-07f31a0fa84b
|
1
tests/.vagrant/machines/xenial/virtualbox/index_uuid
Normal file
1
tests/.vagrant/machines/xenial/virtualbox/index_uuid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
7a8b283b91ff4dbfa3bad0a5c7cde793
|
27
tests/.vagrant/machines/xenial/virtualbox/private_key
Normal file
27
tests/.vagrant/machines/xenial/virtualbox/private_key
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpAIBAAKCAQEA4hhlpOQsFNNy6VIjD84ov2wUTNriFwKtzpYJvlgIV5JcXDaz
|
||||||
|
FLGKAK/4pQWFrGqNuYk85GRNUXskonZFgVG13vfp2Tpna7kmUrPJ0JRbDEKVXsiR
|
||||||
|
uz2qtCkGTZtx2IUaY/eNHluBbfWlYx1bIJ9onHktA/usKwZUyejv0U2LVwmMhUEI
|
||||||
|
AthSfJiq7VnrFNuhSitjF6P5W7KKQXNvsZbvQF7An+klj1AJWnwXGjVKu5kRFn14
|
||||||
|
APlry/3eFfu9IoIgW9Wd0SmZA9XkV1pYV0pm5Sydj2jkZpGRZB26ZyxN///+V6md
|
||||||
|
1bdi5b7B9YLQ2EDJxRDrBodV06QlTE16n1crowIDAQABAoIBAHjogRrP5n7woOgD
|
||||||
|
Q7rFDedoPebnuraBeT8b33QKEdP68idiHRx44QsDD933+Qc+KDJLIOQme26SgwHa
|
||||||
|
a8r/TlpBi63eXMYvyj255bgETjhdNxHsAnr2PF6B/dvsv9IBRB6nmLDeUHXkQqCh
|
||||||
|
Z0Un2kKrTpZttSGBDkC3r9/nLxfIgvx/563HMAqDXvCQ3NucfrVKS/c0C7vmXZ4d
|
||||||
|
G49VWFV34er7x08X9DO4kgBKewwANTQ7uLVeHNJn0IknQA3jhna6S2xkPE74dgOn
|
||||||
|
TIO2eip6reiZZxZY8JnhHkUffNMTGuICKoPs/iqtSIQosJczl4oaf/MPmf33zrH8
|
||||||
|
AVnkC9ECgYEA+dCZGGSOo4aontaj5LHmEaFD6IJooIg7grUMiGuNLXPQIhWj9nEm
|
||||||
|
HSg4ASZQJZOe6pGrV1BYhFRlI4m3r09CYwBMIoAFeVm8rgRc9d8VQ027+Fo97q9Z
|
||||||
|
pvxdFgO5009xpfx5+Zz+GhNivw6isniaUt264Qkq8HHL6n0A4wM/kjsCgYEA57F1
|
||||||
|
GlR0hKmjsLIQaE6R4cc9Ww96vjSMS90cc4YMRa7IUIWgd0l4V2J2amaZ4JmiCPnv
|
||||||
|
HL6w4o4GJJR2iKJkdOrPDkVNlCtaVsqvmvg39Z4UtzYQYZFwgPlJ+PcaBb2rB7bE
|
||||||
|
7xHjs2z4UYRHM4VY6iunkjqL52mPRIxTnd7UjbkCgYEAwcroeNvJK2IS/OVVTtwS
|
||||||
|
tip8G6rOr3n/cG4ywsFsS45EL6zJ/SvZfVTt3TZzhjL2XNGUMa/Kex1dOCxlqkG6
|
||||||
|
JkLczQazOGg8zmHkG3hrbkKnRwn6cWbmDXxIWgOZ7Cr85t7tYI5BMMlJGR2paPnV
|
||||||
|
/eK0Tk5mWRBuOAGw5mpmrnECgYBNEOrZqjPjmKWY9XGdsFy309TlwB1cvQ/ZgB+h
|
||||||
|
kXnth7ibiAcbBnYf4uFufNg8K/4IrFHLpuYhRYpninZu9k0h0qSyo3yth0oSSnLk
|
||||||
|
wiGi8kUDt9j1CzJ3w/PF+zNNq4wDEdkpiDLMELf8LVqdmYI8ye6AJjc47xS3gVGi
|
||||||
|
1mavCQKBgQCjqCAb8pJFeuxea6+02CBKuN4uKRKZYIF/QH4Ep/lhCiYGBrQeDX1g
|
||||||
|
XZV9gL5n8T/uQdTxfRuR28paz0OwFsELIWTuYdAc0qe8smuF64sqEhSF1mKfX42T
|
||||||
|
M1n43ssU58AYJNYR8Vl44oQZ0eAI94nnl9jeK8ELzbqsZ/ojGU/B/A==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
1
tests/.vagrant/machines/xenial/virtualbox/synced_folders
Normal file
1
tests/.vagrant/machines/xenial/virtualbox/synced_folders
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"virtualbox":{"/vagrant":{"guestpath":"/vagrant","hostpath":"/home/owe/workspace/private/ansible/i3/tests","disabled":false,"__vagrantfile":true}}}
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Generated by Vagrant
|
||||||
|
|
||||||
|
xenial ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200 ansible_ssh_user='ubuntu' ansible_ssh_private_key_file='/home/owe/workspace/private/ansible/i3/tests/.vagrant/machines/xenial/virtualbox/private_key'
|
||||||
|
debian ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='/home/owe/workspace/private/ansible/i3/tests/.vagrant/machines/debian/virtualbox/private_key'
|
||||||
|
|
||||||
|
[all]
|
||||||
|
debian
|
||||||
|
xenial
|
30
tests/Vagrantfile
vendored
Normal file
30
tests/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
|
||||||
|
config.vm.define "debian" do |web|
|
||||||
|
web.vm.box = "debian/stretch64"
|
||||||
|
|
||||||
|
web.vm.provider "virtualbox" do |vb|
|
||||||
|
vb.memory = "512"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.define "xenial" do |web|
|
||||||
|
web.vm.box = "ubuntu/xenial64"
|
||||||
|
|
||||||
|
web.vm.provider "virtualbox" do |vb|
|
||||||
|
vb.memory = "512"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provision :ansible do |ansible|
|
||||||
|
ansible.playbook = "playbook.yml"
|
||||||
|
ansible.groups = {
|
||||||
|
"all" => ["debian", "xenial"]
|
||||||
|
}
|
||||||
|
ansible.raw_arguments = ["-u vagrant"]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
52
tests/playbook.yml
Normal file
52
tests/playbook.yml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
user: vagrant
|
||||||
|
|
||||||
|
vars:
|
||||||
|
|
||||||
|
desktop_env:
|
||||||
|
background: "~/Bilder/bg/background.jpg"
|
||||||
|
|
||||||
|
i3_packages_extra:
|
||||||
|
- ranger
|
||||||
|
|
||||||
|
i3_keybindings_extra:
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (mute/unmute)
|
||||||
|
key: $mod+F12
|
||||||
|
exec: --no-startup-id amixer sset Master toggle
|
||||||
|
- keybinding:
|
||||||
|
name: Volue (default)
|
||||||
|
key: $mod+Shift+F12
|
||||||
|
exec: --no-startup-id amixer sset Master 40%
|
||||||
|
|
||||||
|
i3_monitors:
|
||||||
|
- monitor:
|
||||||
|
id: 1
|
||||||
|
output: "VGA-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "0x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [1, 2, 3, 4, 5, 6]
|
||||||
|
- monitor:
|
||||||
|
id: 2
|
||||||
|
output: "HDMI-1"
|
||||||
|
mode: "1920x1080"
|
||||||
|
pos: "1920x0"
|
||||||
|
rotate: "normal"
|
||||||
|
workspaces: [7, 8, 9, 0]
|
||||||
|
|
||||||
|
i3_applications:
|
||||||
|
- application:
|
||||||
|
class: "Firefox"
|
||||||
|
name: "firefox"
|
||||||
|
workspace: 1
|
||||||
|
on_startup: false
|
||||||
|
- application:
|
||||||
|
class: "Code"
|
||||||
|
name: "code"
|
||||||
|
workspace: 7
|
||||||
|
on_startup: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- i3
|
8
vars/Debian.yml
Normal file
8
vars/Debian.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
__i3_packages:
|
||||||
|
- i3
|
||||||
|
- rxvt-unicode
|
||||||
|
- rofi
|
||||||
|
- compton
|
||||||
|
- feh
|
||||||
|
- tmux
|
46
vars/main.yml
Normal file
46
vars/main.yml
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
__i3_workspaces:
|
||||||
|
- workspace:
|
||||||
|
id: 1
|
||||||
|
name: "01: "
|
||||||
|
- workspace:
|
||||||
|
id: 2
|
||||||
|
name: "02: "
|
||||||
|
- workspace:
|
||||||
|
id: 3
|
||||||
|
name: "03: "
|
||||||
|
- workspace:
|
||||||
|
id: 4
|
||||||
|
name: "04: "
|
||||||
|
- workspace:
|
||||||
|
id: 5
|
||||||
|
name: "05: "
|
||||||
|
- workspace:
|
||||||
|
id: 6
|
||||||
|
name: "06: "
|
||||||
|
- workspace:
|
||||||
|
id: 7
|
||||||
|
name: "07: "
|
||||||
|
- workspace:
|
||||||
|
id: 8
|
||||||
|
name: "08: "
|
||||||
|
- workspace:
|
||||||
|
id: 9
|
||||||
|
name: "09: "
|
||||||
|
- workspace:
|
||||||
|
id: 0
|
||||||
|
name: "10: "
|
||||||
|
|
||||||
|
__i3_keybindings:
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (-5%)
|
||||||
|
key: XF86AudioLowerVolume
|
||||||
|
exec: --no-startup-id amixer sset Master 5%-
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (+5%)
|
||||||
|
key: XF86AudioRaiseVolume
|
||||||
|
exec: --no-startup-id amixer sset Master 5%+
|
||||||
|
- keybinding:
|
||||||
|
name: Volume (mute/unmute)
|
||||||
|
key: XF86AudioMute
|
||||||
|
exec: --no-startup-id amixer sset Master toggle
|
Loading…
Reference in a new issue