Support `mkdir' status attributes
This commit is contained in:
parent
6f2ff17b94
commit
a84b34b7ca
@ -6,8 +6,8 @@ Feature: `mkdir' task action
|
|||||||
"""
|
"""
|
||||||
task :mkdir_action do
|
task :mkdir_action do
|
||||||
mkdir 'some_directory'
|
mkdir 'some_directory'
|
||||||
mkdir 'some_directory_0700', 0700
|
mkdir 'some_directory_0700', mode: 0700
|
||||||
mkdir 'some_directory_0500', 0500
|
mkdir 'some_directory_0711', mode: 0711
|
||||||
end
|
end
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -15,10 +15,10 @@ Feature: `mkdir' task action
|
|||||||
When I successfully execute the recipe on remote target
|
When I successfully execute the recipe on remote target
|
||||||
Then the remote directory "some_directory" must exists
|
Then the remote directory "some_directory" must exists
|
||||||
|
|
||||||
Scenario: creates directory with given permissions
|
Scenario: creates directory with given attributes
|
||||||
When I successfully execute the recipe on remote target
|
When I successfully execute the recipe on remote target
|
||||||
Then the remote directory "some_directory_0700" must have 0700 mode
|
Then the remote directory "some_directory_0700" must have 0700 mode
|
||||||
And the remote directory "some_directory_0500" must have 0500 mode
|
And the remote directory "some_directory_0711" must have 0711 mode
|
||||||
|
|
||||||
Scenario: creates directories recursively
|
Scenario: creates directories recursively
|
||||||
Given a recipe with:
|
Given a recipe with:
|
||||||
|
@ -7,11 +7,12 @@ module Producer
|
|||||||
def_delegators :@env, :input, :output, :error_output, :remote
|
def_delegators :@env, :input, :output, :error_output, :remote
|
||||||
def_delegators :remote, :fs
|
def_delegators :remote, :fs
|
||||||
|
|
||||||
attr_reader :env, :arguments
|
attr_reader :env, :arguments, :options
|
||||||
|
|
||||||
def initialize(env, *args)
|
def initialize(env, *args, **options)
|
||||||
@env = env
|
@env = env
|
||||||
@arguments = args
|
@arguments = args
|
||||||
|
@options = options
|
||||||
end
|
end
|
||||||
|
|
||||||
def name
|
def name
|
||||||
|
@ -2,6 +2,12 @@ module Producer
|
|||||||
module Core
|
module Core
|
||||||
module Actions
|
module Actions
|
||||||
class Mkdir < Action
|
class Mkdir < Action
|
||||||
|
def initialize(env, *args, **options)
|
||||||
|
super
|
||||||
|
@options[:permissions] = @options.delete :mode if @options.key? :mode
|
||||||
|
@options[:owner] = @options.delete :user if @options.key? :user
|
||||||
|
end
|
||||||
|
|
||||||
def name
|
def name
|
||||||
'mkdir'
|
'mkdir'
|
||||||
end
|
end
|
||||||
@ -10,7 +16,7 @@ module Producer
|
|||||||
path.descend do |p|
|
path.descend do |p|
|
||||||
next if fs.dir? p
|
next if fs.dir? p
|
||||||
fs.mkdir p.to_s
|
fs.mkdir p.to_s
|
||||||
fs.chmod p.to_s, mode if mode
|
fs.setstat p.to_s, @options unless @options.empty?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -20,10 +26,6 @@ module Producer
|
|||||||
def path
|
def path
|
||||||
Pathname.new(arguments.first)
|
Pathname.new(arguments.first)
|
||||||
end
|
end
|
||||||
|
|
||||||
def mode
|
|
||||||
arguments[1]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -20,13 +20,16 @@ module Producer
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def chmod(path, mode)
|
def setstat(path, attributes)
|
||||||
sftp.setstat! path, permissions: mode
|
sftp.setstat! path, attributes
|
||||||
end
|
end
|
||||||
|
|
||||||
def mkdir(path, mode = nil)
|
def chmod(path, mode)
|
||||||
options = mode ? { permissions: mode } : {}
|
setstat path, permissions: mode
|
||||||
sftp.mkdir! path, options
|
end
|
||||||
|
|
||||||
|
def mkdir(path, attributes = {})
|
||||||
|
ret = sftp.mkdir! path, attributes
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_read(path)
|
def file_read(path)
|
||||||
|
@ -4,10 +4,23 @@ module Producer::Core
|
|||||||
module Actions
|
module Actions
|
||||||
describe Mkdir, :env do
|
describe Mkdir, :env do
|
||||||
let(:path) { 'some_path' }
|
let(:path) { 'some_path' }
|
||||||
subject(:mkdir) { described_class.new(env, path) }
|
let(:options) { { } }
|
||||||
|
subject(:mkdir) { described_class.new(env, path, options) }
|
||||||
|
|
||||||
it_behaves_like 'action'
|
it_behaves_like 'action'
|
||||||
|
|
||||||
|
describe '#initialize' do
|
||||||
|
let(:options) { { mode: 0700, user: 'root' } }
|
||||||
|
|
||||||
|
it 'translates mode option as permissions' do
|
||||||
|
expect(mkdir.options[:permissions]).to eq 0700
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'translates user option as owner' do
|
||||||
|
expect(mkdir.options[:owner]).to eq 'root'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#apply' do
|
describe '#apply' do
|
||||||
before { allow(remote_fs).to receive(:dir?) { false } }
|
before { allow(remote_fs).to receive(:dir?) { false } }
|
||||||
|
|
||||||
@ -16,11 +29,11 @@ module Producer::Core
|
|||||||
mkdir.apply
|
mkdir.apply
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a mode was given' do
|
context 'when status options are given' do
|
||||||
subject(:mkdir) { described_class.new(env, path, 0700) }
|
let(:options) { { group: 'wheel' } }
|
||||||
|
|
||||||
it 'changes the directory with given mode' do
|
it 'changes the directory status with given options' do
|
||||||
expect(remote_fs).to receive(:chmod).with(path, 0700)
|
expect(remote_fs).to receive(:setstat).with(path, options)
|
||||||
mkdir.apply
|
mkdir.apply
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -38,7 +51,7 @@ module Producer::Core
|
|||||||
context 'when directory already exists' do
|
context 'when directory already exists' do
|
||||||
before { allow(remote_fs).to receive(:dir?) { true } }
|
before { allow(remote_fs).to receive(:dir?) { true } }
|
||||||
|
|
||||||
it 'creates directory on remote filesystem' do
|
it 'does not create any directory' do
|
||||||
expect(remote_fs).not_to receive(:mkdir)
|
expect(remote_fs).not_to receive(:mkdir)
|
||||||
mkdir.apply
|
mkdir.apply
|
||||||
end
|
end
|
||||||
|
@ -86,18 +86,12 @@ module Producer::Core
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe '#mkdir' do
|
describe '#mkdir' do
|
||||||
let(:path) { 'some_directory_path' }
|
let(:path) { 'some_directory_path' }
|
||||||
|
let(:attributes) { { foo: :bar } }
|
||||||
|
|
||||||
it 'creates the directory' do
|
it 'creates the directory' do
|
||||||
expect(sftp).to receive(:mkdir!).with(path, anything)
|
expect(sftp).to receive(:mkdir!).with(path, attributes)
|
||||||
fs.mkdir path
|
fs.mkdir path, attributes
|
||||||
end
|
|
||||||
|
|
||||||
it 'specifies permissions from optional mode argument' do
|
|
||||||
expect(sftp).to receive(:mkdir!) do |_, options|
|
|
||||||
expect(options[:permissions]).to eq 0700
|
|
||||||
end
|
|
||||||
fs.mkdir path, 0700
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -3,7 +3,8 @@ module Producer::Core
|
|||||||
include TestEnvHelpers
|
include TestEnvHelpers
|
||||||
|
|
||||||
let(:arguments) { [:some, :arguments] }
|
let(:arguments) { [:some, :arguments] }
|
||||||
subject(:action) { described_class.new(env, *arguments) }
|
let(:options) { { foo: :bar } }
|
||||||
|
subject(:action) { described_class.new(env, *arguments, options) }
|
||||||
|
|
||||||
describe '#env' do
|
describe '#env' do
|
||||||
it 'returns the assigned env' do
|
it 'returns the assigned env' do
|
||||||
@ -17,6 +18,12 @@ module Producer::Core
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#options' do
|
||||||
|
it 'returns the assigned options' do
|
||||||
|
expect(action.options).to eq options
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#input' do
|
describe '#input' do
|
||||||
it 'returns env input' do
|
it 'returns env input' do
|
||||||
expect(action.input).to be env.input
|
expect(action.input).to be env.input
|
||||||
|
Loading…
x
Reference in New Issue
Block a user