Automate flushing of CDN cache
You can manually flush the CDN cache directly from your Cockpit. However, if you would like to automate the process where you automatically flush publication actions, you need to do a few things.
- 
You must first Set up a REST Client. 
After you have set up your REST client, you can choose one of two options:
- 
Configure a Webhook Option 1 
- 
Write a command Option 2 
Set up a REST Client
- 
Request a token from our Helpdesk. 
- 
Create a REST client in Magnolia to access the Fastly API. You can see more at REST Client app. Example REST Client configurationbaseUrl: https://api.fastly.com restCalls: purge_all: method: POST entityClass: java.lang.String path: '/service/{{service_id}}/purge_all' headers: 'Accept': 'application/json' 'Fastly-Key': '{{fastly token}}' (1)1 The token needed to access the Fastly API. 
Configure a Webhook
If you want the purge to be triggered by certain events, you can configure a webhook. See the example configuration below.
See Webhooks module for more details on configuring webhooks.
name: webhook_purge_fastly_cache
restClientName: fastly_rest (1)
restCallName: purge_all (2)
enabled: true
events:
  - name: contentPublished
    eventType: Published
    filter: "@path LIKE '%foo2%' or @nodeType = 'mgnl:page'"
  - name: contentUnpublished
    eventType: Unpublished
    filter: "@path LIKE '%foo2%' or @nodeType = 'mgnl:page'"| 1 | Should match your REST Client’s name. | 
| 2 | Should match your REST Client’s specific call - in this case '…/purge_all'as referenced inpath:under Set up a REST Client. | 
Write a command
If you’d prefer using a command, you can create a command definition to flush the CDN cache.
Your custom command will look at least slightly different than the example provided here. However, this can be used as a guide to completing your own command.
See Commands for more more comprehensive details on writing, configuring, and executing commands.
import info.magnolia.commands.MgnlCommand;
import info.magnolia.context.Context;
import info.magnolia.init.MagnoliaConfigurationProperties;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import java.io.IOException;
public class AutomateFlushCDNCache extends MgnlCommand {
    private static final String FASTLY_API_URL_TEMPLATE = "https://api.fastly.com/service/%s/purge_all"; (1)
    public AutomateFlushCDNCache() {
    }
    @Deprecated
    public AutomateFlushCDNCache(MagnoliaConfigurationProperties configurationProperties) {
        this();
    }
    @Override
    public boolean execute(Context context) {
        try {
            // Purge all content in the Fastly service
            // TODO: get those values from configuration; this is just an example with hardcoded values
            String serviceID = "<YOUR_SERVICE_ID>"; (2)
            String fastlyToken = "<YOUR_FASTLY_TOKEN>"; (3)
            purgeFastlyService(serviceID, fastlyToken);
            return true;
        } catch (IOException e) {
            // Log or handle the exception appropriately
            e.printStackTrace();
            return false;
        }
    }
    private void purgeFastlyService(String serviceID, String fastlyToken) throws IOException {
        String fastlyApiUrl = String.format(FASTLY_API_URL_TEMPLATE, serviceID);
        HttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(fastlyApiUrl);
        // Set headers
        httpPost.setHeader(HttpHeaders.ACCEPT, "application/json");
        httpPost.setHeader("Fastly-Key", fastlyToken);
        // Execute the request
        try {
            HttpResponse response = httpClient.execute(httpPost);
            handleResponse(response);
        } finally {
            httpClient.getConnectionManager().shutdown();
        }
    }
    private void handleResponse(HttpResponse response) throws IOException {
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == 200) {
            // Successful purge
            System.out.println("Fastly service purged successfully.");
        } else {
            // Handle error
            System.err.println("Failed to purge Fastly service. Status code: " + statusCode);
        }
        // Ensure the response entity is fully consumed to release resources
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            entity.getContent().close();
        }
    }
}| 1 | Define the FASTLY_API_URL_TEMPLATEwith thepurge_allFastly API endpoint.For more, see purge-all. | 
| 2 | Use your YOUR_SERVICE_ID. | 
| 3 | Use your YOUR_FASTLY_TOKEN. |