Ian Wienand e5e1127122 Add delete to synchronize
Since I53cb63ffa4ae50575d4fa37b24323ad13ec1bac3 some puppet runs are
failing because system-config:playbooks/roles/set-hostname moved to
roles/set-hostname and became a symlink.  rsync refuses to overwrite
the directory with a symlink because it seems to not be empty, because
we never removed the files in it.

Handle the possibility of things moving around like this by
specifying delete so old files are cleared out.

Finally set manifest_base dir ownership and mode to address linter E208.

Depends-On: https://review.opendev.org/762181
Change-Id: I249d713214d8383a3ccfe1a400404cbdcb97dcc6
2020-11-10 09:48:56 -08:00

190 lines
6.0 KiB
YAML

- block:
- name: Get management server puppet version
shell:
cmd: "PATH=$PATH:/opt/puppetlabs/bin puppet --version | cut -d '.' -f 1"
delegate_to: localhost
register: mgmt_puppet_version
- name: Set management server puppet version fact
set_fact:
mgmt_puppet_version: "{{ mgmt_puppet_version.stdout }}"
- name: Sanity check management server puppet version
fail: "Unsupported puppet version {{ mgmt_puppet_version }}"
when:
- mgmt_puppet_version != '3'
- mgmt_puppet_version != '4'
- name: Set management server hieradata var
set_fact:
mgmt_hieradata: "{{ '/etc/puppet/hieradata/' + puppet_environment if mgmt_puppet_version == '3' else '/etc/puppetlabs/code/environments/' + puppet_environment + '/hieradata' }}" # noqa 204
when: mgmt_hieradata is not defined
- name: Get puppet version
shell:
cmd: "PATH=$PATH:/opt/puppetlabs/bin puppet --version | cut -d '.' -f 1"
register: puppet_version_output
when: puppet_version is not defined
- name: Set puppet version fact
set_fact:
puppet_version: "{{ puppet_version_output.stdout }}"
when:
- puppet_version is not defined
- name: Sanity check puppet version
fail: "Unsupported puppet version {{ puppet_version }}"
when: (puppet_version != '3' and puppet_version != '4')
- block:
- name: Set hieradata var
set_fact:
hieradata: "{{ '/etc/puppet/hieradata/' + puppet_environment if puppet_version == '3' else '/etc/puppetlabs/code/environments/' + puppet_environment + '/hieradata' }}" # noqa 204
- name: ensure hiera directory
file:
state: directory
path: "{{ hieradata }}/{{ item }}"
owner: root
group: root
mode: 0700
with_items:
- group_vars
- host_vars
- name: make file list
puppet_get_hiera_file_list:
fqdn: "{{ ansible_fqdn }}"
groups: "{{ hostvars[inventory_hostname].group_names }}"
location: "{{ mgmt_hieradata }}"
delegate_to: localhost
register: hiera_file_paths
- name: copy hiera files
copy:
src: "{{ mgmt_hieradata + '/' + item }}"
dest: "{{ hieradata + '/' + item }}"
mode: 0600
with_items: "{{ hiera_file_paths.paths|default() }}"
when: copy_hieradata
- block:
- name: Ensure target directory exists
file:
path: "{{ manifest_base }}"
owner: root
group: root
mode: 0755
state: directory
- name: copy puppet modules
synchronize:
src: "{{ mgmt_manifestpath }}"
dest: "{{ manifest_base }}"
delete: yes
no_log: "{{ puppet_nolog_sync | bool }}"
- name: ensure hieradata manifest link is present
file:
src: "{{ '/etc/puppet/hieradata' if puppet_version == '3' else '/etc/puppetlabs/code/environments' }}"
dest: "{{ puppet_hieradata_link_dest }}"
state: link
when: copy_hieradata
- name: Set management server puppet module dir to user-defined path
set_fact:
mgmt_puppet_module_dir: "{{ puppet_basemodulepath }}"
when: puppet_basemodulepath
- name: Set management server puppet module dir
set_fact:
mgmt_puppet_module_dir: "{{ '/etc/puppet/modules' if mgmt_puppet_version == '3' else '/etc/puppetlabs/code/modules' }}"
delegate_to: localhost
when: mgmt_puppet_module_dir is not defined
- name: Set puppet module dir to user-defined path
set_fact:
puppet_module_dir: "{{ puppet_basemodulepath }}"
when: puppet_basemodulepath
- name: Set puppet module dir
set_fact:
puppet_module_dir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/code' }}"
when: puppet_module_dir is not defined
- name: copy system puppet modules
synchronize:
src: "{{ mgmt_puppet_module_dir }}"
dest: "{{ puppet_module_dir }}"
delete: yes
no_log: "{{ puppet_nolog_sync | bool }}"
when:
- copy_puppet
- manifest_base is defined
- name: setup config files
when: manage_config|bool
include: config.yaml
- block:
- name: run puppet
puppet:
puppetmaster: "{{ puppetmaster|default(omit) }}"
manifest: "{{ manifest|default(omit) }}"
show_diff: "{{ show_diff|default(false) }}"
facts: "{{ facts|default(omit) }}"
facter_basename: "{{ facter_basename|default(omit) }}"
logdest: "{{ puppet_logdest|default(omit) }}"
color: "{{ puppet_color|default(omit) }}"
environment: "{{ puppet_environment|default(omit) }}"
noop: "{{ puppet_noop|default(omit) }}"
debug: "{{ puppet_debug|default(omit) }}"
timeout: "{{ puppet_timeout|default(omit) }}"
always:
- block:
- name: find logs
shell: "ls -tr /var/lib/puppet/reports/{{ ansible_fqdn }}/*_puppetdb.json"
register: files
failed_when: not files.stdout_lines|default("")
- name: set log filename
set_fact: puppet_logfile="{{ files.stdout_lines|sort|last }}"
when: "{{ files.stdout_lines|length > 0 }}"
- name: create reports directory
file:
path: '/var/lib/puppet/reports/{{ ansible_fqdn }}'
owner: root
group: root
mode: 0755
state: directory
delegate_to: localhost
when: "{{ files.stdout_lines|length > 0 }}"
- name: fetch file
synchronize:
mode: pull
src: "{{ puppet_logfile }}"
dest: /var/lib/puppet/reports/{{ ansible_fqdn }}
when: "{{ files.stdout_lines|length > 0 }}"
- name: post facts
puppet_post_puppetdb:
puppetdb: "{{ puppetdb }}"
hostvars: "{{ hostvars[inventory_hostname] }}"
logfile: "{{ puppet_logfile }}"
whoami: "{{ puppet_report_as }}"
delegate_to: localhost
when: "{{ files.stdout_lines|length > 0 }}"
when:
- puppetdb is defined
- puppet_report_as is defined