112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# Copyright 2020 The Kubernetes Authors.
 | 
						|
 | 
						|
# 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.
 | 
						|
---
 | 
						|
- name: Download containerd
 | 
						|
  win_get_url:
 | 
						|
    url: '{{ containerd_url }}'
 | 
						|
    dest: '{{ tempdir.stdout | trim }}\containerd.tar.gz'
 | 
						|
    checksum: '{{ containerd_sha256 }}'
 | 
						|
    checksum_algorithm: "sha256"
 | 
						|
    url_timeout: 300
 | 
						|
  register: containerd
 | 
						|
  retries: 5
 | 
						|
  delay: 3
 | 
						|
  until: containerd is not failed
 | 
						|
 | 
						|
- name: Create containerd directory structure
 | 
						|
  win_file:
 | 
						|
    path:  "{{ item }}"
 | 
						|
    state: directory
 | 
						|
  loop: 
 | 
						|
    - '{{ programfiles.stdout | trim }}\containerd'
 | 
						|
    - '{{ alluserprofile.stdout | trim }}\containerd\state'
 | 
						|
    - '{{ alluserprofile.stdout | trim }}\containerd\root'
 | 
						|
    - '{{ systemdrive.stdout | trim }}/opt/cni/bin'
 | 
						|
    - '{{ systemdrive.stdout | trim }}/etc/cni/net.d'
 | 
						|
 | 
						|
- name: Check if containerd exists
 | 
						|
  win_stat:
 | 
						|
    path: '{{ programfiles.stdout | trim }}\containerd\containerd.exe'
 | 
						|
  register: containerd_file
 | 
						|
 | 
						|
- name: Unpack containerd binaries
 | 
						|
  win_command: cmd /c tar -zxvf {{ containerd.dest }} -C "{{ programfiles.stdout | trim }}\containerd" --strip-components 1
 | 
						|
  when: not containerd_file.stat.exists
 | 
						|
 | 
						|
- name: Add containerd to path
 | 
						|
  win_path:
 | 
						|
    elements:
 | 
						|
    - '{{ programfiles.stdout | trim }}\containerd'
 | 
						|
    scope: machine
 | 
						|
 | 
						|
- name: Copy containerd config file {{ containerd_config_file }}
 | 
						|
  win_template:
 | 
						|
    dest: '{{ programfiles.stdout | trim }}\containerd\config.toml'
 | 
						|
    src: "{{ containerd_config_file }}"
 | 
						|
  vars:
 | 
						|
    allusersprofile: "{{ alluserprofile.stdout | trim }}"
 | 
						|
    plugin_bin_dir: "{{ systemdrive.stdout | trim }}/opt/cni/bin"
 | 
						|
    plugin_conf_dir: "{{ systemdrive.stdout | trim }}/etc/cni/net.d"
 | 
						|
    # programfiles is C:\Program Files, but should be C:\\Program Files
 | 
						|
    # otherwise task Register Containerd fails with "invalid escape sequence: \P"
 | 
						|
    containerd_conf_dir: '{{ programfiles.stdout | trim | regex_replace("\\", "\\\\") }}\\\\containerd'
 | 
						|
 | 
						|
- name: Check if a Containerd service is installed
 | 
						|
  win_service:
 | 
						|
    name: containerd
 | 
						|
  register: containerd_service
 | 
						|
 | 
						|
- name: Register Containerd
 | 
						|
  win_shell: |
 | 
						|
    #refresh the path to ensure ansible sees update
 | 
						|
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
 | 
						|
    containerd.exe --register-service
 | 
						|
  when: containerd_service.exists == false
 | 
						|
 | 
						|
# Enables DNS resolution of SMB shares
 | 
						|
# https://github.com/kubernetes-sigs/windows-gmsa/issues/30#issuecomment-802240945
 | 
						|
- name: Apply SMB Resolution Fix for containerd
 | 
						|
  win_regedit:
 | 
						|
    path: HKLM:\SYSTEM\CurrentControlSet\Services\hns\State
 | 
						|
    state: present
 | 
						|
    name: EnableCompartmentNamespace
 | 
						|
    data: 1
 | 
						|
    type: dword
 | 
						|
 | 
						|
- name: Create Windows Defender Exclusions
 | 
						|
  win_shell: |
 | 
						|
    Add-MpPreference -ExclusionProcess "{{ programfiles.stdout | trim }}\containerd\containerd.exe"
 | 
						|
    Add-MpPreference -ExclusionProcess "{{ programfiles.stdout | trim }}\containerd\ctr.exe"
 | 
						|
 | 
						|
- name: Ensure Containerd Service is running
 | 
						|
  win_service:
 | 
						|
    name: containerd
 | 
						|
    start_mode: auto
 | 
						|
    state: started
 | 
						|
 | 
						|
- name: Pre-pull containerd images
 | 
						|
  win_shell: |
 | 
						|
    #refresh the path to ensure ansible sees update
 | 
						|
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
 | 
						|
    ctr.exe -n k8s.io images pull {{ item }}
 | 
						|
  loop: "{{ images }}"
 | 
						|
  async: 1800
 | 
						|
  poll: 60
 | 
						|
  retries: 5
 | 
						|
  register: pull
 | 
						|
  until: pull is not failed
 | 
						|
  when: (prepull | bool)
 | 
						|
  vars:
 | 
						|
    images: "{{ prepull_images[distribution_version] | default([]) }}"
 |