itchef/cookbooks/cpe_nomad/resources/darwin.rb (144 lines of code) (raw):

# ~FC074 # Cookbook Name:: cpe_nomad # Resources:: darwin # # Copyright (c) Facebook, Inc. and its affiliates. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # resource_name :cpe_nomad_darwin provides :cpe_nomad_darwin, :os => 'darwin' default_action :manage action :manage do configure_install if node['cpe_nomad']['install'] configure_profile if node['cpe_nomad']['configure'] configure_launchd if node['cpe_nomad']['enable'] configure_login if node['cpe_nomad']['login']['install'] end action_class do def configure_install pkg = node['cpe_nomad']['pkg'] cpe_remote_pkg pkg['name'] do version pkg['version'] receipt pkg['receipt'] checksum pkg['checksum'] pkg_url pkg['pkg_url'] if pkg['pkg_url'] pkg_name pkg['pkg_name'] if pkg['pkg_name'] notifies :restart, "launchd[#{lddomain}]" if node['cpe_nomad']['enable'] notifies :run, 'ruby_block[log_install]', :immediately end ruby_block 'log_install' do block do log_vars('install', 'success') msg = (node['cpe_nomad']['pkg']['version']).to_s log_if(msg) { node['cpe_nomad']['install'] } end action :nothing end end def configure_login pkg = node['cpe_nomad']['login']['pkg'] cpe_remote_pkg pkg['name'] do version pkg['version'] receipt pkg['receipt'] checksum pkg['checksum'] pkg_url pkg['pkg_url'] if pkg['pkg_url'] pkg_name pkg['pkg_name'] if pkg['pkg_name'] notifies :run, 'ruby_block[log_login_install]', :immediately end ruby_block 'log_login_install' do block do log_vars('install_login', 'success') msg = (node['cpe_nomad']['login']['pkg']['version']).to_s log_if(msg) { node['cpe_nomad']['login']['install'] } end action :nothing end end def configure_profile nomad_prefs = node['cpe_nomad']['prefs'].reject { |_k, v| v.nil? } login_prefs = node['cpe_nomad']['login']['prefs'].reject { |_k, v| v.nil? } actions_prefs = node['cpe_nomad']['actions']['prefs'].reject { |_k, v| v.nil? } if [ nomad_prefs, login_prefs, actions_prefs, ].all?(&:empty?) Chef::Log.info("#{cookbook_name}: prefs not found.") return end unless nomad_prefs.empty? { 'PayloadEnabled' => true, 'PayloadIdentifier' => '7D5A6BCB-1CFD-44BC-ADCF-B511A63F69E3', 'PayloadDescription' => 'NoMAD Settings', 'PayloadVersion' => 1, 'PayloadType' => 'com.trusourcelabs.NoMAD', 'PayloadUUID' => '7D5A6BCB-1CFD-44BC-ADCF-B511A63F69E3', }.each { |k, v| nomad_prefs[k] = v } end unless login_prefs.empty? { 'PayloadEnabled' => true, 'PayloadIdentifier' => '94f48d1b-8fbf-4c40-9325-9c3775450250', 'PayloadDescription' => 'NoMADLoginAD Settings', 'PayloadVersion' => 1, 'PayloadType' => 'menu.nomad.login.ad', 'PayloadUUID' => '94f48d1b-8fbf-4c40-9325-9c3775450250', }.each { |k, v| login_prefs[k] = v } end unless actions_prefs.empty? { 'PayloadEnabled' => true, 'PayloadIdentifier' => '8c8b263a-2fa1-4471-baf2-9bafdd90e74b', 'PayloadDescription' => 'NoMAD Actions Settings', 'PayloadVersion' => 1, 'PayloadType' => 'menu.nomad.actions', 'PayloadUUID' => '8c8b263a-2fa1-4471-baf2-9bafdd90e74b', }.each { |k, v| actions_prefs[k] = v } end prefix = node['cpe_profiles']['prefix'] organization = node['organization'] ? node['organization'] : 'Facebook' { 'NoMAD' => nomad_prefs, 'NoMAD Login' => login_prefs, 'NoMAD Actions' => actions_prefs, }.each do |pref_name, prefs| next if prefs.empty? profile_id = "#{prefix}.#{pref_name.downcase.sub(' ', '_')}" profile = { 'PayloadEnabled' => true, 'PayloadDisplayName' => pref_name, 'PayloadScope' => 'System', 'PayloadType' => 'Configuration', 'PayloadRemovalDisallowed' => true, 'PayloadDescription' => '', 'PayloadVersion' => 1, 'PayloadOrganization' => organization, 'PayloadIdentifier' => profile_id, 'PayloadUUID' => '5312D107-393D-493C-A8D2-14D6E02A0967', 'PayloadContent' => [prefs], } node.default['cpe_profiles'][profile_id] = profile end end def configure_launchd launchd lddomain do only_if do ::File.exist?("/Library/LaunchAgents/#{lddomain}.plist") end type 'agent' action :nothing end node.default['fb_launchd']['jobs'][lddomain.split('.')[-1]] = node.default['cpe_nomad']['launchagent'] end def lddomain "#{node['fb_launchd']['prefix']}.nomad" end def log_vars(action, status) @type = 'cpe_nomad' @action = action @status = status end def log_if(msg) CPE::Log.if( msg, :type => @type, :action => @action, :status => @status ) { yield } end end