Second commit
This commit is contained in:
commit
33ed1c69f0
24 changed files with 435 additions and 0 deletions
106
.gitignore
vendored
Normal file
106
.gitignore
vendored
Normal file
|
@ -0,0 +1,106 @@
|
|||
*.retry
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# celery beat schedule file
|
||||
celerybeat-schedule
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
4
Ansible/pleasure.yml
Normal file
4
Ansible/pleasure.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
- hosts: local
|
||||
become: yes
|
||||
roles:
|
||||
- base
|
13
Ansible/roles/base/.yamllint
Normal file
13
Ansible/roles/base/.yamllint
Normal file
|
@ -0,0 +1,13 @@
|
|||
extends: default
|
||||
|
||||
rules:
|
||||
braces:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
brackets:
|
||||
max-spaces-inside: 1
|
||||
level: error
|
||||
line-length: disable
|
||||
# NOTE(retr0h): Templates no longer fail this lint rule.
|
||||
# Uncomment if running old Molecule templates.
|
||||
# truthy: disable
|
5
Ansible/roles/base/defaults/fedora.yml
Normal file
5
Ansible/roles/base/defaults/fedora.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
common_repo_package_list:
|
||||
- git
|
||||
- fish
|
||||
- vim-enhanced
|
7
Ansible/roles/base/defaults/main.yml
Normal file
7
Ansible/roles/base/defaults/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
user: elijah
|
||||
user_home: "/home/{{ user }}"
|
||||
workdir_path: "{{ user_home }}/sandbox"
|
||||
virtualenvs_path: "{{ user_home }}/.virtualenvs"
|
||||
|
||||
omf_git_repo: https://github.com/oh-my-fish/oh-my-fish
|
5
Ansible/roles/base/defaults/ubuntu.yml
Normal file
5
Ansible/roles/base/defaults/ubuntu.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
common_repo_package_list:
|
||||
- git
|
||||
- fish
|
||||
- vim
|
1
Ansible/roles/base/handlers/main.yml
Normal file
1
Ansible/roles/base/handlers/main.yml
Normal file
|
@ -0,0 +1 @@
|
|||
---
|
64
Ansible/roles/base/meta/main.yml
Normal file
64
Ansible/roles/base/meta/main.yml
Normal file
|
@ -0,0 +1,64 @@
|
|||
---
|
||||
galaxy_info:
|
||||
author: Elijah Lazkani
|
||||
description: DevOps Engineer
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
|
||||
# Some suggested licenses:
|
||||
# - BSD (default)
|
||||
# - MIT
|
||||
# - GPLv2
|
||||
# - GPLv3
|
||||
# - Apache
|
||||
# - CC-BY
|
||||
license: BSD
|
||||
|
||||
min_ansible_version: 2.5
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
# Optionally specify the branch Galaxy will use when accessing the GitHub
|
||||
# repo for this role. During role install, if no tags are available,
|
||||
# Galaxy will use this branch. During import Galaxy will access files on
|
||||
# this branch. If Travis integration is configured, only notifications for this
|
||||
# branch will be accepted. Otherwise, in all cases, the repo's default branch
|
||||
# (usually master) will be used.
|
||||
# github_branch:
|
||||
|
||||
#
|
||||
# platforms is a list of platforms, and each platform has a name and a list of versions.
|
||||
#
|
||||
# platforms:
|
||||
# - name: Fedora
|
||||
# versions:
|
||||
# - all
|
||||
# - 25
|
||||
# - name: SomePlatform
|
||||
# versions:
|
||||
# - all
|
||||
# - 1.0
|
||||
# - 7
|
||||
# - 99.99
|
||||
platforms:
|
||||
- name: Febora
|
||||
versions:
|
||||
- 28
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- bionic
|
||||
|
||||
#galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
|
||||
#dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
14
Ansible/roles/base/molecule/default/Dockerfile.j2
Normal file
14
Ansible/roles/base/molecule/default/Dockerfile.j2
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Molecule managed
|
||||
|
||||
{% if item.registry is defined %}
|
||||
FROM {{ item.registry.url }}/{{ item.image }}
|
||||
{% else %}
|
||||
FROM {{ item.image }}
|
||||
{% endif %}
|
||||
|
||||
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; \
|
||||
elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi
|
16
Ansible/roles/base/molecule/default/INSTALL.rst
Normal file
16
Ansible/roles/base/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
|
22
Ansible/roles/base/molecule/default/molecule.yml
Normal file
22
Ansible/roles/base/molecule/default/molecule.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint:
|
||||
name: yamllint
|
||||
platforms:
|
||||
- name: Fedora
|
||||
image: fedora:28
|
||||
- name: Ubuntu
|
||||
image: ubuntu:bionic
|
||||
provisioner:
|
||||
name: ansible
|
||||
lint:
|
||||
name: ansible-lint
|
||||
scenario:
|
||||
name: default
|
||||
verifier:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
11
Ansible/roles/base/molecule/default/playbook.yml
Normal file
11
Ansible/roles/base/molecule/default/playbook.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
pre_tasks:
|
||||
- name: Create user "{{ user }}"
|
||||
user:
|
||||
name: "{{ user }}"
|
||||
home: "{{ user_home }}"
|
||||
state: present
|
||||
roles:
|
||||
- role: base
|
14
Ansible/roles/base/molecule/default/tests/test_default.py
Normal file
14
Ansible/roles/base/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'
|
14
Ansible/roles/base/tasks/common.yml
Normal file
14
Ansible/roles/base/tasks/common.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
- name: Create work directory
|
||||
file:
|
||||
path: "{{ workdir_path }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
state: directory
|
||||
|
||||
- name: Create virtualenvs directory
|
||||
file:
|
||||
path: "{{ virtualenvs_path }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
state: directory
|
5
Ansible/roles/base/tasks/fedora.yml
Normal file
5
Ansible/roles/base/tasks/fedora.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
- name: Install Fedora packages
|
||||
dnf:
|
||||
name: "{{ common_repo_package_list }}"
|
||||
state: latest
|
25
Ansible/roles/base/tasks/fish.yml
Normal file
25
Ansible/roles/base/tasks/fish.yml
Normal file
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
- name: Download Oh My Fish
|
||||
git:
|
||||
repo: "{{ omf_git_repo }}"
|
||||
dest: "{{ workdir_path }}/omf"
|
||||
become: yes
|
||||
become_user: "{{ user }}"
|
||||
|
||||
- name: Set user's default shell
|
||||
user:
|
||||
name: "{{ user }}"
|
||||
shell: /usr/bin/fish
|
||||
|
||||
- stat:
|
||||
path: "{{ user_home }}/.local/share/omf"
|
||||
register: omf_config_stat_result
|
||||
|
||||
- name: Install Oh My Fish
|
||||
shell: ./install --noninteractive
|
||||
args:
|
||||
executable: /usr/bin/fish
|
||||
chdir: "{{ workdir_path }}/omf/bin/"
|
||||
when: omf_config_stat_result.stat.exists == False
|
||||
become: yes
|
||||
become_user: "{{ user }}"
|
30
Ansible/roles/base/tasks/main.yml
Normal file
30
Ansible/roles/base/tasks/main.yml
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
- name: gather os specific variables
|
||||
include_vars: "{{ item }}"
|
||||
with_first_found:
|
||||
- "../defaults/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | int }}.yml"
|
||||
- "../defaults/{{ ansible_distribution | lower }}.yml"
|
||||
- "../defaults/{{ ansible_os_family | lower }}.yml"
|
||||
- "../defaults/defaults.yml"
|
||||
tags: variables
|
||||
|
||||
- include_tasks: "{{ item }}"
|
||||
with_first_found:
|
||||
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | int }}.yml"
|
||||
- "{{ ansible_distribution | lower }}.yml"
|
||||
- "{{ ansible_os_family | lower }}.yml"
|
||||
- defaults.yml
|
||||
|
||||
- name: Get passwd file
|
||||
shell: grep -r "^{{ user }}" /etc/passwd
|
||||
register: grep_user
|
||||
failed_when: false
|
||||
|
||||
- block:
|
||||
- name: Apply common tasks
|
||||
include_tasks: common.yml
|
||||
|
||||
- name: Applying fish tasks
|
||||
include_tasks: fish.yml
|
||||
|
||||
when: grep_user.stdout
|
5
Ansible/roles/base/tasks/ubuntu.yml
Normal file
5
Ansible/roles/base/tasks/ubuntu.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
- name: Install Ubuntu packages
|
||||
apt:
|
||||
name: "{{ common_repo_package_list }}"
|
||||
state: latest
|
1
Ansible/roles/base/vars/main.yml
Normal file
1
Ansible/roles/base/vars/main.yml
Normal file
|
@ -0,0 +1 @@
|
|||
---
|
25
LICENSE
Normal file
25
LICENSE
Normal file
|
@ -0,0 +1,25 @@
|
|||
BSD 2-Clause License
|
||||
|
||||
Copyright (c) 2018, Elijah Lazkani
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
4
README.md
Normal file
4
README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Solid State Subether
|
||||
This is my personal repository for bootstrapping machines with [Ansible](https://www.ansible.com) for my own use.
|
||||
|
||||
These types of repositories are generally called dotfile repositories.
|
39
bootstrap.sh
Executable file
39
bootstrap.sh
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script will bootstrap the machine using Ansible
|
||||
# Copyright (C) 2018 Elijah Lazkani
|
||||
|
||||
playbook=$1
|
||||
|
||||
function _find_ansible() {
|
||||
|
||||
command ansible-playbook -h > /dev/null 2>&1
|
||||
if [[ $? -ne 0 ]];
|
||||
then
|
||||
echo "Ansible not found..."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function _ansible () {
|
||||
|
||||
_find_ansible
|
||||
|
||||
echo "Bootstrapping Ansible"
|
||||
if [[ $playbook ]];
|
||||
then
|
||||
if [ ! -f inventory ];
|
||||
then
|
||||
echo "Inventory file not found"
|
||||
touch inventory
|
||||
fi
|
||||
|
||||
echo "Sit down, relax and kick your legs up, fun is about to begin..."
|
||||
ansible-playbook -i inventory Ansible/$playbook --ask-sudo-pass
|
||||
else
|
||||
echo "Choose a profile to run from the list below:"
|
||||
find Ansible/ -maxdepth 1 -name "*.yml" -type f -printf " - %f\n"
|
||||
fi
|
||||
}
|
||||
|
||||
_ansible
|
3
requirements/development.txt
Normal file
3
requirements/development.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
ansible
|
||||
molecule
|
||||
docker-py
|
2
requirements/requirements.txt
Normal file
2
requirements/requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
ansible
|
||||
python-dnf
|
Loading…
Reference in a new issue