anthos-bm-edge-deployment/roles/ready-ubuntu/tasks/main.yaml (164 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.
---
# tasks file for ready-ubuntu
### Verify OS is approved (Ubuntu only at this point). Saves the pre-checks later
- name: Fail if not running on Ubuntu 18.04 or 20.04
fail:
msg: "This playbook can only run on Ubuntu 18.04 or 20.04. Using {{ ansible_distribution }}:{{ ansible_distribution_version }}"
when: (ansible_distribution != "Ubuntu") or (ansible_distribution_version != '18.04' and ansible_distribution_version != '20.04')
tags:
- verify-os
- name: Get kernel version
command: 'uname -r'
register: uname_result
- name: Save kernel verson to a variable
set_fact:
uname_r: '{{ uname_result.stdout }}'
# TODO Audit this list of dependencies and split into "development" and "production" (not everything is needed for production)
- name: Install dependencies used in provisioning
apt:
pkg:
- apt-transport-https
- ca-certificates
- net-tools
- nmap
- curl
- wget
- gnupg-agent
- software-properties-common
- network-manager
- vlan
- logrotate
- unattended-upgrades
- apt-listchanges
- nfs-common
# This is needed for Robin
- linux-modules-extra-{{ uname_r }}
state: present
update_cache: yes
tags:
- update-dependencies
#### Stop and disable apparmor
- name: Stop apparmor
systemd:
state: stopped
name: apparmor
tags:
- remove
- name: Disable apparmor
systemd:
name: apparmor
enabled: no
tags:
- remove
#### Disable ufw
- name: Disable wfw
command: ufw disable
register: ufw
tags:
- remove
- name: Show output for firewall stopping
debug:
msg: "{{ ufw.stdout }}"
tags:
- remove
## Create the user that builds and communicates across cluster machines
- name: Create a user for ABM Control
ansible.builtin.user:
name: "{{ abm_install_user }}"
shell: /bin/bash
groups: "sudo"
append: yes
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/{{ ssh_key_name }}
tags:
- abm-install
- abm-user
## Setup password less SSH into same box
- name: "Place ssh config with no-host-check turned on"
template:
src: ssh-config.j2
dest: "{{ ssh_user_home }}/config"
group: "{{ abm_install_user }}"
owner: "{{ abm_install_user }}"
tags:
- abm-install
- abm-user
### Add the new user to the no-password sudoers list
- name: Add user to sudoers list
template:
src: sudoers.j2
dest: "/etc/sudoers.d/{{ abm_install_user }}"
tags:
- abm-install
- abm-user
## TODO: This does not allow for multiple cnucs to be setup at one time
## TODO: This also does not skip non cnucs
- name: "SSH Key access to other nodes"
include: setup-ssh-pub-key-access.yaml
tags:
- abm-install
- abm-ssh
# Copy over the vxlan status verify script
- name: Copy VXLAN status script
template:
src: vxlan-status-check.sh.j2
dest: "/var/vxlan-status-check.sh"
mode: '0755' # read/write/execute owner, everyone else read/execute
when:
- is_cloud_resource is defined
- is_cloud_resource == True
tags:
- network-vxlan
- ubuntu-setup
- name: get version
shell: "docker -v | cut -d ' ' -f 3 | cut -d ',' -f 1"
register: docker_version
tags:
- docker
- name: "Setup docker on host machine"
include: setup-docker-apt.yaml
when: ( docker_version.stdout == "" or docker_version.stdout is version('20.9.0', '<') )
tags:
- docker
- name: "Setup VLAN Interfaces on Physical Hosts"
include: setup-vlan-interfaces.yaml
when:
- (setup_vlan == true) and (is_cloud_resource is undefined or is_cloud_resource == false)
tags:
- vlan-setup
- name: ensure logrotate is in /etc/cron.hourly
file:
src: /etc/cron.daily/logrotate
dest: /etc/cron.hourly/logrotate
state: link
force: yes
mode: 0755 # the file needs to be excutable
tags:
- logrotate-setup
- ubuntu-setup
- name: ensure logrotate is in /etc/cron.hourly
file:
src: /etc/cron.daily/logrotate
dest: /etc/cron.hourly/logrotate
state: link
force: yes
mode: 0755 # the file needs to be excutable
tags:
- logrotate-setup
- ubuntu-setup
- name: check hourly logrotate status
shell: |
IS_HOURLY=$(run-parts --test /etc/cron.hourly)
TEST_FOR="/etc/cron.hourly/logrotate"
if [[ "${IS_HOURLY}" != *"${TEST_FOR}"* ]]; then
exit 1 # Fail if hourly is not setup
fi
register: hourly_check
failed_when: hourly_check.rc != 0
changed_when: False
tags:
- logrotate-setup
- ubuntu-setup
#### Install kernel module for Robin
- name: Generate modules.dep
command: depmod -a
tags:
- robin
- name: Load tcm_loop kernel module
modprobe:
name: tcm_loop
state: present
tags:
- robin
- name: Check if tcm_loop kernel module is loaded
shell: "lsmod | grep tcm"
register: tcm_exists
failed_when: tcm_exists.rc != 0