Я перебираю папку, содержащую 2 файла json, извлекаю значения из ключа «name» и сохраняю их в переменной.
Затем я пытаюсь выполнить некоторые действия с использованием этих переменных (например, сравнениек результатам запроса curl), а также выведите информацию о том, что происходит с консолью.
Проблема, с которой я сталкиваюсь, заключается в том, что вывод сценария в виде эха, кажется, приводит в замешательство некоторые переменные и текст строки,Кажется, что это происходит только в первом цикле, второй цикл выглядит нормально.
Я не уверен, почему это происходит. Глядя на сценарий, выходные данные сценария и исходные файлы ниже, кто-нибудь может понять, почему мой вывод перемешивается таким образом в первом цикле? Возможно, я использую динамические переменные?
Скрипт, вывод скрипта и файлы + содержимое ниже ...
Скрипт
###############################
# SETTINGS
###############################
connectorsDirectory="sources"
connectHost=localhost
###############################
# INIT
###############################
# Get a list of all currently running connectors
connectorListResponse=$(curl -s $connectHost:8083/connectors)
runningConnectorList=$(echo $connectorListResponse | sed -e 's/\[\(.*\)\]/\1/')
echo $runningConnectorList
echo "==="
# Convert runningConnectorList into something parseable by removing square brackets and double-quotes
parseableRunningConnectorList=`echo $runningConnectorList | tr -d '[]"'`
echo $parseableRunningConnectorList
echo "===="
connectorName=""
genericConnectorName=""
###############################
# JOB
###############################
# Loop through JSON files in provided connectors directory
for filename in $connectorsDirectory/*.json; do
[ -e "$filename" ] || continue
echo "Reading $filename ..."
# Find connector name specified in file
#connectorName=$(cat $filename | sed -n 's|.*"name":"\([^"]*\)".*|\1|p')
connectorName=$(sed -nE '/name/{s/.*:\s*"(.*)",/\1/p;q}' $filename)
#connectorNameSED='/name/{s/.*:\s*"(.*)",/\1/p;q}'
echo "connectorName="$connectorName
# Find "generic" connector name (sans .v### at END of string)
genericConnectorName=$(echo "$connectorName" | sed 's/\.v[0-9]*$//')
echo "genericConnectorName="$genericConnectorName
if [ -z "$connectorName" ]
then
echo "No connector found in this file."
else
echo "Found connector in file named: "$filename" (generic name = "$genericConnectorName")"
fi
echo "---"
# Loop through running connectors and find those that start with our "generic" connector name
# If there are any connectors running AND we also found a connector in the current file...
if [ ! -z "$parseableRunningConnectorList" ] && [ ! -z "$connectorName" ]
then
echo "Turning off the following connectors..."
# Loop through running connectors and delete them (turn them off)
for runningConnectorName in $(echo $parseableRunningConnectorList | sed "s/,/ /g")
do
connectorToTurnOff=$(echo "$runningConnectorName" | grep ^$genericConnectorName)
if [ ! -z $connectorToTurnOff ]
then
echo $connectorToTurnOff
echo "TEST MODE: curl -X DELETE $connectHost:8083/connectors/$connectorToTurnOff"
#curl -X DELETE $connectHost:8083/connectors/$connectorToTurnOff
#add some logic here to concat found connectors
fi
done
else
# No running connectors, so nothing to turn off ahead of publishing new connector (ie: do nothing)
echo "No connector in this file or no running connectors needing to be stopped."
fi
# Publish the connector found in the current file
if [ -z $connectorName ]
then
echo "No connector job to publish in the current file."
else
echo "Publishing connect job: \"$connectorName\"..."
echo "TEST MODE: curl -X POST -H \"Content-Type: application/json\" --data @$filename http://$connectHost:8083/connectors"
echo "TEST MODE: Connect job \"$connectorName\" is now active."
#curl -X POST -H "Content-Type: application/json" --data @$filename http://$connectHost:8083/connectors
#echo "Connect job \"$connectorName\" is now active."
fi
#
echo ""
echo "#############################################################################"
echo ""
done
Вывод сценария
[centos@localhost test]$ ./publish_connectors.sh
"some.sink.connector.running","some.source.connector.running","cars.sales.test_v2","some.other.source.connector.v001"
===
some.sink.connector.running,some.source.connector.running,cars.sales.test_v2,some.other.source.connector.v001
====
Reading sources/stanbridge.connect.source.test.v01.json ...
connectorName=stanbridge.connect.source.test.v001
genericConnectorName=stanbridge.connect.source.test.v001
)ound connector in file named: sources/stanbridge.connect.source.test.v01.json (generic name = stanbridge.connect.source.test.v001
---
Turning off the following connectors...
"...ishing connect job: "stanbridge.connect.source.test.v001
TEST MODE: curl -X POST -H "Content-Type: application/json" --data @sources/stanbridge.connect.source.test.v01.json http://localhost:8083/connectors
" is now active.ct job "stanbridge.connect.source.test.v001
#############################################################################
Reading sources/cars.sales.test.json ...
connectorName=cars.sales.test.v001
genericConnectorName=cars.sales.test
Found connector in file named: sources/cars.sales.test.json (generic name = cars.sales.test)
---
Turning off the following connectors...
Publishing connect job: "cars.sales.test.v001"...
TEST MODE: curl -X POST -H "Content-Type: application/json" --data @sources/cars.sales.test.json http://localhost:8083/connectors
TEST MODE: Connect job "cars.sales.test.v001" is now active.
#############################################################################
Файл1: sources / stanbridge.connect.source.test.v01.json
{
"name": "stanbridge.connect.source.test.v001",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"group.id": "stanbridge.connect.source.test.v01xxyyzza",
"key.converter": "io.confluent.connect.avro.AvroConverter",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"key.converter.schema.registry.url": "https://my.schema.registry",
"value.converter.schema.registry.url": "https://my.schema.registry",
"key.converter.basic.auth.user.info": "someKeyString:someSecretString",
"value.converter.basic.auth.user.info": "SsomeSString:someSecretString",
"errors.log.enable": "true",
"errors.log.include.messages": "true",
"connection.url": "jdbc:postgresql://my.db.host/dbName",
"connection.user": "postgres",
"connection.password": "postgres",
"mode": "incrementing",
"incrementing.column.name": "audit_id",
"query": "SELECT customer_id, customer_name, audit_id FROM cars.customers",
"topic.prefix": "stanbridge.connect.source.test"
}
}
Файл2: sources / cars.sales.test.json
{"name": "cars.sales.test.v001",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"group.id": "cars.sales.test.v001",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"value.converter.schema.registry.url": "https://my.schema.registry",
"value.converter.basic.auth.credentials.source": "USER_INFO",
"value.converter.schema.registry.basic.auth.user.info": "someKeyString:someSecretString",
"key.converter": "io.confluent.connect.avro.AvroConverter",
"key.converter.schema.registry.url": "https://my.schema.registry",
"key.converter.basic.auth.credentials.source": "USER_INFO",
"key.converter.schema.registry.basic.auth.user.info": "someKeyString:someSecretString",
"errors.log.enable": "true",
"errors.log.include.messages": "true",
"tasks.max": "2",
"batch.max.rows": "100",
"connection.user": "postgres",
"connection.password": "",
"connection.url": "jdbc:postgresql://my.db.host/dbName",
"query": "SELECT car_id, field1, field2, field3, date_modified_utc FROM cars.sales",
"mode": "timestamp",
"timestamp.column.name": "date_modified_utc",
"poll.interval.ms": "5000",
"timeout.ms": "25000",
"topic.prefix": "cars.sales.dummy",
"transforms": "createKey",
"transforms.createKey.type": "org.apache.kafka.connect.transforms.ValueToKey",
"transforms.createKey.fields": "car_id"
}
}
В выводе скрипта обратите внимание на следующее в первом цикле ...
sedне удаляет .v001 суффикс:соединитель в файле с именем
Текст, перезаписанный в строке вывода, начинающийся с: "... ishing connect job:" stanbridge.connect.source.test.v001
Текст перезаписывается в строке вывода, начиная с: «is active.ct job» stanbridge.connect.source.test.v001
Примечание: я думал, что это будетПожалуй, проще всего понять, включил ли я весь сценарий, поскольку он не такой большой. Извиняюсь, если это плохая форма.
Любая помощь с этим очень ценится. Спасибо!
Станбридж