From 046c8b34d77e76bf2410ab42f75284ff436e90c1 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 11:57:57 -0700 Subject: [PATCH 01/14] [WIP] OSX Support --- .travis.yml | 35 +++++++++++++++++++++--------- Makefile | 60 ++++++++++++++++++++++++++++++++++++++++----------- README.md | 3 ++- meta/main.yml | 1 + 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index f1d590b..6e98e43 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,33 @@ --- -dist: trusty -sudo: required +language: generic matrix: fast_finish: true + include: + - os: linux + env: IMAGE=centos7 + dist: trusty + services: + - docker + - os: linux + env: IMAGE=loki + dist: trusty + services: + - docker + - os: linux + env: IMAGE=trusty + dist: trusty + services: + - docker + - os: linux + env: IMAGE=xenial + dist: trusty + services: + - docker + - os: osx + sudo: required -services: - - docker - -env: - matrix: # each entry is its own run - - IMAGE: centos7 - - IMAGE: xenial - +install: make install script: make clean test notifications: diff --git a/Makefile b/Makefile index 464b5e1..fe6c684 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,65 @@ #!/usr/bin/make -f -ROLE_NAME:=go-dev - .DEFAULT_GOAL := apply .PHONY: apply DEFAULT_IMAGE:=centos7 IMAGE:=$(shell echo "$${IMAGE:-$(DEFAULT_IMAGE)}") -clean: +OS:=$(shell uname | tr '[:upper:]' '[:lower:]') + +# LINUX ONLY ------------------------------------------------------------------ +ifeq ($(OS),linux) +clean-linux: @docker-compose rm -fs $(IMAGE) -start: +start-linux: @docker-compose up -d $(IMAGE) -shell: start - @docker exec -it $(IMAGE) bash - -test: start +test-linux: start @docker exec $(IMAGE) ansible --version @docker exec $(IMAGE) wait-for-boot - @docker exec $(IMAGE) ansible-galaxy install -r /etc/ansible/roles/default/tests/requirements.yml @docker exec $(IMAGE) env ANSIBLE_FORCE_COLOR=yes \ ansible-playbook /etc/ansible/roles/default/tests/playbook.yml -apply: - @mkdir -p target/ .ansible/galaxy-roles - @rsync --delete --exclude=.ansible/galaxy-roles -a ./ .ansible/galaxy-roles/$(ROLE_NAME)/ +install-linux: + @true + +install: install-linux +clean: clean-linux +start: start-linux +test: test-linux + +shell: start + @docker exec -it $(IMAGE) bash +endif + +# OSX ONLY -------------------------------------------------------------------- +ifeq ($(OS),darwin) +clean-osx: + @true + +start-osx: + @true + +test-osx: start + @mkdir -p .ansible/galaxy-roles + @rsync --delete --exclude=.ansible/galaxy-roles -a ./ .ansible/galaxy-roles/default/ @ansible-galaxy install -p .ansible/galaxy-roles -r requirements.yml - @ansible-playbook -i localhost, --ask-become-pass local.yml + @ansible-playbook -c local -i 127.0.0.1, tests/playbook.yml + +install-osx: + @brew install python@2 >/dev/null + @brew link --overwrite python >/dev/null + @brew install ansible >/dev/null + @echo "Dumping Debug Information..." + @echo "Python Version: $$(python --version)" + @echo "pip Version: $$(pip --version)" + @echo "Ansible Version: $$(ansible --version)" + +install: install-osx + +clean: clean-osx +start: start-osx +test: test-osx +endif diff --git a/README.md b/README.md index 0a31cc8..7eecd89 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ Available on Ansible Galaxy at [`naftulikay.go-dev`][galaxy]. ## Requirements -Currently only Linux and the amd64 architecture are supported, contributions welcome. +Supporting (under test) Ubuntu 14.04, 16.04, CentOS, and OSX. Only amd64 architecture is supported for now. Other +Unix-like environments may work but are not under test. ## Role Variables diff --git a/meta/main.yml b/meta/main.yml index e07a5aa..a268a03 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -15,6 +15,7 @@ galaxy_info: versions: - trusty - xenial + - name: MacOSX galaxy_tags: - go From dd7f16c054ef45bb4c8c5dccf0251250df5b9a27 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 12:01:04 -0700 Subject: [PATCH 02/14] fix for linux hosts --- Makefile | 3 ++- README.md | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index fe6c684..77277b4 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ start-linux: test-linux: start @docker exec $(IMAGE) ansible --version @docker exec $(IMAGE) wait-for-boot + @docker exec $(IMAGE) ansible-galaxy install -r /etc/ansible/roles/default/tests/requirements.yml @docker exec $(IMAGE) env ANSIBLE_FORCE_COLOR=yes \ ansible-playbook /etc/ansible/roles/default/tests/playbook.yml @@ -45,7 +46,7 @@ start-osx: test-osx: start @mkdir -p .ansible/galaxy-roles @rsync --delete --exclude=.ansible/galaxy-roles -a ./ .ansible/galaxy-roles/default/ - @ansible-galaxy install -p .ansible/galaxy-roles -r requirements.yml + @ansible-galaxy install -p .ansible/galaxy-roles -r tests/requirements.yml @ansible-playbook -c local -i 127.0.0.1, tests/playbook.yml install-osx: diff --git a/README.md b/README.md index 7eecd89..9ff63da 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Available on Ansible Galaxy at [`naftulikay.go-dev`][galaxy]. ## Requirements -Supporting (under test) Ubuntu 14.04, 16.04, CentOS, and OSX. Only amd64 architecture is supported for now. Other -Unix-like environments may work but are not under test. +Supporting (under test) Ubuntu 14.04, 16.04, elementary OS Loki, CentOS, and OSX. Only amd64 architecture is supported +for now. Other Unix-like environments may work but are not under test. ## Role Variables From f77540d45ca41f90f0786f6c05c8d31439259670 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 12:15:08 -0700 Subject: [PATCH 03/14] patch for ubuntu children --- tasks/system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/system.yml b/tasks/system.yml index e578d31..fbe8394 100644 --- a/tasks/system.yml +++ b/tasks/system.yml @@ -6,7 +6,7 @@ - name: update apt cache apt: update_cache=true cache_valid_time=3600 become: true - when: os_name == "ubuntu" + when: is_ubuntu_derivative - name: install git package: name=git state=present From 6e3c12331223c7f2baac88b87fffd11a43a16a9f Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 12:16:23 -0700 Subject: [PATCH 04/14] fix for sudo in test playbook --- tests/playbook.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/playbook.yml b/tests/playbook.yml index 013f19a..4f87cdf 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -1,6 +1,7 @@ --- - name: setup hosts: localhost + become: true vars: container_user: vagrant tasks: From 23ad322e214fe89fcbfde11c3655eff507ceb588 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 12:50:01 -0700 Subject: [PATCH 05/14] pls --- docker-compose.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d69e4be..dc7d06f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,6 +35,19 @@ services: - ./tests/ansible.cfg:/etc/ansible/ansible.cfg:ro stop_grace_period: 1s + trusty: + container_name: trusty + image: naftulikay/trusty-vm:latest + depends_on: + - dind + links: + - dind:docker + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + - ./:/etc/ansible/roles/default:ro + - ./tests/ansible.cfg:/etc/ansible/ansible.cfg:ro + stop_grace_period: 1s + xenial: container_name: xenial image: naftulikay/xenial-vm:latest @@ -47,4 +60,4 @@ services: - /sys/fs/cgroup:/sys/fs/cgroup:ro - ./:/etc/ansible/roles/default:ro - ./tests/ansible.cfg:/etc/ansible/ansible.cfg:ro - stop_grace_period: 1s \ No newline at end of file + stop_grace_period: 1s From a4b59b191eb9d9f6046f2605bdcea3d8cdf89021 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 15:13:27 -0700 Subject: [PATCH 06/14] something --- README.md | 2 +- docker-compose.yml | 13 ------------- tests/playbook.yml | 2 +- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 9ff63da..8672068 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Available on Ansible Galaxy at [`naftulikay.go-dev`][galaxy]. ## Requirements -Supporting (under test) Ubuntu 14.04, 16.04, elementary OS Loki, CentOS, and OSX. Only amd64 architecture is supported +Supporting (under test) Ubuntu 16.04, elementary OS Loki, CentOS, and OSX. Only amd64 architecture is supported for now. Other Unix-like environments may work but are not under test. ## Role Variables diff --git a/docker-compose.yml b/docker-compose.yml index dc7d06f..8093c6f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,19 +35,6 @@ services: - ./tests/ansible.cfg:/etc/ansible/ansible.cfg:ro stop_grace_period: 1s - trusty: - container_name: trusty - image: naftulikay/trusty-vm:latest - depends_on: - - dind - links: - - dind:docker - volumes: - - /sys/fs/cgroup:/sys/fs/cgroup:ro - - ./:/etc/ansible/roles/default:ro - - ./tests/ansible.cfg:/etc/ansible/ansible.cfg:ro - stop_grace_period: 1s - xenial: container_name: xenial image: naftulikay/xenial-vm:latest diff --git a/tests/playbook.yml b/tests/playbook.yml index 4f87cdf..ec26680 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -12,7 +12,7 @@ hosts: localhost roles: - role: default - go_version: 1.8.3 + go_version: "{{ go_version | default('1.10.2') }}" go_user: vagrant - name: test From 6f8c37419997e744322d7cb86dd8d133652dae66 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 15:51:16 -0700 Subject: [PATCH 07/14] use an easier method of getting the homedir --- tasks/discover/go.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/discover/go.yml b/tasks/discover/go.yml index b4afa0f..9a06c35 100644 --- a/tasks/discover/go.yml +++ b/tasks/discover/go.yml @@ -1,10 +1,10 @@ --- - name: get go user details - command: getent passwd {{ go_user }} + command: sh -c 'echo $HOME' become: true become_user: "{{ go_user }}" changed_when: false register: go_user_check - name: set go user home - set_fact: go_user_home="{{ go_user_check.stdout_lines[0].split(':')[5] }}" + set_fact: go_user_home="{{ go_user_check.stdout_lines[0] }}" From 7d377256a18824a6cdbb69299b48ab97df747d0a Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 15:53:33 -0700 Subject: [PATCH 08/14] for good measure --- tasks/discover/go.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/discover/go.yml b/tasks/discover/go.yml index 9a06c35..090ce7d 100644 --- a/tasks/discover/go.yml +++ b/tasks/discover/go.yml @@ -3,6 +3,7 @@ command: sh -c 'echo $HOME' become: true become_user: "{{ go_user }}" + become_flags: -Hi changed_when: false register: go_user_check From bed9282519ace3a054284e6cb8e5f7fd6b599426 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 15:54:26 -0700 Subject: [PATCH 09/14] fuck --- tests/playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/playbook.yml b/tests/playbook.yml index ec26680..43c6d97 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -12,7 +12,7 @@ hosts: localhost roles: - role: default - go_version: "{{ go_version | default('1.10.2') }}" + go_version: 1.10.3 go_user: vagrant - name: test From bcccb5f6674f6a7094e6ac9717c44b07a5feb9b0 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 15:57:33 -0700 Subject: [PATCH 10/14] correct course --- tests/playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/playbook.yml b/tests/playbook.yml index 43c6d97..108d002 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -25,6 +25,6 @@ goss_file: goss.yml goss_addtl_dirs: [goss.d] goss_env_vars: - go_version: 1.8.3 + go_version: 1.10.3 go_user: vagrant go_goroot_dir: /usr/local/go From 0f5c7d9c8cbe0788b84a65f1c454626a096cd860 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 16:00:04 -0700 Subject: [PATCH 11/14] remove trusty --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e98e43..722c31d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,11 +14,6 @@ matrix: dist: trusty services: - docker - - os: linux - env: IMAGE=trusty - dist: trusty - services: - - docker - os: linux env: IMAGE=xenial dist: trusty From 9bd7b5b6ea9b2ca461a4527757b7982e43673540 Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 16:07:33 -0700 Subject: [PATCH 12/14] pls --- defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index e985c80..a362f7c 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,6 +1,6 @@ --- go_goroot_dir: /usr/local/go -go_version: "1.8.3" +go_version: "1.10.3" go_install_base: /usr/local go_install_dir: "{{ go_install_base }}/go-{{ go_version }}" go_user_path: "$HOME/.go" From f28718f65372f3915884b390cb01ec09109da2ac Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Mon, 6 Aug 2018 16:09:24 -0700 Subject: [PATCH 13/14] reset --- defaults/main.yml | 2 +- tests/goss.d/files.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index a362f7c..e985c80 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,6 +1,6 @@ --- go_goroot_dir: /usr/local/go -go_version: "1.10.3" +go_version: "1.8.3" go_install_base: /usr/local go_install_dir: "{{ go_install_base }}/go-{{ go_version }}" go_user_path: "$HOME/.go" diff --git a/tests/goss.d/files.yml b/tests/goss.d/files.yml index 4239d49..f502fa6 100644 --- a/tests/goss.d/files.yml +++ b/tests/goss.d/files.yml @@ -15,4 +15,4 @@ file: owner: root group: root filetype: symlink - linked-to: /usr/local/go-1.8.3 + linked-to: /usr/local/go-{{.Env.go_version}} From d03f20b635a402ca0373c4e7902bbae0236d119a Mon Sep 17 00:00:00 2001 From: Naftuli Kay Date: Thu, 9 Aug 2018 16:42:52 -0700 Subject: [PATCH 14/14] jesus christ and it doesn't even degoss --- Makefile | 2 +- tasks/discover/go.yml | 11 ----------- tasks/discover/os.yml | 17 ----------------- tasks/main.yml | 15 +++++++++++---- tasks/system.yml | 37 +++++++++++++++++++++++++++++++++++-- tasks/user.yml | 14 ++++++++++++-- tests/goss.d/commands.yml | 3 +++ tests/playbook.yml | 8 +++----- 8 files changed, 65 insertions(+), 42 deletions(-) delete mode 100644 tasks/discover/go.yml delete mode 100644 tasks/discover/os.yml diff --git a/Makefile b/Makefile index 77277b4..aa49173 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ test-osx: start @mkdir -p .ansible/galaxy-roles @rsync --delete --exclude=.ansible/galaxy-roles -a ./ .ansible/galaxy-roles/default/ @ansible-galaxy install -p .ansible/galaxy-roles -r tests/requirements.yml - @ansible-playbook -c local -i 127.0.0.1, tests/playbook.yml + @ansible-playbook -c local -i 127.0.0.1, -e test_user=$(shell whoami) --ask-become-pass tests/playbook.yml install-osx: @brew install python@2 >/dev/null diff --git a/tasks/discover/go.yml b/tasks/discover/go.yml deleted file mode 100644 index 090ce7d..0000000 --- a/tasks/discover/go.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: get go user details - command: sh -c 'echo $HOME' - become: true - become_user: "{{ go_user }}" - become_flags: -Hi - changed_when: false - register: go_user_check - -- name: set go user home - set_fact: go_user_home="{{ go_user_check.stdout_lines[0] }}" diff --git a/tasks/discover/os.yml b/tasks/discover/os.yml deleted file mode 100644 index 0202152..0000000 --- a/tasks/discover/os.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: establish operating system - set_fact: - os_name: |- - {% if ansible_distribution|lower in ("redhat", "centos") -%} - redhat - {%- else -%} - {{ ansible_distribution|lower }} - {%- endif %} -- name: establish operating system release - set_fact: - os_release: |- - {% if os_name == "redhat" -%} - rhel{{ ansible_distribution_major_version }} - {%- else -%} - {{ ansible_distribution_release | lower }} - {%- endif %} diff --git a/tasks/main.yml b/tasks/main.yml index 8b458e5..9f67ac1 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -3,11 +3,18 @@ fail: msg="go_user must be set." when: go_user is not defined -- name: discover os facts - include_tasks: discover/os.yml +- name: get go user details + command: sh -c 'echo $HOME' + become: true + become_user: "{{ go_user }}" + become_flags: -Hi + changed_when: false + register: go_user_check + vars: + ansible_ssh_pipelining: "{{ is_macos }}" -- name: discover go facts - include_tasks: discover/go.yml +- name: set go user home + set_fact: go_user_home="{{ go_user_check.stdout_lines[0] }}" - name: include system tasks include_tasks: system.yml diff --git a/tasks/system.yml b/tasks/system.yml index fbe8394..1b75f72 100644 --- a/tasks/system.yml +++ b/tasks/system.yml @@ -8,9 +8,32 @@ become: true when: is_ubuntu_derivative +- name: fix homebrew ownership + command: find /usr/local -mindepth 1 -maxdepth 1 -type d -exec chown -R {{ go_user }}:admin {} \; + become: true + when: is_macos + - name: install git package: name=git state=present become: true + become_user: |- + {%- if is_linux -%} + root + {%- else -%} + {{ go_user }} + {%- endif -%} + become_flags: -Hi + vars: + ansible_ssh_pipelining: "{{ is_macos }}" + +- name: install GNU tar + package: name=gnu-tar state=present + become: true + become_user: "{{ go_user }}" + become_flags: -Hi + when: is_macos + vars: + ansible_ssh_pipelining: "{{ is_macos }}" - name: download unarchive: @@ -28,7 +51,12 @@ dest: "{{ go_goroot_dir }}" mode: "0755" owner: root - group: root + group: |- + {%- if is_macos -%} + admin + {%- else -%} + root + {%- endif -%} become: true - name: configure environment @@ -36,6 +64,11 @@ src: go-profile.d.sh.j2 dest: /etc/profile.d/go.sh owner: root - group: root + group: |- + {%- if is_macos -%} + admin + {%- else -%} + root + {%- endif -%} mode: 0755 become: true diff --git a/tasks/user.yml b/tasks/user.yml index 0846645..c8691ef 100644 --- a/tasks/user.yml +++ b/tasks/user.yml @@ -5,7 +5,12 @@ state: directory mode: 0700 owner: "{{ go_user }}" - group: "{{ go_user }}" + group: |- + {%- if is_macos -%} + primarygroup + {%- else -%} + {{ go_user }} + {%- endif -%} recurse: true - name: detect dep current version @@ -53,7 +58,12 @@ url: https://github.com/golang/dep/releases/download/v{{ godep_target_version }}/dep-linux-amd64 dest: "{{ go_user_path.replace('$HOME', go_user_home) }}/bin/dep" owner: "{{ go_user }}" - group: "{{ go_user }}" + group: |- + {%- if is_macos -%} + primarygroup + {%- else -%} + {{ go_user }} + {%- endif -%} mode: 0755 force: true become: true diff --git a/tests/goss.d/commands.yml b/tests/goss.d/commands.yml index f6c53fa..3183882 100644 --- a/tests/goss.d/commands.yml +++ b/tests/goss.d/commands.yml @@ -10,3 +10,6 @@ command: exit-status: 0 stdout: - "{{.Env.go_version}}" + + 'which fuckyou': + exit-status: 0 diff --git a/tests/playbook.yml b/tests/playbook.yml index 108d002..fe6dcdd 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -2,18 +2,16 @@ - name: setup hosts: localhost become: true - vars: - container_user: vagrant tasks: - name: create user - user: name={{ container_user }} comment="Container User" shell=/bin/bash state=present + user: name={{ test_user | default('vagrant') }} comment="Container User" shell=/bin/bash state=present - name: build hosts: localhost roles: - role: default go_version: 1.10.3 - go_user: vagrant + go_user: "{{ test_user | default('vagrant') }}" - name: test hosts: localhost @@ -26,5 +24,5 @@ goss_addtl_dirs: [goss.d] goss_env_vars: go_version: 1.10.3 - go_user: vagrant + go_user: "{{ test_user | default('vagrant') }}" go_goroot_dir: /usr/local/go