শেল স্ক্রিপ্টের মাধ্যমে কোনও 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.