डॉकटर-कंपोज़.आईएमएल में बूलियन का उपयोग करने की अनुमति क्यों नहीं है?


24

डॉकटर-कंपोज़.माइल फ़ाइल में बूलियन को परिभाषित करना:

environment:
  SOME_VAR: true

और चल रहे docker upपरिणाम:

contains true, which is an invalid type, it should be a string, number, or a null

समस्या को हल करने का प्रयास

  1. यदि सत्य को बदल दिया जाता है, तो सत्य जारी रहता है।
  2. उपयोग करना 'true'स्वयं कोड द्वारा स्वीकार नहीं किया जाता है ( प्ले फ्रेमवर्क ऐप का उपयोग करना शुरू कर दिया जाता है ./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=, अर्थात या तो -Dplay.evolutions.db.default.autoApply=trueया -Dplay.evolutions.db.default.autoApply=falseपैरामीटर):

    वर के पास BOOLEAN के बजाय टाइप STRING है

  3. एक चर परिणाम के रूप में उपयोग yesयाno

    इसमें सत्य है, जो एक अमान्य प्रकार है, यह एक स्ट्रिंग, संख्या या एक अशक्त होना चाहिए

  4. yesएक स्क्रिप्ट का उपयोग करना और उपयोग करना जो yesसच्चे कार्यों में बदल जाता है

विचार-विमर्श

डॉक्स के अनुसार Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser :

वातावरण

पर्यावरण चर जोड़ें। आप एक सरणी या एक शब्दकोश का उपयोग कर सकते हैं। कोई बूलियन मूल्य; सही, गलत, हाँ, नहीं, यह सुनिश्चित करने के लिए उद्धरण चिह्नों में संलग्न किए जाने की आवश्यकता है कि वे YML पार्सर द्वारा सही या गलत में परिवर्तित नहीं हुए हैं।

केवल एक कुंजी के साथ पर्यावरण चर को मशीन पर उनके मूल्यों के लिए हल किया जाता है कम्पोज़ चल रहा है, जो गुप्त या होस्ट-विशिष्ट मानों के लिए सहायक हो सकता है।

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

सवाल

इसकी अनुमति क्यों नहीं है?


4
DevOps के बारे में नहीं? DevOps Stack Exchange is a question and answer site for software engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure
030

1
@ Aurora0001 प्रश्न अपडेट किया गया
030

जवाबों:


18

यह बुलियन के बारे में YAML भाषा की डिज़ाइन पसंद से आता है

इस "रेगेक्स" से मेल खाने वाले प्रत्येक निर्विवाद मूल्य:

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

में परिवर्तित हो जाएगा True या False

एक समस्या है जब आपके कोड उदाहरण इस स्क्रिप्ट (अन्य उदाहरण के लिए कोई एक ऐसा माहौल मूल्य का परीक्षण हाँ हो जाएगा या के कारण यह शुरू पीआर discution में ):

if [ "$SOME_VAR" == "yes" ];
then
  echo "Variable SOME_VAR is activated"
else
  echo "Variable SOME_VAR is NOT activated"
fi

और अपने कंपोज फाइल में सेटिंग कर लें

environment:
  SOME_VAR: yes

में परिणाम होगा SOME_VARजा रहा है Trueजब स्क्रिप्ट रन, इसलिए गलत मामले को ले के रूप में यह नहीं है के बराबर yes

तो पसंद किया गया है करने के लिए बूलियन नामंज़ूर जब आप YAML नियम के बारे में पता नहीं कर रहे हैं अवांछित व्यवहार कठिन डिबग करने के लिए रोकने के लिए।

मुझे समस्या पर काबू पाने का दो तरीका दिखाई देता है:

  1. एक का उपयोग env_fileकरने के बजाय, वे IIRC पार्स नहीं कर रहे हैं और रूपांतरण रोकने चाहिए।

  2. जैसा कि आपने पहले ही कहा, ऐप लॉन्च करने से पहले मूल्य को परिभाषित करने के लिए अपने लांचर के चारों ओर एक आवरण स्क्रिप्ट का उपयोग करें, इस के साथ कुछ करना चाहिए:

    AUTOAPPLY=false
    if [ "$SOME_VAR" == "true" ]
    then
        AUTOAPPLY=true
    fi
    
    ./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=$AUTOAPPLY
    

9

वह यमल है। यह trueएक बूलियन के रूप में व्याख्या करता है। एनवर्स तार होना चाहिए, इसलिए उद्धरण के माध्यम से टाइप स्पष्ट करने की आवश्यकता है।

Https://www.json2yaml.com/ के साथ इसका परीक्षण करें


अधिक आम तौर पर, उद्धरण स्वयं मूल्य में प्रकट नहीं होंगे क्योंकि वे YAML स्वरूपण हैं।
कोडरंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.