Tiller сохраняет все выпуски в виде ConfigMaps в пространстве имен Tiller (kube-system
в вашем случае). Попробуйте найти поврежденный выпуск и удалите его ConfigMap, используя команды:
$ kubectl get cm --all-namespaces -l OWNER=TILLER
NAMESPACE NAME DATA AGE
kube-system nginx-ingress.v1 1 22h
$ kubectl delete cm nginx-ingress.v1 -n kube-system
Затем удалите все объекты выпуска (развертывание, службы, вход и т. Д.) Вручную и переустановите выпуск снова, используя helm.
Если это не помогло, вы можете попробовать загрузить более новый [релиз] Helm (на данный момент 2.13.1) и обновить / переустановить Tiller.
UPD (из моего комментария): Это определенно не рекомендуется выбирать какое-то магическое число для обозначения отсутствия значения, если вы не можете быть полностью уверены, что это магическое число не появится в результате некоторой арифметики (что обычно верно). Таким образом, лучший подход здесь - либо использовать более широкий тип, чем int
(например, Number
), либо передать какой-либо флаг ( Boolean
значение) для работы. как int
, чтобы указать отсутствие фактического значения. Выбор должен зависеть от того, хотите ли вы подчеркнуть важность того факта, что переданное значение является целым.
Если вы чувствуете себя комфортно с расширением типа аргумента, тогда вам следует использовать NaN
и сделать следующее:
function setMyValue (myVar : Number = NaN) : void
{
if ( isNaN(myVar) )
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Это и технически точнее, и более стабильно. Это также позволит вам строго печатать во время компиляции и не вызовет странных ошибок, как в случае использования Object
.
Обратите внимание, что это не будет работать с int
как один из ответов подсказывает. int
имеет только числовые значения, а NaN
будет приведен к 0. Вам нужно будет использовать тип Number
.
Если вы беспокоитесь о производительности - не беспокойтесь. Использование числа
вместо int
или uint
обычно нормально.
UPD: Если вы хотите явно отметить, что этот аргумент должен быть целым, просто используйте дополнительный флаг и точный тип - это было бы намного яснее.
function setMyValue (isIntValueSupplied : Boolean = false, intValue : int = 0) : void
{
if ( isIntValueSupplied )
{
/* Generate or use a default value of intValue */
}
else
{
/* Use the supplied value for intValue */
}
}
Другой вариант - определить свой собственный тип с дополнительным значением, например MaybeInt
, который содержит целочисленное значение и флаг (независимо от того, инициализировано оно на самом деле или нет). Таким образом вы четко укажете, что значение должно быть целым или без значения . Однако этот подход может быть немного громоздким.
Является ли сгенерированное значение константой? Если да, то почему бы просто не установить это значение по умолчанию?
Проблема в том, что AS3 это не нравится. 'undefined' приводится к '0', поэтому myVar никогда не может быть неопределенным.
Да, потому что это значение инициализации по умолчанию для int
(для string
и Объект
это будет null
).
Другой вариант - ввести параметр как Объект
или оставить его неопределенным (с помощью *
), а затем приведите его к типу int
, если он не null
.
function setMyValue (myVar:Object = null):void
{
if (myVar == null)
{
/* Generate a value for myVar */
}
else
{
int value = myVar as int;
/* Use the supplied value for myVar */
}
}
Моим решением было просто использовать это
if(myUint == new uint){ is undefined, act appropriately; }