From c211d1fdf7d4723d7b7b12839c5e994f6c2ebace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Sch=C3=B6ldstr=C3=B6m?= Date: Fri, 2 Jun 2017 10:58:06 -0500 Subject: [PATCH 1/5] Issue #36: Add option to install npm/composer/pip/gem packages --- default.config.yml | 8 ++++++++ main.yml | 3 +++ tasks/extra-packages.yml | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 tasks/extra-packages.yml diff --git a/default.config.yml b/default.config.yml index af145cb..45792bd 100644 --- a/default.config.yml +++ b/default.config.yml @@ -75,5 +75,13 @@ mas_password: "" osx_script: "~/.osx --no-restart" +# Install packages from other package managers. +# Note: You are responsible for making sure the required package managers are +# installed, eg. through homebrew. +composer_packages: [] +gem_packages: [] +npm_packages: [] +pip_packages: [] + # Glob pattern to ansible task files to run after all other tasks are finished. post_provision_tasks: [] diff --git a/main.yml b/main.yml index 1998870..3d25464 100644 --- a/main.yml +++ b/main.yml @@ -33,6 +33,9 @@ when: configure_osx tags: ['osx'] + - include: tasks/extra-packages.yml + tags: ['extra-packages'] + - name: Run configured post-provision ansible task files. include: "{{ outer_item }}" loop_control: diff --git a/tasks/extra-packages.yml b/tasks/extra-packages.yml new file mode 100644 index 0000000..8de15ca --- /dev/null +++ b/tasks/extra-packages.yml @@ -0,0 +1,31 @@ +--- +- name: Install global Composer packages. + composer: + command: "{{ (item.state | default('present') == 'absent') | ternary('remove', 'require') }}" + arguments: "{{ item.name | default(item) }} {{ item.version | default('@stable') }}" + # Ansible 2.4 supports `global_command` making `working_dir` optional. + working_dir: "{{ lookup('env', 'COMPOSER_HOME') | default('~/.composer', true) }}" + with_items: "{{ composer_packages }}" + +- name: Install global NPM packages. + npm: + name: "{{ item.name | default(item) }}" + version: "{{ item.version | default('latest') }}" + state: "{{ item.state | default('present') }}" + global: yes + with_items: "{{ npm_packages }}" + +- name: Install global Pip packages. + pip: + name: "{{ item.name | default(item) }}" + version: "{{ item.version | default(omit) }}" + state: "{{ item.state | default('latest') }}" + with_items: "{{ pip_packages }}" + +- name: Install global Ruby gems. + gem: + name: "{{ item.name | default(item) }}" + version: "{{ item.version | default(omit) }}" + state: "{{ item.state | default('latest') }}" + user_install: false + with_items: "{{ gem_packages }}" From b70e5a1c235f0345b5e4262d599e21dedcad0ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Sch=C3=B6ldstr=C3=B6m?= Date: Sun, 4 Jun 2017 17:05:59 -0500 Subject: [PATCH 2/5] Add examples for extra packages to README --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3016dc8..8858fd6 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ This is a work in progress, and is mostly a means for me to document my current ### Running a specific set of tagged tasks -You can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook`'s `--tags` flag. The tags available are `dotfiles`, `homebrew`, `mas` and `osx`. +You can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook`'s `--tags` flag. The tags available are `dotfiles`, `homebrew`, `mas`, `extra-packages` and `osx`. ansible-playbook main.yml -i inventory -K --tags "dotfiles,homebrew" @@ -46,6 +46,15 @@ You can override any of the defaults configured in `default.config.yml` by creat - { id: 557168941, name: "Tweetbot" } - { id: 497799835, name: "Xcode" } + composer_packages: + - hirak/prestissimo + - name: drush/drush + version: '^8.1' + + gem_packages: + - name: bundler + state: latest + Any variable can be overridden in `config.yml`; see the supporting roles' documentation for a complete list of available variables. ## Included Applications / Configuration (Default) From 09c6732928da10f1b6f377cb7dbeb9d93b6251cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Sch=C3=B6ldstr=C3=B6m?= Date: Sun, 4 Jun 2017 17:07:33 -0500 Subject: [PATCH 3/5] add executable option for nvm/pip3/rvm --- tasks/extra-packages.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tasks/extra-packages.yml b/tasks/extra-packages.yml index 8de15ca..29c6a1e 100644 --- a/tasks/extra-packages.yml +++ b/tasks/extra-packages.yml @@ -13,6 +13,7 @@ version: "{{ item.version | default('latest') }}" state: "{{ item.state | default('present') }}" global: yes + executable: "{{ item.executable | default(omit) }}" with_items: "{{ npm_packages }}" - name: Install global Pip packages. @@ -20,6 +21,7 @@ name: "{{ item.name | default(item) }}" version: "{{ item.version | default(omit) }}" state: "{{ item.state | default('latest') }}" + executable: "{{ item.executable | default(omit) }}" with_items: "{{ pip_packages }}" - name: Install global Ruby gems. @@ -28,4 +30,5 @@ version: "{{ item.version | default(omit) }}" state: "{{ item.state | default('latest') }}" user_install: false + executable: "{{ item.executable | default(omit) }}" with_items: "{{ gem_packages }}" From 8ec016b7c8ae133146f36a1fa2e103fff5a9ca9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Sch=C3=B6ldstr=C3=B6m?= Date: Sun, 4 Jun 2017 17:08:05 -0500 Subject: [PATCH 4/5] normalize version to present and re-order --- tasks/extra-packages.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasks/extra-packages.yml b/tasks/extra-packages.yml index 29c6a1e..ee9254c 100644 --- a/tasks/extra-packages.yml +++ b/tasks/extra-packages.yml @@ -10,8 +10,8 @@ - name: Install global NPM packages. npm: name: "{{ item.name | default(item) }}" - version: "{{ item.version | default('latest') }}" state: "{{ item.state | default('present') }}" + version: "{{ item.version | default(omit) }}" global: yes executable: "{{ item.executable | default(omit) }}" with_items: "{{ npm_packages }}" @@ -19,16 +19,16 @@ - name: Install global Pip packages. pip: name: "{{ item.name | default(item) }}" + state: "{{ item.state | default('present') }}" version: "{{ item.version | default(omit) }}" - state: "{{ item.state | default('latest') }}" executable: "{{ item.executable | default(omit) }}" with_items: "{{ pip_packages }}" - name: Install global Ruby gems. gem: name: "{{ item.name | default(item) }}" + state: "{{ item.state | default('present') }}" version: "{{ item.version | default(omit) }}" - state: "{{ item.state | default('latest') }}" - user_install: false + user_install: no executable: "{{ item.executable | default(omit) }}" with_items: "{{ gem_packages }}" From 02cd32af852130f3a88149a74760483225328537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Sch=C3=B6ldstr=C3=B6m?= Date: Sun, 4 Jun 2017 23:55:40 -0500 Subject: [PATCH 5/5] Add examples to default.config.yml and improve readme examples [ci skip] --- README.md | 8 +++++++- default.config.yml | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8858fd6..2885acb 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ You can override any of the defaults configured in `default.config.yml` by creat - { id: 497799835, name: "Xcode" } composer_packages: - - hirak/prestissimo + - name: hirak/prestissimo - name: drush/drush version: '^8.1' @@ -55,6 +55,12 @@ You can override any of the defaults configured in `default.config.yml` by creat - name: bundler state: latest + npm_packages: + - name: webpack + + pip_packages: + - name: mkdocs + Any variable can be overridden in `config.yml`; see the supporting roles' documentation for a complete list of available variables. ## Included Applications / Configuration (Default) diff --git a/default.config.yml b/default.config.yml index 45792bd..a28f8a4 100644 --- a/default.config.yml +++ b/default.config.yml @@ -79,9 +79,21 @@ osx_script: "~/.osx --no-restart" # Note: You are responsible for making sure the required package managers are # installed, eg. through homebrew. composer_packages: [] + # - name: drush + # state: present # present/absent, default: present + # version: "^8.1" # default: N/A gem_packages: [] + # - name: bundler + # state: present # present/absent/latest, default: present + # version: "~> 1.15.1" # default: N/A npm_packages: [] + # - name: webpack + # state: present # present/absent/latest, default: present + # version: "^2.6" # default: N/A pip_packages: [] + # - name: mkdocs + # state: present # present/absent/latest, default: present + # version: "0.16.3" # default: N/A # Glob pattern to ansible task files to run after all other tasks are finished. post_provision_tasks: []