From 3e65d1ae07bd4b3313b42766a8b5fb9f315bb1eb Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 19 Apr 2022 21:40:54 +0700 Subject: [PATCH] initial commit, docker playbook --- .gitignore | 2 + README.md | 21 +++++++ ansible-docker-ubuntu/playbook.yml | 12 ++++ .../roles/basic/tasks/main.yml | 53 +++++++++++++++++ .../roles/docker-compose/tasks/main.yml | 38 +++++++++++++ .../roles/docker/tasks/main.yml | 57 +++++++++++++++++++ .../roles/userconf/tasks/main.yml | 39 +++++++++++++ ansible-docker-ubuntu/vars.sample.yml | 3 + 8 files changed, 225 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ansible-docker-ubuntu/playbook.yml create mode 100644 ansible-docker-ubuntu/roles/basic/tasks/main.yml create mode 100644 ansible-docker-ubuntu/roles/docker-compose/tasks/main.yml create mode 100644 ansible-docker-ubuntu/roles/docker/tasks/main.yml create mode 100644 ansible-docker-ubuntu/roles/userconf/tasks/main.yml create mode 100644 ansible-docker-ubuntu/vars.sample.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40ad2e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# secret vars +vars.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5415764 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Ansible Playbooks + +A collection of Ansible playbooks I use to provision things. + +## Ansible Docker Ubuntu +Ansible playbook to provision an standart Ubuntu LTS server VM. + +- update and upgrade repo packages +- install basic necessities +- install `docker` +- install `docker compose` +- copy frequently used config files + +### Setup +Copy or rename `vars.samle.yml` to `vars.yml` and set: +- **regular_user**: Default username + +### Run on a single host +``` +ansible-playbook -i $hostname, -K ansible-docker-ubuntu/playbook.yml +``` diff --git a/ansible-docker-ubuntu/playbook.yml b/ansible-docker-ubuntu/playbook.yml new file mode 100644 index 0000000..ada568e --- /dev/null +++ b/ansible-docker-ubuntu/playbook.yml @@ -0,0 +1,12 @@ +--- + +- name: install basic docker environment + hosts: all + gather_facts: true + vars_files: + - vars.yml + roles: + - basic + - docker + - docker-compose + - userconf diff --git a/ansible-docker-ubuntu/roles/basic/tasks/main.yml b/ansible-docker-ubuntu/roles/basic/tasks/main.yml new file mode 100644 index 0000000..df2f982 --- /dev/null +++ b/ansible-docker-ubuntu/roles/basic/tasks/main.yml @@ -0,0 +1,53 @@ +--- + +- block: + - name: "update cache" + apt: + update_cache: yes + cache_valid_time: 3600 + + - name: "upgrade all" + apt: + name: "*" + state: latest + register: upgraded + + - name: "install basic packages" + apt: + name: "{{ packages }}" + state: present + vars: + packages: + - bmon + - build-essential + - curl + - htop + - iftop + - iotop + - mediainfo + - mlocate + - ranger + - rsync + - tmux + - trash-cli + - tree + - unzip + - vim + - whois + - zip + - zsh + + - name: autoremove + apt: + autoremove: yes + + - name: autoclean cache + apt: + autoclean: yes + + - name: reboot the server + reboot: + when: upgraded is changed + + become: true + become_user: root diff --git a/ansible-docker-ubuntu/roles/docker-compose/tasks/main.yml b/ansible-docker-ubuntu/roles/docker-compose/tasks/main.yml new file mode 100644 index 0000000..c8e05ad --- /dev/null +++ b/ansible-docker-ubuntu/roles/docker-compose/tasks/main.yml @@ -0,0 +1,38 @@ +--- + +- block: + - name: "get newest release" + uri: + url: https://api.github.com/repos/docker/compose/releases/latest + return_content: true + register: json_reponse + + - name: "get os" + command: uname -s + register: os + + - name: "get arch" + command: uname -m + register: arch + + - name: "create cli-plugins folder" + file: + path: /usr/local/lib/docker/cli-plugins + state: directory + + - name: "download latest docker-compose" + get_url: + url: "https://github.com/docker/compose/releases/download/{{ json_reponse.json.tag_name }}/docker-compose-{{ os.stdout }}-{{ arch.stdout }}" + dest: /usr/local/lib/docker/cli-plugins/docker-compose + mode: '755' + + - name: "get arch" + command: docker compose version + register: compose + + - name: "latest docker-compose version" + debug: + msg: "installed docker compose version: {{ compose.stdout }}" + + become: true + become_user: root diff --git a/ansible-docker-ubuntu/roles/docker/tasks/main.yml b/ansible-docker-ubuntu/roles/docker/tasks/main.yml new file mode 100644 index 0000000..e042f07 --- /dev/null +++ b/ansible-docker-ubuntu/roles/docker/tasks/main.yml @@ -0,0 +1,57 @@ +--- + +- block: + - name: "install docker dependencies" + apt: + name: "{{ packages }}" + state: present + vars: + packages: + - ca-certificates + - curl + - gnupg + - lsb-release + + - name: "add docker pgp key" + apt_key: + state: present + url: https://download.docker.com/linux/ubuntu/gpg + + - name: "get release" + command: lsb_release -cs + register: release + + - name: add docker repository to apt + apt_repository: + repo: deb https://download.docker.com/linux/ubuntu {{ release.stdout }} stable + state: present + + - name: "install docker dependencies" + apt: + update_cache: yes + name: "{{ packages }}" + state: present + vars: + packages: + - docker-ce + - docker-ce-cli + - containerd.io + + - name: "ensure docker group exists" + group: + name: docker + state: present + + - name: "add user to group" + user: + name: "{{ regular_user }}" + groups: docker + append: yes + + - name: "start docker if needed" + service: + name: docker + state: started + + become: true + become_user: root diff --git a/ansible-docker-ubuntu/roles/userconf/tasks/main.yml b/ansible-docker-ubuntu/roles/userconf/tasks/main.yml new file mode 100644 index 0000000..927fe2b --- /dev/null +++ b/ansible-docker-ubuntu/roles/userconf/tasks/main.yml @@ -0,0 +1,39 @@ +--- + +- name: "create user folders" + file: + path: "{{ item }}" + state: directory + loop: + - bin + - docker + - docker + - logs + - script + +- name: "add ignore" + lineinfile: + create: true + path: .gitignore + line: .cfg + +- name: "clone zsh theme" + become: true + git: + repo: https://github.com/romkatv/powerlevel10k.git + dest: /usr/share/zsh-theme-powerlevel10k + +- name: "clone dotfiles" + git: + repo: https://git.oikeo-projects.com/simon/dotfiles.git + dest: .cfg + bare: true + +- name: "checkout dotfiles" + shell: git --git-dir=.cfg --work-tree=$HOME checkout + +- name: change user shell to zsh + become: true + user: + name: "{{ regular_user }}" + shell: /bin/zsh diff --git a/ansible-docker-ubuntu/vars.sample.yml b/ansible-docker-ubuntu/vars.sample.yml new file mode 100644 index 0000000..ba9128e --- /dev/null +++ b/ansible-docker-ubuntu/vars.sample.yml @@ -0,0 +1,3 @@ +--- + +regular_user: username