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