anthos-bm-edge-deployment/roles/google-tools/tasks/main.yaml (216 lines of code) (raw):

# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --- # Credentials ### The /etc/profile.d/gcloud_auth.sh requires it readable for all users - name: Create the temp keys directory file: path: '{{ remote_gsa_key }}' state: directory mode: '0755' group: 'root' owner: 'root' tags: - initial-install - tool-authentication ### The /etc/profile.d/gcloud_auth.sh requires it readable for all users - name: Get the SA key to initialize gcloud with copy: src: '{{ local_gsa_key }}' dest: '{{ remote_gsa_key }}/gsa-key.json' mode: '0444' # read only group: 'root' owner: 'root' tags: - initial-install - tool-authentication ##### gcloud - name: Create the tools temp directory file: path: '{{ tools_base_path }}' state: directory mode: '0755' tags: - initial-install - name: Download and unarchive gcloud unarchive: src: 'https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-{{ gcloud_version }}-linux-x86_64.tar.gz' dest: '{{ tools_base_path }}' creates: '{{ tools_base_path }}/google-cloud-sdk' remote_src: yes tags: - initial-install - tool-install - name: Download and unarchive kubectx unarchive: src: 'https://github.com/ahmetb/kubectx/releases/download/v{{ kubectx_version }}/kubectx_v{{ kubectx_version }}_linux_x86_64.tar.gz' dest: '{{ tools_base_path }}/google-cloud-sdk/bin/' creates: '{{ tools_base_path }}/google-cloud-sdk/bin/kubectx' remote_src: yes tags: - initial-install - tool-install ### All other tools - name: Install kubectl, nomos, kustomize and gsutil command: cmd: gcloud components install kubectl kustomize anthos-auth kpt nomos gsutil kubectl-oidc alpha beta -q creates: "{{ tools_base_path }}/google-cloud-sdk/bin/kubectl" environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - initial-install - tool-install - name: Remove previous /usr/bin links and non-gcloud based binaries ansible.builtin.file: path: '/usr/bin/{{ item.app }}' state: absent loop: - { app: gcloud } - { app: kubectx } - { app: nomos } - { app: gsutil } - { app: kustomize } - { app: anthoscli } - { app: kpt } - { app: kubectl } - { app: kubectl-oidc } tags: - initial-install - tool-install - name: Put the primary google sdk tools in /usr/bin ansible.builtin.file: src: '{{ tools_base_path }}/google-cloud-sdk/bin/{{ item.app }}' dest: '/usr/bin/{{ item.app }}' state: link loop: - { app: gcloud } - { app: kubectx } - { app: nomos } - { app: gsutil } - { app: kustomize } - { app: anthoscli } - { app: kpt } - { app: kubectl } - { app: kubectl-oidc } tags: - initial-install - tool-install - name: Download and unarchive kubens unarchive: src: 'https://github.com/ahmetb/kubectx/releases/download/v{{ kubectx_version }}/kubens_v{{ kubectx_version }}_linux_x86_64.tar.gz' dest: '{{ tools_base_path }}/google-cloud-sdk/bin/' creates: '{{ tools_base_path }}/google-cloud-sdk/bin/kubens' remote_src: yes tags: - initial-install - tool-install ### Set up application default credentials - name: Setting up Google App Creds for non-interactive shells lineinfile: path: /etc/environment line: 'GOOGLE_APPLICATION_CREDENTIALS="/var/keys/gsa-key.json"' tags: - profile - initial-install - non-interactive-shell #### Setting up non-interactive PATH for gcloud - name: Add gcloud to PATH on all shells (including non-interactive) lineinfile: path: /etc/environment regexp: 'PATH="(\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin:\/usr\/games:\/usr\/local\/games:\/snap\/bin)"$' #uugghhly...but works line: 'PATH="/var/google-tools-install/google-cloud-sdk/bin:\1"' #prepend gcloud (snap auto installs gcloud on GCE instances) backrefs: yes state: present tags: - profile - initial-install - non-interactive-shell ## Set up auto-complete - name: Add gcloud BASH completion lineinfile: path: /etc/profile.d/bash_completion.sh line: "if [ -f '/var/google-tools-install/google-cloud-sdk/completion.bash.inc' ]; then source '/var/google-tools-install/google-cloud-sdk/completion.bash.inc'; fi" tags: - profile - initial-install - non-interactive-shell - name: Add gcloud BASH completion lineinfile: path: /etc/profile.d/gcloud_auth.sh line: "gcloud auth activate-service-account --key-file={{ remote_gsa_key }}/gsa-key.json --project {{ google_project_id }}" state: present create: yes tags: - profile - initial-install - non-interactive-shell - gcloud-setup ### Switch current session to target-machine-gsa - name: Switch to target-machine-gsa command: cmd: bash /etc/profile.d/gcloud_auth.sh environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - initial-install - name: Enable services command: # https://cloud.google.com/anthos/clusters/docs/bare-metal/latest/installing/install-prereq cmd: gcloud services enable {{ gcp_services_required | join(' ') }} --project={{ google_project_id }} run_once: true # only one in whole inventory to run this environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" when: - gcp_services_required is defined - (gcp_services_required|length>0) tags: - initial-install - name: Set Default Region command: cmd: gcloud config set compute/region {{ google_region }} --project={{ google_project_id }} environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - initial-install - tool-install - name: Set Default Zone command: cmd: gcloud config set compute/zone {{ google_zone }} --project={{ google_project_id }} environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - tool-install - initial-install ### IF upgrading BMCTL, remove existing - name: Remove bmctl ansible.builtin.file: path: "/usr/local/bin/bmctl" state: absent when: - force_tools_upgrade is defined - force_tools_upgrade == True tags: - initial-install - tool-install ### Find versions with: gsutil ls -al gs://anthos-baremetal-release/bmctl - name: Install Anthos Bare Metal CLI shell: | gsutil cp gs://anthos-baremetal-release/bmctl/{{ bmctl_version }}/linux-amd64/bmctl {{ tools_base_path }} chmod a+x {{ tools_base_path }}/bmctl mv {{ tools_base_path }}/bmctl /usr/local/bin/bmctl bmctl version exit $? args: creates: /usr/local/bin/bmctl executable: /bin/bash environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - initial-install - tool-install - name: Adding k9s utility to machine (optional, but recommended) ansible.builtin.unarchive: src: https://github.com/derailed/k9s/releases/download/{{ k9s_version }}/k9s_Linux_x86_64.tar.gz dest: /usr/local/bin remote_src: yes ignore_errors: true tags: - optional - tool-install ### Install virtctl via bmctl (keeps this up-to-date without explicit downloading) - name: Install virtctl command: cmd: "bmctl install virtctl" args: creates: /usr/bin/kubectl-virt chdir: "{{ tools_base_path }}" environment: PATH: "{{ tools_base_path }}/google-cloud-sdk/bin:{{ ansible_env.PATH }}" tags: - optional - tool-install