From 4d64868882038dd846e5128d70d3eaccf2d0ec59 Mon Sep 17 00:00:00 2001 From: Colleen Murphy Date: Wed, 18 Apr 2018 00:20:13 +0200 Subject: [PATCH] Don't hardcode puppet-3-specific config paths This patch ensures that hiera data and puppet modules, and puppet config are copied to the right directory depending on the current puppet version. Since it's possible for the ansible management server and the managed nodes to have different puppet versions, we need to account for the possibility that the source and destination paths might be different. We also don't need to hardcode the various config paths in config or manage environments since we're using the defaults and hardcoding them would make them incorrect for one or the other puppet versions. Change-Id: I164f91f9a7942e8c5f059652634ec1078ae41aae --- defaults/main.yml | 4 +- library/puppet_get_hiera_file_list | 2 +- tasks/config.yml | 23 +++++++--- tasks/main.yml | 69 +++++++++++++++++++++++++++--- templates/environment.conf.j2 | 2 +- templates/puppet.conf.j2 | 8 +++- 6 files changed, 91 insertions(+), 17 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 9411169..9e7acd0 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -10,8 +10,8 @@ puppet_server: puppet certname: "{{ ansible_fqdn }}" puppet_data_binding_terminus: hiera puppet_reports: store -puppet_basemodulepath: '$confdir/modules' -puppet_environmentpath: '$confdir/environments' +puppet_basemodulepath: '' +puppet_environmentpath: '' puppet_hiera_datadir: '/opt/system-config/' puppet_environment_basedir: '/opt/system-config/' puppet_environment: production diff --git a/library/puppet_get_hiera_file_list b/library/puppet_get_hiera_file_list index d00cff3..79dbe54 100644 --- a/library/puppet_get_hiera_file_list +++ b/library/puppet_get_hiera_file_list @@ -59,7 +59,7 @@ def main(): for path in paths: full_path = os.path.join(p['location'], path) if os.path.exists(full_path): - good_paths.append(full_path) + good_paths.append(path) module.exit_json(paths=good_paths) diff --git a/tasks/config.yml b/tasks/config.yml index 5e6f272..e7fb593 100644 --- a/tasks/config.yml +++ b/tasks/config.yml @@ -1,9 +1,22 @@ --- +- name: Set puppet conf dir + set_fact: + puppet_confdir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/puppet' }}" + +- name: Set puppet code dir + set_fact: + puppet_codedir: "{{ '/etc/puppet' if puppet_version == '3' else '/etc/puppetlabs/code' }}" + +- name: Enable puppet environments explicitly for puppet 3 + set_fact: + puppet_environmentpath: '$confdir/environments' + when: puppet_version == '3' and puppet_environmentpath == '' + # Create our config - name: Create puppet.conf from template template: src: "puppet.conf.j2" - dest: "/etc/puppet/puppet.conf" + dest: "{{ puppet_confdir }}/puppet.conf" owner: root group: root mode: 0644 @@ -11,14 +24,14 @@ - name: Create hiera.yaml from template template: src: "hiera.yaml.j2" - dest: "/etc/puppet/hiera.yaml" + dest: "{{ puppet_confdir }}/hiera.yaml" owner: root group: root mode: 0644 - name: symlink hiera config files together file: - src: "/etc/puppet/hiera.yaml" + src: "{{ puppet_confdir }}/hiera.yaml" dest: "/etc/hiera.yaml" owner: root group: root @@ -27,7 +40,7 @@ - name: create environment directory file: - path: "/etc/puppet/environments/{{ puppet_environment }}" + path: "{{ puppet_codedir }}/environments/{{ puppet_environment }}" state: directory owner: root group: root @@ -37,7 +50,7 @@ - name: create environment.conf from template template: src: "environment.conf.j2" - dest: "/etc/puppet/environments/{{ puppet_environment }}/environment.conf" + dest: "{{ puppet_codedir }}/environments/{{ puppet_environment }}/environment.conf" owner: root group: root mode: 0644 diff --git a/tasks/main.yml b/tasks/main.yml index 3041cb0..3882a10 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,9 +1,45 @@ --- +- 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' and mgmt_puppet_version != '4') + +- name: Get puppet version + shell: + cmd: "PATH=$PATH:/opt/puppetlabs/bin puppet --version | cut -d '.' -f 1" + register: puppet_version + +- name: Set puppet version fact + set_fact: + puppet_version: "{{ puppet_version.stdout }}" + +- name: Sanity check puppet version + fail: "Unsupported puppet version {{ puppet_version }}" + when: (puppet_version != '3' and puppet_version != '4') + - block: + - 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' }}" + delegate_to: localhost + + - name: Set hieradata var + set_fact: + hieradata: "{{ '/etc/puppet/hieradata' + puppet_environment if puppet_version == '3' else '/etc/puppetlabs/code/environments/' + puppet_environment + '/hieradata' }}" + - name: ensure hiera directory file: state: directory - path: "{{ hieradata }}/{{ puppet_environment }}/{{ item }}" + path: "{{ hieradata }}//{{ item }}" owner: root group: root mode: 0700 @@ -15,14 +51,14 @@ puppet_get_hiera_file_list: fqdn: "{{ ansible_fqdn }}" groups: "{{ hostvars[inventory_hostname].group_names }}" - location: "{{ hieradata }}/{{ puppet_environment }}" + location: "{{ hieradata }}" delegate_to: localhost register: hiera_file_paths - name: copy hiera files copy: - src: "{{ item }}" - dest: "{{ item }}" + src: "{{ mgmt_hieradata + '/' + item }}" + dest: "{{ hieradata + '/' item }}" mode: 0600 with_items: "{{ hiera_file_paths.paths|default() }}" @@ -41,10 +77,31 @@ 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: /etc/puppet/modules - dest: /etc/puppet + src: "{{ mgmt_puppet_module_dir }}" + dest: "{{ puppet_module_dir }}" when: - copy_puppet diff --git a/templates/environment.conf.j2 b/templates/environment.conf.j2 index 7726473..c1e3a27 100644 --- a/templates/environment.conf.j2 +++ b/templates/environment.conf.j2 @@ -1 +1 @@ -modulepath = '{{ puppet_basemodulepath }}:{{ puppet_environment_basedir }}{{ puppet_environment }}/modules' +modulepath = {{ puppet_basemodulepath if puppet_basemodulepath != '' else '$basemodulepath' }}:$environmentpath/{{ puppet_environment }}/modules:{{ puppet_environment_basedir if puppet_environment_basedir != '' else '$environmentpath' }}/{{ puppet_environment }}/modules diff --git a/templates/puppet.conf.j2 b/templates/puppet.conf.j2 index 4e48051..ad41108 100644 --- a/templates/puppet.conf.j2 +++ b/templates/puppet.conf.j2 @@ -8,9 +8,13 @@ certname={{ certname }} pluginsync=true data_binding_terminus={{ puppet_data_binding_terminus }} reports={{ puppet_reports }} -basemodulepath = {{ puppet_basemodulepath }} -environmentpath={{ puppet_environmentpath }} environmenttimeout=0 +{% if puppet_basemodulepath != '' %} +basemodulepath = {{ puppet_basemodulepath }} +{% endif %} +{% if puppet_environmentpath != '' %} +environmentpath={{ puppet_environmentpath }} +{% endif %} [master] # These are needed when the puppetmaster is run by passenger