Initial commit to golang installation role

Change-Id: I344755e19a5d87d0f4880f5121df6d346f1c85f3
diff --git a/tasks/main.yml b/tasks/main.yml
new file mode 100644
index 0000000..b537985
--- /dev/null
+++ b/tasks/main.yml
@@ -0,0 +1,108 @@
+---
+# golang tasks/main.yml
+#
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation <support@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+- name: include OS-specific vars
+  include_vars: "{{ ansible_os_family }}.yml"
+
+- name: include OS-specific tasks
+  include_tasks: "{{ ansible_os_family }}.yml"
+
+- name: Create golang dist dir
+  file:
+    path: "{{ golang_dist_dir }}"
+    state: directory
+    owner: "root"
+    group: "root"
+    mode: "0755"
+
+- name: download golang .tar.gz to dist dir
+  get_url:
+    url: "https://go.dev/dl/go{{ golang_version }}.{{ golang_arch }}.tar.gz"
+    dest: "{{ golang_dist_dir }}/go{{ golang_version }}.tar.gz"
+    owner: "root"
+    group: "root"
+    mode: "0644"
+    checksum: "{{ golang_checksum }}"
+
+- name: Unarchive golang distribution
+  unarchive:
+    remote_src: true
+    src: "{{ golang_dist_dir }}/go{{ golang_version }}.tar.gz"
+    dest: "/usr/local/"
+    owner: "root"
+    group: "root"
+    creates: "/usr/local/go/bin/go"
+
+- name: Create symlinks in /usr/local/bin for go binaries
+  file:
+    state: link
+    src: "/usr/local/go/bin/{{ item }}"
+    dest: "/usr/local/bin/{{ item }}"
+  with_items:
+    - "go"
+    - "gofmt"
+
+# additional tools
+- name: Download golangci-lint
+  get_url:
+    url: >-
+      https://github.com/golangci/golangci-lint/releases/download/v{{ golang_golangci_lint_version
+      }}/golangci-lint-{{ golang_golangci_lint_version
+      }}-{{ golang_arch }}.tar.gz
+    dest: "{{ golang_dist_dir }}/golangci-lint_{{ golang_golangci_lint_version }}.tar.gz"
+    owner: "root"
+    group: "root"
+    mode: "0644"
+
+- name: Unarchive golangci-lint distribution
+  unarchive:
+    remote_src: true
+    src: "{{ golang_dist_dir }}/golangci-lint_{{ golang_golangci_lint_version }}.tar.gz"
+    dest: "{{ golang_dist_dir }}"
+    owner: "root"
+    group: "root"
+    creates: >-
+      {{ golang_dist_dir }}/golangci-lint-{{ golang_golangci_lint_version }}-{{ golang_arch }}
+
+- name: Install golangci-lint binary
+  copy:
+    src: >-
+      {{ golang_dist_dir }}/golangci-lint-{{ golang_golangci_lint_version }}-{{ golang_arch
+      }}/golangci-lint
+    dest: /usr/local/bin/golangci-lint
+    mode: "0755"
+    remote_src: true
+
+- name: Install go-junit-report
+  environment:
+    GOPATH: "/usr/local/go"
+  command:
+    cmd: "go install github.com/jstemmer/go-junit-report/v2@v{{ golang_go_junit_report_version }}"
+    creates: "/usr/local/go/bin/go-junit-report"
+
+- name: Install gocover-cobertura
+  environment:
+    GOPATH: "/usr/local/go"
+  command:
+    cmd: "go install github.com/t-yuki/gocover-cobertura@{{ golang_gocover_cobertura_version }}"
+    creates: "/usr/local/go/bin/gocover-cobertura"
+
+# link additional tools
+- name: Create symlinks in /usr/local/bin for additional tool binaries
+  file:
+    state: link
+    src: "/usr/local/go/bin/{{ item }}"
+    dest: "/usr/local/bin/{{ item }}"
+  with_items:
+    - "go-junit-report"
+    - "gocover-cobertura"
+
+# cleanup
+- name: Delete golang dist dir (containers)
+  when: golang_delete_dist
+  file:
+    path: "{{ golang_dist_dir }}"
+    state: absent