### Elasticsearch Version

main

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

macOS

### Problem Description

The pipeline defined in `behavioral_analytics-events-final_pipeline.json` uses the new `ignore_missing` setting for the `uri_parts` ingest processor added in #95068.

The pipeline is referenced in the index template `behavioral_analytics-events-settings.json`. 

```
"final_pipeline": "behavioral_analytics-events-final_pipeline",
...
```

That template may be PUT as a node is upgraded during a rolling upgrade, in that mixed cluster scenario only the upgraded nodes recognise the new `ignore_missing` setting. 

### Steps to Reproduce

The problem appears in the rolling upgrade test failure tracked in #95360

```
./gradlew ':x-pack:qa:rolling-upgrade:v8.2.0#twoThirdsUpgradedTest' -Dtests.class="org.elasticsearch.upgrades.MlTrainedModelsUpgradeIT" -Dtests.method="testTrainedModelInference" -Dtests.seed=D0F64DC8162BB439 -Dtests.bwc=true -Dtests.locale=be-BY -Dtests.timezone=Africa/Lubumbashi -Druntime.java=20
```

### Logs (if relevant)

```
[2023-05-02T19:25:31,393][WARN ][o.e.i.IngestService      ] [v8.0.1-2] failed to update ingest pipelines
org.elasticsearch.ElasticsearchParseException: processor [uri_parts] doesn't support one or more provided configuration parameters [ignore_missing]
	at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:588) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:547) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.ingest.ConfigurationUtils.readProcessorConfigs(ConfigurationUtils.java:467) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.ingest.Pipeline.create(Pipeline.java:82) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.ingest.IngestService.innerUpdatePipelines(IngestService.java:922) ~[elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.ingest.IngestService.applyClusterState(IngestService.java:898) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:544) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:531) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cluster.service.ClusterApplierService.applyChanges(ClusterApplierService.java:503) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cluster.service.ClusterApplierService.runTask(ClusterApplierService.java:428) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.cluster.service.ClusterApplierService$UpdateTask.run(ClusterApplierService.java:154) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:717) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:260) [elasticsearch-8.0.1.jar:8.0.1]
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:223) [elasticsearch-8.0.1.jar:8.0.1]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]
	Suppressed: org.elasticsearch.ElasticsearchParseException: processor [uri_parts] doesn't support one or more provided configuration parameters [ignore_missing]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:588) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:547) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessorConfigs(ConfigurationUtils.java:467) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.Pipeline.create(Pipeline.java:82) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.IngestService.innerUpdatePipelines(IngestService.java:922) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.IngestService.applyClusterState(IngestService.java:898) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:544) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:531) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.applyChanges(ClusterApplierService.java:503) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.runTask(ClusterApplierService.java:428) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService$UpdateTask.run(ClusterApplierService.java:154) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:717) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:260) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:223) [elasticsearch-8.0.1.jar:8.0.1]
		at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
		at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
		at java.lang.Thread.run(Thread.java:833) [?:?]
	Suppressed: org.elasticsearch.ElasticsearchParseException: processor [uri_parts] doesn't support one or more provided configuration parameters [ignore_missing]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:588) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.common.ForEachProcessor$Factory.create(ForEachProcessor.java:187) ~[?:?]
		at org.elasticsearch.ingest.common.ForEachProcessor$Factory.create(ForEachProcessor.java:168) ~[?:?]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:583) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessor(ConfigurationUtils.java:547) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.ConfigurationUtils.readProcessorConfigs(ConfigurationUtils.java:467) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.Pipeline.create(Pipeline.java:82) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.IngestService.innerUpdatePipelines(IngestService.java:922) ~[elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.ingest.IngestService.applyClusterState(IngestService.java:898) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:544) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.callClusterStateAppliers(ClusterApplierService.java:531) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.applyChanges(ClusterApplierService.java:503) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService.runTask(ClusterApplierService.java:428) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.cluster.service.ClusterApplierService$UpdateTask.run(ClusterApplierService.java:154) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:717) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:260) [elasticsearch-8.0.1.jar:8.0.1]
		at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:223) [elasticsearch-8.0.1.jar:8.0.1]
		at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
		at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
		at java.lang.Thread.run(Thread.java:833) [?:?]
```
x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/analytics/AnalyticsTemplateRegistryTests.java
XContentType.JSON
                )
            );
        }
        IngestMetadata ingestMetadata = new IngestMetadata(ingestPipelines);
        Map<String, LifecyclePolicyMetadata> existingILMMeta = existingPolicies.entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getKey, e -> new LifecyclePolicyMetadata(e.getValue(), Collections.emptyMap(), 1, 1)));
        IndexLifecycleMetadata ilmMeta = new IndexLifecycleMetadata(existingILMMeta, OperationMode.RUNNING);
        return ClusterState.builder(new ClusterName("test"))
            .metadata(
                Metadata.builder()
                    .indexTemplates(composableTemplates)
                    .componentTemplates(componentTemplates)
                    .transientSettings(Settings.EMPTY)
                    .putCustom(IngestMetadata.TYPE, ingestMetadata)
                    .putCustom(IndexLifecycleMetadata.TYPE, ilmMeta)
                    .build()
            )
            .blocks(new ClusterBlocks.Builder().build())
            .nodes(nodes)
            .build();
    }
    private static class TestPutIndexTemplateResponse extends AcknowledgedResponse {
        TestPutIndexTemplateResponse(boolean acknowledged) {
            super(acknowledged);
        }
    }
}