summaryrefslogtreecommitdiff
path: root/lib/chef/resource/execute.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/resource/execute.rb')
-rw-r--r--lib/chef/resource/execute.rb86
1 files changed, 10 insertions, 76 deletions
diff --git a/lib/chef/resource/execute.rb b/lib/chef/resource/execute.rb
index b3c182ddd8..2584a6e4b5 100644
--- a/lib/chef/resource/execute.rb
+++ b/lib/chef/resource/execute.rb
@@ -27,15 +27,7 @@ class Chef
provides :execute, target_mode: true
- description <<~DESC
- Use the **execute** resource to execute a single command. Commands that
- are executed with this resource are (by their nature) not idempotent,
- as they are typically unique to the environment in which they are run.
- Use not_if and only_if to guard this resource for idempotence.
-
- Note: Use the **script** resource to execute a script using a specific
- interpreter (Ruby, Python, Perl, csh, or Bash).'
- DESC
+ description "Use the **execute** resource to execute a single command. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use not_if and only_if to guard this resource for idempotence. Note: Use the **script** resource to execute a script using a specific interpreter (Ruby, Python, Perl, csh, or Bash)."
examples <<~EXAMPLES
**Run a command upon notification**:
@@ -90,35 +82,6 @@ class Chef
file '/etc/yum.repos.d/bad.repo' do
action :delete
notifies :run, 'execute[clean-yum-cache]', :immediately
-
- notifies :create, 'ruby_block[reload-internal-yum-cache]', :immediately
- end
- ```
-
- **Install repositories from a file, trigger a command, and force the internal cache to reload**:
-
- The following example shows how to install new Yum repositories from a file,
- where the installation of the repository triggers a creation of the Yum cache
- that forces the internal cache for Chef Infra Client to reload.
-
- ```ruby
- execute 'create-yum-cache' do
- command 'yum -q makecache'
- action :nothing
- end
-
- ruby_block 'reload-internal-yum-cache' do
- block do
- Chef::Provider::Package::Yum::YumCache.instance.reload
- end
- action :nothing
- end
-
- cookbook_file '/etc/yum.repos.d/custom.repo' do
- source 'custom'
- mode '0755'
- notifies :run, 'execute[create-yum-cache]', :immediately
- notifies :create, 'ruby_block[reload-internal-yum-cache]', :immediately
end
```
@@ -243,9 +206,7 @@ class Chef
execute 'install-mysql' do
command "mv \#{node['mysql']['data_dir']} \#{node['mysql']['ec2_path']}"
- not_if do
- FileTest.directory?(node['mysql']['ec2_path'])
- end
+ not_if { ::File.directory?(node['mysql']['ec2_path']) }
end
[node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir|
@@ -293,8 +254,7 @@ class Chef
remote_file "\#{Chef::Config[:file_cache_path]}/distribute_setup.py" do
source 'http://python-distribute.org/distribute_setup.py'
mode '0755'
-
- not_if { File.exist?(pip_binary) }
+ not_if { ::File.exist?(pip_binary) }
end
execute 'install-pip' do
@@ -302,7 +262,7 @@ class Chef
command <<~EOF
# command for installing Python goes here
EOF
- not_if { File.exist?(pip_binary) }
+ not_if { ::File.exist?(pip_binary) }
end
```
@@ -334,7 +294,7 @@ class Chef
```ruby
execute 'start-tomcat' do
- command '/etc/init.d/tomcat6 start'
+ command '/etc/init.d/tomcat start'
action :run
end
```
@@ -350,27 +310,12 @@ class Chef
search for users:
```ruby
- # the following code sample comes from the openvpn cookbook: https://github.com/chef-cookbooks/openvpn
+ # the following code sample comes from the openvpn cookbook:
search("users", "*:*") do |u|
execute "generate-openvpn-\#{u['id']}" do
command "./pkitool \#{u['id']}"
cwd '/etc/openvpn/easy-rsa'
-
- environment(
- 'EASY_RSA' => '/etc/openvpn/easy-rsa',
- 'KEY_CONFIG' => '/etc/openvpn/easy-rsa/openssl.cnf',
- 'KEY_DIR' => node['openvpn']['key_dir'],
- 'CA_EXPIRE' => node['openvpn']['key']['ca_expire'].to_s,
- 'KEY_EXPIRE' => node['openvpn']['key']['expire'].to_s,
- 'KEY_SIZE' => node['openvpn']['key']['size'].to_s,
- 'KEY_COUNTRY' => node['openvpn']['key']['country'],
- 'KEY_PROVINCE' => node['openvpn']['key']['province'],
- 'KEY_CITY' => node['openvpn']['key']['city'],
- 'KEY_ORG' => node['openvpn']['key']['org'],
- 'KEY_EMAIL' => node['openvpn']['key']['email']
- )
- not_if { File.exist?("\#{node['openvpn']['key_dir']}/\#{u['id']}.crt") }
end
%w{ conf ovpn }.each do |ext|
@@ -379,23 +324,12 @@ class Chef
variables :username => u['id']
end
end
-
- execute "create-openvpn-tar-\#{u['id']}" do
- cwd node['openvpn']['key_dir']
- command <<~EOH
- tar zcf \#{u['id']}.tar.gz ca.crt \#{u['id']}.crt \#{u['id']}.key \#{u['id']}.conf \#{u['id']}.ovpn
- EOH
- not_if { File.exist?("\#{node['openvpn']['key_dir']}/\#{u['id']}.tar.gz") }
- end
end
```
where
- - the search will use both of the **execute** resources, unless the condition
- specified by the `not_if` commands are met
- - the `environments` property in the first **execute** resource is being used to
- define values that appear as variables in the OpenVPN configuration
+ - the search data will be used to create **execute** resources
- the **template** resource tells Chef Infra Client which template to use
**Enable remote login for macOS**:
@@ -594,13 +528,13 @@ class Chef
description: "The current working directory from which the command will be run."
property :environment, Hash,
- description: "A Hash of environment variables in the form of ({'ENV_VARIABLE' => 'VALUE'})."
+ description: "A Hash of environment variables in the form of `({'ENV_VARIABLE' => 'VALUE'})`. **Note**: These variables must exist for a command to be run successfully."
property :group, [ String, Integer ],
description: "The group name or group ID that must be changed before running a command."
property :live_stream, [ TrueClass, FalseClass ], default: false,
- description: "Send the output of the command run by this execute resource block to the #{Chef::Dist::CLIENT} event stream."
+ description: "Send the output of the command run by this execute resource block to the #{Chef::Dist::PRODUCT} event stream."
# default_env defaults to `false` so that the command execution more exactly matches what the user gets on the command line without magic
property :default_env, [ TrueClass, FalseClass ], desired_state: false, default: false,
@@ -628,7 +562,7 @@ class Chef
# lazy used to set default value of sensitive to true if password is set
property :sensitive, [ TrueClass, FalseClass ],
- description: "Ensure that sensitive resource data is not logged by the #{Chef::Dist::CLIENT}.",
+ description: "Ensure that sensitive resource data is not logged by the #{Chef::Dist::PRODUCT}.",
default: lazy { password ? true : false }, default_description: "True if the password property is set. False otherwise."
property :elevated, [ TrueClass, FalseClass ], default: false,