diff --git a/src/DependencyInjection/Factory/Destination/AwsCliS3DestinationFactory.php b/src/DependencyInjection/Factory/Destination/AwsCliS3DestinationFactory.php new file mode 100644 index 0000000..607de14 --- /dev/null +++ b/src/DependencyInjection/Factory/Destination/AwsCliS3DestinationFactory.php @@ -0,0 +1,49 @@ + + */ +class AwsCliS3DestinationFactory implements Factory +{ + public function getName(): string + { + return 'aws_cli_s3'; + } + + public function create(ContainerBuilder $container, string $id, array $config): Reference + { + $serviceId = \sprintf('zenstruck_backup.destination.%s', $id); + + $container->setDefinition($serviceId, new ChildDefinition('zenstruck_backup.destination.abstract_aws_cli_s3')) + ->replaceArgument(0, $id) + ->replaceArgument(1, $config['bucket']) + ->replaceArgument(2, $config['timeout']) + ->replaceArgument(3, $config['options']) + ->addTag('zenstruck_backup.destination') + ; + + return new Reference($serviceId); + } + + public function addConfiguration(ArrayNodeDefinition $builder): void + { + $builder + ->children() + ->scalarNode('bucket')->isRequired()->example('s3://foobar/backups')->end() + ->integerNode('timeout')->defaultValue(AwsCliS3Destination::DEFAULT_TIMEOUT)->end() + ->arrayNode('options') + ->prototype('scalar')->end() + ->end() + ->end() + ; + } +} diff --git a/src/DependencyInjection/Factory/Destination/FlysystemDestinationFactory.php b/src/DependencyInjection/Factory/Destination/FlysystemDestinationFactory.php index bd296b8..85bd105 100644 --- a/src/DependencyInjection/Factory/Destination/FlysystemDestinationFactory.php +++ b/src/DependencyInjection/Factory/Destination/FlysystemDestinationFactory.php @@ -31,7 +31,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Destination/S3CmdDestinationFactory.php b/src/DependencyInjection/Factory/Destination/S3CmdDestinationFactory.php index 662442d..dbb7ef5 100644 --- a/src/DependencyInjection/Factory/Destination/S3CmdDestinationFactory.php +++ b/src/DependencyInjection/Factory/Destination/S3CmdDestinationFactory.php @@ -34,7 +34,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Destination/StreamDestinationFactory.php b/src/DependencyInjection/Factory/Destination/StreamDestinationFactory.php index fcdce05..f85ca52 100644 --- a/src/DependencyInjection/Factory/Destination/StreamDestinationFactory.php +++ b/src/DependencyInjection/Factory/Destination/StreamDestinationFactory.php @@ -31,7 +31,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Factory.php b/src/DependencyInjection/Factory/Factory.php index 03edcbb..fa4138f 100644 --- a/src/DependencyInjection/Factory/Factory.php +++ b/src/DependencyInjection/Factory/Factory.php @@ -25,5 +25,5 @@ public function create(ContainerBuilder $container, string $id, array $config): /** * Adds configuration nodes for the factory. */ - public function addConfiguration(ArrayNodeDefinition $builder); + public function addConfiguration(ArrayNodeDefinition $builder): void; } diff --git a/src/DependencyInjection/Factory/Namer/SimpleNamerFactory.php b/src/DependencyInjection/Factory/Namer/SimpleNamerFactory.php index 5ca7c29..a6095f4 100644 --- a/src/DependencyInjection/Factory/Namer/SimpleNamerFactory.php +++ b/src/DependencyInjection/Factory/Namer/SimpleNamerFactory.php @@ -31,7 +31,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Namer/TimestampNamerFactory.php b/src/DependencyInjection/Factory/Namer/TimestampNamerFactory.php index 4190267..21521ca 100644 --- a/src/DependencyInjection/Factory/Namer/TimestampNamerFactory.php +++ b/src/DependencyInjection/Factory/Namer/TimestampNamerFactory.php @@ -34,7 +34,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Processor/GzipArchiveProcessorFactory.php b/src/DependencyInjection/Factory/Processor/GzipArchiveProcessorFactory.php index cdf5879..c054135 100644 --- a/src/DependencyInjection/Factory/Processor/GzipArchiveProcessorFactory.php +++ b/src/DependencyInjection/Factory/Processor/GzipArchiveProcessorFactory.php @@ -34,7 +34,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Processor/ZipArchiveProcessorFactory.php b/src/DependencyInjection/Factory/Processor/ZipArchiveProcessorFactory.php index 23e689a..56602f2 100644 --- a/src/DependencyInjection/Factory/Processor/ZipArchiveProcessorFactory.php +++ b/src/DependencyInjection/Factory/Processor/ZipArchiveProcessorFactory.php @@ -34,7 +34,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Source/MySqlDumpSourceFactory.php b/src/DependencyInjection/Factory/Source/MySqlDumpSourceFactory.php index 140b556..117ca17 100644 --- a/src/DependencyInjection/Factory/Source/MySqlDumpSourceFactory.php +++ b/src/DependencyInjection/Factory/Source/MySqlDumpSourceFactory.php @@ -39,7 +39,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/DependencyInjection/Factory/Source/RsyncSourceFactory.php b/src/DependencyInjection/Factory/Source/RsyncSourceFactory.php index 5227d3c..5d969a2 100644 --- a/src/DependencyInjection/Factory/Source/RsyncSourceFactory.php +++ b/src/DependencyInjection/Factory/Source/RsyncSourceFactory.php @@ -35,7 +35,7 @@ public function create(ContainerBuilder $container, string $id, array $config): return new Reference($serviceId); } - public function addConfiguration(ArrayNodeDefinition $builder) + public function addConfiguration(ArrayNodeDefinition $builder): void { $builder ->children() diff --git a/src/Resources/config/destinations.xml b/src/Resources/config/destinations.xml index 3b022d1..0fcde77 100644 --- a/src/Resources/config/destinations.xml +++ b/src/Resources/config/destinations.xml @@ -19,5 +19,11 @@ + + + + + + diff --git a/src/Resources/config/factories.xml b/src/Resources/config/factories.xml index 76706da..cf7c863 100644 --- a/src/Resources/config/factories.xml +++ b/src/Resources/config/factories.xml @@ -39,5 +39,8 @@ + + + diff --git a/tests/Fixtures/valid_config.yml b/tests/Fixtures/valid_config.yml index 9358b97..d753a42 100644 --- a/tests/Fixtures/valid_config.yml +++ b/tests/Fixtures/valid_config.yml @@ -30,6 +30,9 @@ destinations: stream: stream: directory: /foo + s3_alt: + aws_cli_s3: + bucket: "s3://foobar/backups" profiles: daily: scratch_dir: "%kernel.project_dir%/cache/backup"