শেল স্ক্রিপ্টের মাধ্যমে কোনও yML ফাইলটি সংশোধন করা সম্ভব?


12

আমার ডকার-কমপোজ.আইএমএল দেখতে কেমন লাগে।

nginx:
  container_name: 'nginx'
  image: 'nginx:1.11'
  restart: 'always'
  ports:
    - '80:80'
    - '443:443'
  volumes:
    - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
  links:
    - 'anything'

এখন আমাকে শেল স্ক্রিপ্টের মাধ্যমে একটি উবুন্টু সার্ভারে কিছু সামগ্রী যুক্ত করতে হবে। এটি আদৌ সম্ভব কিনা তা সম্পর্কে আমি নিশ্চিত নই:

  1. nginx/linksএটি উপস্থিত না থাকলে নতুন উপাদান যুক্ত করুন
  2. পরিশেষে newthingব্লক যদি কোনো newthing-ব্লক বিদ্যমান হয়

নতুন সামগ্রীটি দেখতে দেখতে এটির মতো হওয়া উচিত:

nginx:
  container_name: 'nginx'
  image: 'nginx:1.11'
  restart: 'always'
  ports:
    - '80:80'
    - '443:443'
  volumes:
    - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
    - '/etc/letsencrypt:/etc/letsencrypt'
  links:
    - 'anything'
    - 'newthing'

newthing:
  container_name: foo
  image: 'newthing:1.2.3'
  restart: always
  hostname: 'example.com'

1
শেল আপনাকে খুব শক্তিশালী স্ক্রিপ্টিং ভাষা সরবরাহ করে। সহজেই আপনি একটি স্ক্রিপ্ট ব্যবহারের লিখতে পারেন sed, awkএবং regular expressionsআপনার ফাইল আপডেট করার জন্য।
জীবাশ্ম

আপনি দয়া করে একটি সামান্য উদাহরণ প্রদান করতে পারেন?
ব্যবহারকারী3142695

2
যদিও শেল ব্যবহার করে এটি প্রযুক্তিগতভাবে সম্ভব, আপনার এমন ভাষা ব্যবহার করা ভাল যা সত্যিকারের ইয়ামল গ্রন্থাগার রয়েছে।
jordanm

আমি আপনাকে ruamel.yamlপাইথনের লাইব্রেরিটি পরীক্ষা করার পরামর্শ দেব ।
পিএইচকে

আমি মনে করি যে লিঙ্কগুলি একটি উত্তরাধিকার বৈশিষ্ট্য যা ভবিষ্যতে ডকার থেকে মুছে ফেলা হবে: docs.docker.com/compose/compose-file/#links
মিকেল

উত্তর:


6

পার্ল, পাইথন ইত্যাদির জন্য অনেকগুলি ইয়ামল লাইব্রেরি রয়েছে যদি এটি শেল স্ক্রিপ্ট থেকে সরাসরি না করা ঠিক হয় তবে অন্য ভাষা ব্যবহার করুন।

আর একটি বিকল্প হ'ল কমান্ড-লাইন ইয়ামাল প্রসেসর ইনস্টল করা এবং এটি আপনার শেল স্ক্রিপ্ট থেকে কল করা।


8

আমি লিখেছি https://github.com/kislyuk/yq , কাছাকাছি একটি মোড়কের https://stedolan.github.io/jq/ এই ব্যবহারের ক্ষেত্রে মোকাবেলার।


এটি আপডেট করতে পারেন?
ওয়েইনহ্যামজ

1
হ্যাঁ: yq -y '.newthing=...' input.yml > output.yml। (আপনি জায়গায় একটি আপডেট সম্পর্কে জিজ্ঞাসা করা হয়, মত sed -i, Yq এটি নিজে কি করতে পারেন এখনো, কিন্তু আপনি ব্যবহার করতে পারেন sponge: yq -y .newthing=... file.yml | sponge file.yml।)
Weaver

1
@ যাইহোক আপনি আমার নতুন নায়ক
ভাতাসাউরাস

7

আপনার যা প্রয়োজন ঠিক তা করতে আমি yaml_cli ( https://github.com/Gallore/yaml_cli ) লিখেছি । এটি অজগর উপর ভিত্তি করে। এটি আপনার উদাহরণের বাক্য গঠন হবে:

yaml_cli \
  -f docker-compose.yml \                # read from and save to file
  --list-append \                        # flag to append to lists instead of replacing existing values
  -s nginx:links newthing \              # add a value of type string; here you need --list-append
  -s newthing:container_name foo \       # key 'newthing' is created automatically
  -s newthing:image 'newthing:1.2.3' \   #
  -s newthing:restart always \           #
  -s newthing:hostname 'example.com'     #

Yaml_cli সম্পর্কে প্রতিক্রিয়া প্রশংসা করা হয়।


1

যেহেতু আপনি এটি করতে চান তার কারণ হ'ল ডকার-রচনা ফাইলটি সংশোধন করা, অন্য বিকল্প হ'ল জেএসওএন ফাইল ব্যবহার করা। ডকার-রচনা এখন JSON ফাইলগুলিকে সমর্থন করে । জেএসএনএস-এর কমান্ড-লাইন হেরফেরের জন্য সমর্থন ইতিমধ্যে খুব ভাল (উদা: জকিউ )

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.