Deployment to multiple servers

There was a question back in mid February about deploying to multiple destination servers in a single deployment. It was mentioned that was something you were aware of and was hopefully coming soon. Is this still on the road map or has it already been added?

With sub deployments it’s possible to pick an alternative source but not another destination.

My use case is that I want to do a new monthly release from a central server to a testing file on all my clients servers. This was possible in Otto 3, and each deployment was processed on each clients server at the same time. When doing this for a large number of clients having to manage a testing release migration for each client, and having to run them separately is quite time consuming.

Hi Gabe,

It is still on the roadmap, but it has not been added yet. Sorry

How many servers do you need to deploy to?

Todd

It’s about 10 at the moment, but that number is likely to go up.

+1 for this. We have a situation where after a migration sub deployment to a client server, we wish to pull migrated files back to our dev environment so we have a latest copy of the data (this is some, not all files).

We can’t currently do this as part of a single deployment given both source and destination roles are reversed for the second sub-deployment. We can work around this by setting up an entirely different deployment, but it does require intervention to trigger the second one after the first is complete.

Hey @weetbicks have you seen the “Refresh Dev” deployment pattern instructions in the docs? There’s also a video walkthrough there that describes how you can do this with sub-deployments

Just wanted to check in to see if this feature request has moved up the list at all?

For me that was a key feature from Otto 3 that allows deployments to multiple clients much easier to manage. It seems like wanting to deploy a single file to multiple server is a key feature for anybody who has a vertical market FileMaker solution.

Hey Gabe,

sending multiple deployments to separate servers currently the next big feature on the list for OttoDeploy. The reason it has taken so long is that we are thinking through the best way to implement it to ensure that it works the way that we intend. I expect this feature to be released in the next couple of months. Unfortunately I can’t provide more specific timelines as we have a number of ongoing projects at the moment.

-Kyle

1 Like

Thanks for the update, that’s good to know.

2 Likes

I would like to follow-up on this because we currently have 125 cloud servers that we manage and then another 40 to 50 I think that we have that are onPremise servers that we don’t necessarily have control over, but being able to push this out to 30, 40, or 50 servers at a time would be a huge boost for us.

We are currently not using OttoFMS for our production environments, however if we could have this it would be huge.

Hey J,

We are planning on doing this, it has been pushed down the priority list as we work on other things for a bit. I will say that it is the next big feature we are planning on putting into OttoDeploy, but that the OttoFMS API fully supports this at the moment.

Setting up a deployment to multiple servers is simply sending a deployment to each server individually at the same time, but you have to use a build that you have made ahead of time so that you are not running just in time builds at the same time. It should be relatively simple to set up a script that will kick off a set of deployments to all of your servers that works with OttoFMS, I’ll detail the steps this script would need to take below. The only thing that we are going to do in OttoDeploy is apply some UI on top of the already existing OttoFMS APIs so that you have an easier way to set up the deployments than managing the JSON yourself.

For setting up a multi-server deployment in OttoFS as we are now you need a list of the servers you are deploying to (if filenames are different on each server you’ll need some sort of data that you can use for mapping the file names from your source server to each of the development servers), the details of your source server, and the JSON for starting your build and sending your deployments. You could run the build ahead of time or tie it into your script and poll the result of the build before sending off your deployments.

You’ll need to manage the flow of a build running before your deployments, which you can do manually, with your script, or by using the chainedAction option in the OttoFMS build API. I’d recommend the chainedAction option, it will make your script easier (although it will make your JSON horribly complex). You’ll then essentially need to run the build, then kick off all of your deployments with the build you’ve run as the source. All of the deployments can run in parallel since they’re on different destination servers, and they will all grab the same source files from the build you’ve already run.

I could definitely see a world where you have a set files, a list of destination servers, and the source server info that could generate the proper JSON to kick off all of these deployments pretty easily, but I also am doing essentially that every day for the OttoFMS testing, so I probably have a skewed sense of how easy it is to manage the JSON objects in question (spoiler they’re gnarly).

Example psuedo-code (this syntax is weird but you get it)

sourceServer = {url:https://kyle.ottomatic.cloud, apiKey:key123}
sourceFiles = ["test.fmp12","testUI.fmp12"]
destServers = [{url:https://kyle1.ottomatic.cloud, apiKey:key123},
{url:https://kyle2.ottomatic.cloud, apiKey:key123},
{url:https://kyle3.ottomatic.cloud, apiKey:key123}]

buildJSON = {
files: [
...]}
buildOptions:{...}}

Run the build here with the api (or skip it here and use the chainedAction)

deploymentJSON = {
source:{
type:"ottofms"
buildID:"build-id"
url:sourceServer.url
apiKey : sourceServer.apiKey}
files:[...all the files you want to send and their operations]
...all the other options you want (maybe some slack notifications??)
}

for (server of destServers) {
Kick off each deployment (if you're doing a chainedAction, create the JSON for each deployment, then add them to the chained action information on the build JSON)
}

Done (unless you want to poll the statuses or something, you could just get Slack notifications when they're done instead if that works)

All that said, we are planning on adding this to OttoDeploy (and probably the Cloud Console) at some point, but that timeline is in flux as we work with changing priorities. I’ll keep y’all updated on the progress on it as we go!

-Kyle

Edit: that was longer than I thought it would be. tldr: we’re going to get to it at some point, if its blocking you its probably not as hard as you think it is to write it yourself as the functionality already exists, we just need some UI for it (and lets be honest sometimes you don’t need the UI to get things done, especially for people as smart as y’all)

Thanks Kyle, it’s good to hear that this is still on the road map. Jay I feel your pain, we are nowhere near that number of servers, but it’s still a big job to manage, and is easy to accidentally miss one out.

It’s still a big frustration for our use of OttoFMS. It was one of the main reasons that we originally moved to Otto v3 from other methods of using the Data Migration tool.

Another thing I was thinking about recently is the ability to see the status of a migration from the Deploy file without having to launch the Otto web interface. Currently when doing a monthly testing or live release for all of our customers I have to have keep open a large number Safari tabs open to check the status of each deployment individually. Being able to see the status of each of a large number of deployments in one place was another feature that I greatly miss from the Otto v3 migrator file.

Yeah that is part of the UI that we’re planning on building is a simple way to watch the status of all of the deployments that you’ve kicked off when we sed these multi-server deployments. We also have it on the roadmap to get something into OttoDeploy to watch the status of the simple deployments as well.

-Kyle

It’s great to hear that’s in the works. Thanks for the update Kyle.