Я пытаюсь создать инвентарь моих экземпляров Google Cloud Cloud и сохранить его в отдельной базе данных MySQL, поэтому я могу использовать его в наших существующих локальных ресурсах.
Чтобы получить список экземпляров gcloud, я могу запустить следующее:
$> gcloud sql instances list
Что вернет что-то вроде:
NAME DATABASE_VERSION LOCATION TIER ADDRESS STATUS
inst3 MYSQL_5_7 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
inst2 MYSQL_5_6 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
zandra MYSQL_5_7 europe-west4-c db-f1-micro xx.xx.xx.xx RUNNABLE
В сценарии bash, если я запускаю это как:
$> allinstances='gcloud sql instances list'
чтобы установить переменную, называемую allinstances
, как я тогда вставляю ее в таблицу mysql, называемую gcloudinv
Я пробовал это, ожидая ошибки:
$> mysql -uuser -ppassword gcloudinv < allinstances
Я знаю, что это не сработает, но что мне нужно сделать между ними, чтобы превратить вывод в формат, с которым может работать mysql.
В идеале я буду переписывать этот базовый инвентарь ежедневно.
Спасибо
# just craete table if does not exists query
query="CREATE TABLE IF NOT EXISTS 'gcloud' ( NAME varchar(255), DATABASE_VERSION varchar(255), LOCATION varchar(255), TIER varchar(255), ADDRESS varchar(255), STATUS varchar(255) ); "
# convert the lines in format 'string[spaces]string[spaces] and so on' into a 'insert into 'gcloud' ( string , string, and so on );'
query+="$( gcloud sql instances list | tail -n +2 | while read -r name database_location location tier address status; do echo "insert into 'gcloud' ( '$name', '$database_location', '$location', '$tier', '$address', '$status' );"; done )"
# execute the query
mysql -uuser -ppassword gcloudinv -e "$query"
Заметки:
tail -n +2
удаляет первую строку со входа$(.. )
mysql -uuser -ppassword gcloudinv <<<"$allinstances"
insert into instances ( mydb MYSQL_5_7 europe-west4-c db-f1-micro 00.00.00.00 RUNNABLE );
Какую часть я должен отредактировать, чтобы записать это в вывод?
mysql
есть отличная документация, доступная онлайн: w3schools.com/sql/sql_insert.asp . Значения во вставке должны быть разделены запятой. Также я думаю, что забыл про qoutes. Вы разместили свой текст с пробелами внутри, возможно, в gcloud
есть вкладки, не пробелы, а вы разместили пробелы. Попробуйте использовать while
без IFS=' '
например, или используйте sed с s/[[:space:]]\+/, /g