| 836 | |
| 837 | |
| 838 | Future<Response> Master::Http::_createVolumes( |
| 839 | const SlaveID& slaveId, |
| 840 | const RepeatedPtrField<Resource>& volumes, |
| 841 | const Option<Principal>& principal) const |
| 842 | { |
| 843 | Slave* slave = master->slaves.registered.get(slaveId); |
| 844 | if (slave == nullptr) { |
| 845 | return BadRequest("No agent found with specified ID"); |
| 846 | } |
| 847 | |
| 848 | // Create an operation. |
| 849 | Offer::Operation operation; |
| 850 | operation.set_type(Offer::Operation::CREATE); |
| 851 | operation.mutable_create()->mutable_volumes()->CopyFrom(volumes); |
| 852 | |
| 853 | Option<Error> error = validateAndUpgradeResources(&operation); |
| 854 | if (error.isSome()) { |
| 855 | return BadRequest(error->message); |
| 856 | } |
| 857 | |
| 858 | error = validation::operation::validate( |
| 859 | operation.create(), |
| 860 | slave->checkpointedResources, |
| 861 | principal, |
| 862 | slave->capabilities); |
| 863 | |
| 864 | if (error.isSome()) { |
| 865 | return BadRequest( |
| 866 | "Invalid CREATE operation on agent " + stringify(*slave) + ": " + |
| 867 | error->message); |
| 868 | } |
| 869 | |
| 870 | return master->authorize( |
| 871 | principal, ActionObject::createVolume(operation.create())) |
| 872 | .then(defer(master->self(), [=](bool authorized) -> Future<Response> { |
| 873 | if (!authorized) { |
| 874 | return Forbidden(); |
| 875 | } |
| 876 | |
| 877 | return _operation(slaveId, operation); |
| 878 | })); |
| 879 | } |
| 880 | |
| 881 | |
| 882 | Future<Response> Master::Http::createVolumes( |
nothing calls this directly
no test coverage detected