Commit 366093d809b6d45d3639c951fc14b3bdd8020dd8

Authored by Earth Ugat
0 parents

v0.1.0. Initial release of cfe-users cookbook.

  1 +cwd = "#{File.absolute_path(File.dirname(__FILE__))}/.."
  2 +
  3 +cookbook_path ["#{cwd}/cookbooks", "#{cwd}/site-cookbooks"]
  4 +log_level :info
  5 +log_location STDOUT
  6 +data_bag_path "#{cwd}/data_bags"
  7 +verbose_logging true
... ...
  1 +*~
  2 +*#
  3 +.#*
  4 +\#*#
  5 +.*.sw[a-z]
  6 +*.un~
  7 +pkg/
  8 +
  9 +# Berkshelf
  10 +.vagrant
  11 +/cookbooks
  12 +Berksfile.lock
  13 +
  14 +# Bundler
  15 +Gemfile.lock
  16 +bin/*
  17 +.bundle/*
  18 +
  19 +.kitchen/
  20 +.kitchen.local.yml
... ...
  1 +---
  2 +driver:
  3 + name: ec2
  4 + security_group_ids: ["sg-7f6fda18"]
  5 + region: us-west-2
  6 + availability_zone: b
  7 + subnet_id: subnet-d530d8b1
  8 + instance_type: t2.micro
  9 + associate_public_ip: true
  10 + require_chef_omnibus: 12.12.15
  11 + shared_credentials_profile: earth
  12 + aws_ssh_key_id: cfe_stg_20160222
  13 + iam_profile_name: CFE_ops-test
  14 +
  15 +provisioner:
  16 + name: chef_zero
  17 +
  18 +platforms:
  19 + - name: ubuntu-14.04
  20 + driver:
  21 + image_id: ami-a24598c2
  22 + transport:
  23 + username: ubuntu
  24 + ssh_key: ~/.ssh/cfe_stg_20160222.pem
  25 +
  26 +suites:
  27 + - name: default
  28 + data_bags_path: "data_bags"
  29 + run_list:
  30 + - recipe[cfe-users::default]
  31 + attributes:
... ...
  1 +source "https://supermarket.chef.io"
  2 +
  3 +metadata
... ...
  1 +## 0.1.0 - 2016-11-16
  2 +### Added
  3 +- Initial release of cfe-users cookbook.
  4 +
  5 +---
  6 +Changelog format reference: http://keepachangelog.com/en/0.3.0/
... ...
  1 +source 'https://rubygems.org'
  2 +
  3 +gem "test-kitchen"
  4 +gem "kitchen-vagrant"
  5 +gem "ec2"
... ...
  1 + Apache License
  2 + Version 2.0, January 2004
  3 + http://www.apache.org/licenses/
  4 +
  5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 +
  7 + 1. Definitions.
  8 +
  9 + "License" shall mean the terms and conditions for use, reproduction,
  10 + and distribution as defined by Sections 1 through 9 of this document.
  11 +
  12 + "Licensor" shall mean the copyright owner or entity authorized by
  13 + the copyright owner that is granting the License.
  14 +
  15 + "Legal Entity" shall mean the union of the acting entity and all
  16 + other entities that control, are controlled by, or are under common
  17 + control with that entity. For the purposes of this definition,
  18 + "control" means (i) the power, direct or indirect, to cause the
  19 + direction or management of such entity, whether by contract or
  20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  21 + outstanding shares, or (iii) beneficial ownership of such entity.
  22 +
  23 + "You" (or "Your") shall mean an individual or Legal Entity
  24 + exercising permissions granted by this License.
  25 +
  26 + "Source" form shall mean the preferred form for making modifications,
  27 + including but not limited to software source code, documentation
  28 + source, and configuration files.
  29 +
  30 + "Object" form shall mean any form resulting from mechanical
  31 + transformation or translation of a Source form, including but
  32 + not limited to compiled object code, generated documentation,
  33 + and conversions to other media types.
  34 +
  35 + "Work" shall mean the work of authorship, whether in Source or
  36 + Object form, made available under the License, as indicated by a
  37 + copyright notice that is included in or attached to the work
  38 + (an example is provided in the Appendix below).
  39 +
  40 + "Derivative Works" shall mean any work, whether in Source or Object
  41 + form, that is based on (or derived from) the Work and for which the
  42 + editorial revisions, annotations, elaborations, or other modifications
  43 + represent, as a whole, an original work of authorship. For the purposes
  44 + of this License, Derivative Works shall not include works that remain
  45 + separable from, or merely link (or bind by name) to the interfaces of,
  46 + the Work and Derivative Works thereof.
  47 +
  48 + "Contribution" shall mean any work of authorship, including
  49 + the original version of the Work and any modifications or additions
  50 + to that Work or Derivative Works thereof, that is intentionally
  51 + submitted to Licensor for inclusion in the Work by the copyright owner
  52 + or by an individual or Legal Entity authorized to submit on behalf of
  53 + the copyright owner. For the purposes of this definition, "submitted"
  54 + means any form of electronic, verbal, or written communication sent
  55 + to the Licensor or its representatives, including but not limited to
  56 + communication on electronic mailing lists, source code control systems,
  57 + and issue tracking systems that are managed by, or on behalf of, the
  58 + Licensor for the purpose of discussing and improving the Work, but
  59 + excluding communication that is conspicuously marked or otherwise
  60 + designated in writing by the copyright owner as "Not a Contribution."
  61 +
  62 + "Contributor" shall mean Licensor and any individual or Legal Entity
  63 + on behalf of whom a Contribution has been received by Licensor and
  64 + subsequently incorporated within the Work.
  65 +
  66 + 2. Grant of Copyright License. Subject to the terms and conditions of
  67 + this License, each Contributor hereby grants to You a perpetual,
  68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  69 + copyright license to reproduce, prepare Derivative Works of,
  70 + publicly display, publicly perform, sublicense, and distribute the
  71 + Work and such Derivative Works in Source or Object form.
  72 +
  73 + 3. Grant of Patent License. Subject to the terms and conditions of
  74 + this License, each Contributor hereby grants to You a perpetual,
  75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  76 + (except as stated in this section) patent license to make, have made,
  77 + use, offer to sell, sell, import, and otherwise transfer the Work,
  78 + where such license applies only to those patent claims licensable
  79 + by such Contributor that are necessarily infringed by their
  80 + Contribution(s) alone or by combination of their Contribution(s)
  81 + with the Work to which such Contribution(s) was submitted. If You
  82 + institute patent litigation against any entity (including a
  83 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  84 + or a Contribution incorporated within the Work constitutes direct
  85 + or contributory patent infringement, then any patent licenses
  86 + granted to You under this License for that Work shall terminate
  87 + as of the date such litigation is filed.
  88 +
  89 + 4. Redistribution. You may reproduce and distribute copies of the
  90 + Work or Derivative Works thereof in any medium, with or without
  91 + modifications, and in Source or Object form, provided that You
  92 + meet the following conditions:
  93 +
  94 + (a) You must give any other recipients of the Work or
  95 + Derivative Works a copy of this License; and
  96 +
  97 + (b) You must cause any modified files to carry prominent notices
  98 + stating that You changed the files; and
  99 +
  100 + (c) You must retain, in the Source form of any Derivative Works
  101 + that You distribute, all copyright, patent, trademark, and
  102 + attribution notices from the Source form of the Work,
  103 + excluding those notices that do not pertain to any part of
  104 + the Derivative Works; and
  105 +
  106 + (d) If the Work includes a "NOTICE" text file as part of its
  107 + distribution, then any Derivative Works that You distribute must
  108 + include a readable copy of the attribution notices contained
  109 + within such NOTICE file, excluding those notices that do not
  110 + pertain to any part of the Derivative Works, in at least one
  111 + of the following places: within a NOTICE text file distributed
  112 + as part of the Derivative Works; within the Source form or
  113 + documentation, if provided along with the Derivative Works; or,
  114 + within a display generated by the Derivative Works, if and
  115 + wherever such third-party notices normally appear. The contents
  116 + of the NOTICE file are for informational purposes only and
  117 + do not modify the License. You may add Your own attribution
  118 + notices within Derivative Works that You distribute, alongside
  119 + or as an addendum to the NOTICE text from the Work, provided
  120 + that such additional attribution notices cannot be construed
  121 + as modifying the License.
  122 +
  123 + You may add Your own copyright statement to Your modifications and
  124 + may provide additional or different license terms and conditions
  125 + for use, reproduction, or distribution of Your modifications, or
  126 + for any such Derivative Works as a whole, provided Your use,
  127 + reproduction, and distribution of the Work otherwise complies with
  128 + the conditions stated in this License.
  129 +
  130 + 5. Submission of Contributions. Unless You explicitly state otherwise,
  131 + any Contribution intentionally submitted for inclusion in the Work
  132 + by You to the Licensor shall be under the terms and conditions of
  133 + this License, without any additional terms or conditions.
  134 + Notwithstanding the above, nothing herein shall supersede or modify
  135 + the terms of any separate license agreement you may have executed
  136 + with Licensor regarding such Contributions.
  137 +
  138 + 6. Trademarks. This License does not grant permission to use the trade
  139 + names, trademarks, service marks, or product names of the Licensor,
  140 + except as required for reasonable and customary use in describing the
  141 + origin of the Work and reproducing the content of the NOTICE file.
  142 +
  143 + 7. Disclaimer of Warranty. Unless required by applicable law or
  144 + agreed to in writing, Licensor provides the Work (and each
  145 + Contributor provides its Contributions) on an "AS IS" BASIS,
  146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  147 + implied, including, without limitation, any warranties or conditions
  148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  149 + PARTICULAR PURPOSE. You are solely responsible for determining the
  150 + appropriateness of using or redistributing the Work and assume any
  151 + risks associated with Your exercise of permissions under this License.
  152 +
  153 + 8. Limitation of Liability. In no event and under no legal theory,
  154 + whether in tort (including negligence), contract, or otherwise,
  155 + unless required by applicable law (such as deliberate and grossly
  156 + negligent acts) or agreed to in writing, shall any Contributor be
  157 + liable to You for damages, including any direct, indirect, special,
  158 + incidental, or consequential damages of any character arising as a
  159 + result of this License or out of the use or inability to use the
  160 + Work (including but not limited to damages for loss of goodwill,
  161 + work stoppage, computer failure or malfunction, or any and all
  162 + other commercial damages or losses), even if such Contributor
  163 + has been advised of the possibility of such damages.
  164 +
  165 + 9. Accepting Warranty or Additional Liability. While redistributing
  166 + the Work or Derivative Works thereof, You may choose to offer,
  167 + and charge a fee for, acceptance of support, warranty, indemnity,
  168 + or other liability obligations and/or rights consistent with this
  169 + License. However, in accepting such obligations, You may act only
  170 + on Your own behalf and on Your sole responsibility, not on behalf
  171 + of any other Contributor, and only if You agree to indemnify,
  172 + defend, and hold each Contributor harmless for any liability
  173 + incurred by, or claims asserted against, such Contributor by reason
  174 + of your accepting any such warranty or additional liability.
  175 +
  176 + END OF TERMS AND CONDITIONS
  177 +
  178 + APPENDIX: How to apply the Apache License to your work.
  179 +
  180 + To apply the Apache License to your work, attach the following
  181 + boilerplate notice, with the fields enclosed by brackets "{}"
  182 + replaced with your own identifying information. (Don't include
  183 + the brackets!) The text should be enclosed in the appropriate
  184 + comment syntax for the file format. We also recommend that a
  185 + file or class name and description of purpose be included on the
  186 + same "printed page" as the copyright notice for easier
  187 + identification within third-party archives.
  188 +
  189 + Copyright 2016 Chromedia Far East, Inc.
  190 +
  191 + Licensed under the Apache License, Version 2.0 (the "License");
  192 + you may not use this file except in compliance with the License.
  193 + You may obtain a copy of the License at
  194 +
  195 + http://www.apache.org/licenses/LICENSE-2.0
  196 +
  197 + Unless required by applicable law or agreed to in writing, software
  198 + distributed under the License is distributed on an "AS IS" BASIS,
  199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  200 + See the License for the specific language governing permissions and
  201 + limitations under the License.
... ...
  1 +# cfe-users-cookbook
  2 +
  3 +Simplifies setting up of Linux users in Chromedia servers.
  4 +
  5 +## Supported Platforms
  6 +
  7 +So far, it's just Ubuntu 14.04.
  8 +
  9 +## Attributes
  10 +
  11 +<table>
  12 + <tr>
  13 + <th>Key</th>
  14 + <th>Type</th>
  15 + <th>Description</th>
  16 + <th>Default</th>
  17 + </tr>
  18 + <tr>
  19 + <td><tt>['cfe-users']['group']</tt></td>
  20 + <td>String</td>
  21 + <td>Name of group for server users.</td>
  22 + <td><tt>'devs'</tt></td>
  23 + </tr>
  24 + <tr>
  25 + <td><tt>['cfe-users']['data_bag']</tt></td>
  26 + <td>String</td>
  27 + <td>Name of data bag containg user items to be created/removed.</td>
  28 + <td><tt>'users_devs'</tt></td>
  29 + </tr>
  30 + <tr>
  31 + <td><tt>['cfe-users']['admin_group']</tt></td>
  32 + <td>String</td>
  33 + <td>Name of group for admin users.</td>
  34 + <td><tt>'sysadmins'</tt></td>
  35 + </tr>
  36 + <tr>
  37 + <td><tt>['cfe-users']['admin_data_bag']</tt></td>
  38 + <td>String</td>
  39 + <td>Name of data bag containing admin user items to be created/removed.</td>
  40 + <td><tt>'users_sysadmins'</tt></td>
  41 + </tr>
  42 + <tr>
  43 + <td><tt>['cfe-users']['post_run_reboot']</tt></td>
  44 + <td>Boolean</td>
  45 + <td>This cookbook should normally request a reboot after the Chef client run. Set to 'false' to disable this behavior.</td>
  46 + <td><tt>true</tt></td>
  47 + </tr>
  48 +</table>
  49 +
  50 +## Usage
  51 +
  52 +By default, dev users will be under a group called `devs`, and admins are are called `sysadmins`.
  53 +
  54 +Simply create a data bag called `users_devs` in your cookbook. Every item inside will correspond to a user under the `devs` group. Similarly, create a data bag called `users_sysadmins`, containing items that correspond to admin users.
  55 +
  56 +Each user data bag item must contain the following attributes (example for Ubuntu 14.04 user):
  57 +```json
  58 +john.json
  59 +{
  60 + "comment": "John Smith",
  61 + "shell": "/bin/bash",
  62 + "groups": [
  63 + "john",
  64 + "devs",
  65 + "adm",
  66 + "plugdev",
  67 + "netdev"
  68 + ],
  69 + "ssh_keys": "ssh-rsa XXX... john"
  70 + "id": "john"
  71 +}
  72 +```
  73 +
  74 +The above json will create the user `john`. If an attribute `"action": "remove"` exists, then the user will be deleted, instead. Please see the example data bag in `data_bags/users\_example/example\_user.json`.
  75 +
  76 +### cfe-users::default
  77 +
  78 +Include `cfe-users` in your node's `run_list`:
  79 +
  80 +```json
  81 +{
  82 + "run_list": [
  83 + "recipe[cfe-users::default]"
  84 + ]
  85 +}
  86 +```
  87 +
  88 +## License and Authors
  89 +
  90 +Author:: Earth U. (<sysadmin @ chromedia.com>)
... ...
  1 +#
  2 +# Author:: Earth U (<sysadmin @ chromedia.com>)
  3 +# Cookbook Name:: cfe-users
  4 +# Attribute:: default
  5 +#
  6 +# Copyright 2016, Chromedia Far East, Inc.
  7 +#
  8 +# Licensed under the Apache License, Version 2.0 (the "License");
  9 +# you may not use this file except in compliance with the License.
  10 +# You may obtain a copy of the License at
  11 +#
  12 +# http://www.apache.org/licenses/LICENSE-2.0
  13 +#
  14 +# Unless required by applicable law or agreed to in writing, software
  15 +# distributed under the License is distributed on an "AS IS" BASIS,
  16 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17 +# See the License for the specific language governing permissions and
  18 +# limitations under the License.
  19 +#
  20 +
  21 +default['cfe-users']['group'] = 'devs'
  22 +default['cfe-users']['gid'] = 4000
  23 +default['cfe-users']['data_bag'] = 'users_devs'
  24 +
  25 +default['cfe-users']['admin_group'] = 'sysadmins'
  26 +default['cfe-users']['admin_gid'] = 4001
  27 +default['cfe-users']['admin_data_bag'] = 'users_sysadmins'
  28 +
  29 +default['cfe-users']['post_run_reboot'] = true
  30 +
  31 +default['authorization']['sudo']['groups'] = [
  32 + node['cfe-users']['group'],
  33 + node['cfe-users']['admin_group']
  34 +]
  35 +
  36 +# Cookbook sudo constants. Do not modify.
  37 +
  38 +default['authorization']['sudo']['passwordless'] = true
  39 +default['authorization']['sudo']['include_sudoers_d'] = false
  40 +
  41 +if node['platform'] == 'ubuntu' && node['platform_version'].to_f == 14.04
  42 + default['authorization']['sudo']['sudoers_defaults'] = [
  43 + 'env_reset',
  44 + 'mail_badpass',
  45 + 'secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"'
  46 + ]
  47 +end
... ...
  1 +# Put files/directories that should be ignored in this file when uploading
  2 +# or sharing to the community site.
  3 +# Lines that start with '# ' are comments.
  4 +
  5 +# OS generated files #
  6 +######################
  7 +.DS_Store
  8 +Icon?
  9 +nohup.out
  10 +ehthumbs.db
  11 +Thumbs.db
  12 +
  13 +# SASS #
  14 +########
  15 +.sass-cache
  16 +
  17 +# EDITORS #
  18 +###########
  19 +\#*
  20 +.#*
  21 +*~
  22 +*.sw[a-z]
  23 +*.bak
  24 +REVISION
  25 +TAGS*
  26 +tmtags
  27 +*_flymake.*
  28 +*_flymake
  29 +*.tmproj
  30 +.project
  31 +.settings
  32 +mkmf.log
  33 +
  34 +## COMPILED ##
  35 +##############
  36 +a.out
  37 +*.o
  38 +*.pyc
  39 +*.so
  40 +*.com
  41 +*.class
  42 +*.dll
  43 +*.exe
  44 +*/rdoc/
  45 +
  46 +# Testing #
  47 +###########
  48 +.watchr
  49 +.rspec
  50 +spec/*
  51 +spec/fixtures/*
  52 +test/*
  53 +features/*
  54 +Guardfile
  55 +Procfile
  56 +
  57 +# SCM #
  58 +#######
  59 +.git
  60 +*/.git
  61 +.gitignore
  62 +.gitmodules
  63 +.gitconfig
  64 +.gitattributes
  65 +.svn
  66 +*/.bzr/*
  67 +*/.hg/*
  68 +*/.svn/*
  69 +
  70 +# Berkshelf #
  71 +#############
  72 +cookbooks/*
  73 +tmp
  74 +
  75 +# Cookbooks #
  76 +#############
  77 +CONTRIBUTING
  78 +CHANGELOG*
  79 +
  80 +# Strainer #
  81 +############
  82 +Colanderfile
  83 +Strainerfile
  84 +.colander
  85 +.strainer
  86 +
  87 +# Vagrant #
  88 +###########
  89 +.vagrant
  90 +Vagrantfile
  91 +
  92 +# Travis #
  93 +##########
  94 +.travis.yml
... ...
  1 +{
  2 + "comment": "Real Name of User",
  3 + "shell": "/bin/bash",
  4 + "groups": [
  5 + // Always include user's default group
  6 + "example_user",
  7 + // Always include either the group node['cfe-users']['group']
  8 + // or node['cfe-users']['admin_group']
  9 + "devs",
  10 + // Include these three groups in Ubuntu 14.04:
  11 + "adm",
  12 + "plugdev",
  13 + "netdev"
  14 + ],
  15 + "ssh_keys": "ssh-rsa xxxx cfe_xxx",
  16 +
  17 + // If "action" is set to "remove", the user will be deleted. If no "action" is set, the default action is to create the user.
  18 + //"action": "remove",
  19 +
  20 + "id": "example_user"
  21 +}
... ...
  1 +name 'cfe-users'
  2 +maintainer 'Chromedia Far East, Inc.'
  3 +maintainer_email 'sysadmin@chromedia.com'
  4 +license 'Apache License'
  5 +description 'Simplifies setting up of users in Linux servers.'
  6 +long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
  7 +version '0.1.0'
  8 +
  9 +depends 'users', '~> 4.0.1'
  10 +depends 'sudo', '~> 3.1.0'
  11 +
  12 +supports 'ubuntu', '>= 14.04'
... ...
  1 +#
  2 +# Author:: Earth U (<sysadmin @ chromedia.com>)
  3 +# Cookbook Name:: cfe-users
  4 +# Recipes:: default
  5 +#
  6 +# Copyright 2016, Chromedia Far East, Inc.
  7 +#
  8 +# Licensed under the Apache License, Version 2.0 (the "License");
  9 +# you may not use this file except in compliance with the License.
  10 +# You may obtain a copy of the License at
  11 +#
  12 +# http://www.apache.org/licenses/LICENSE-2.0
  13 +#
  14 +# Unless required by applicable law or agreed to in writing, software
  15 +# distributed under the License is distributed on an "AS IS" BASIS,
  16 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17 +# See the License for the specific language governing permissions and
  18 +# limitations under the License.
  19 +#
  20 +
  21 +users_manage node['cfe-users']['group'] do
  22 + group_id node['cfe-users']['gid']
  23 + data_bag node['cfe-users']['data_bag']
  24 + action [:remove, :create]
  25 +end
  26 +
  27 +users_manage node['cfe-users']['admin_group'] do
  28 + group_id node['cfe-users']['admin_gid']
  29 + data_bag node['cfe-users']['admin_data_bag']
  30 + action [:remove, :create]
  31 + if node['cfe-users']['post_run_reboot']
  32 + notifies :request_reboot, 'reboot[reboot_after_admin_users]'
  33 + end
  34 +end
  35 +
  36 +include_recipe 'sudo'
  37 +
  38 +# We need to reboot in order to refresh temp files and be able to
  39 +# run Chef again in the future as the new admin user.
  40 +reboot 'reboot_after_admin_users' do
  41 + action :nothing
  42 + reason 'Reboot after setting up admin users'
  43 +end
... ...