আনসিবল দিয়ে কীভাবে লিনাক্স এনভায়রনমেন্ট ভেরিয়েবল সেট করবেন


101

হাই, আমি উত্তর দিয়ে পরিবেশের পরিবর্তনশীল কীভাবে সেট করব তা জানার চেষ্টা করছি।

এমন কিছু যা শেল কমান্ড এর মত:

EXPORT LC_ALL=C

শেল কমান্ড হিসাবে চেষ্টা করা হয়েছে এবং পরিবেশের মডিউল এবং হ্যাণ্ডেন্ড কিছুই ব্যবহার করার চেষ্টা করার সময় একটি ত্রুটি পেয়েছে।

আমি কি মিস করছি


4
আপনার কি এটিকে নির্দিষ্ট অ্যাকাউন্টে সেট করতে হবে (OME হোম /। প্রোফাইল, ডিফল্ট (/ ইত্যাদি / প্রোফাইল) বা এটি ইনস্টল করার আগে বা এটি চালানোর আগে কেবল এটি উপলব্ধ করা দরকার?
BMW

আমাকে এটি সেট করা দরকার যাতে আমি মঙ্গোদব কনসোলটি ব্যবহার করতে পারি। আমি মেশিনটি বাড়ানোর পরে এই ভেরিয়েবলটি রফতানি করে কনসোলে যেতে পারি না
Gleeb

ঠিক আছে, আপনি মঙ্গডব মডিউল সম্পর্কে জবাবদিহি করার বিষয়ে কথা বলছেন, তবে আপনি যখন মডিউলটি প্রস্তুত করবেন (কনফিগার ফাইলটি ইনস্টল করুন বা এর পরিষেবা শুরু করবেন) তখন সরাসরি এটিকে কেন রাখবেন না?
বিএমডাব্লু

4
পরিবেশের পরিবর্তনশীল কীভাবে সেট করা যায় তা মংডোব মডিউলটির সাথে কোনও সম্পর্ক রাখে। এবং আমি এটি মোটেও ব্যবহার করি নি। আমি যা চাই তা হ'ল মঙ্গোটি এনভির ভার সেট করে সার্ভিস শুরু করা
Gleeb

সুতরাং আপনি যে mongodb মডিউল প্রস্তুত ছিল না? তারপরে আপনার প্রথমে এতে সময় কাটাতে হবে, তবে আপনার সমস্যাটি সমস্যা নয়।
BMW

উত্তর:


163

এটি করার একাধিক উপায় রয়েছে এবং আপনার প্রশ্ন থেকে এটি আপনার প্রয়োজন কী তা পরিষ্কার করে না।

১. কেবলমাত্র পার টাস্ক সংজ্ঞায়িত করতে আপনার যদি পরিবেশের পরিবর্তনশীল প্রয়োজন হয় তবে আপনি এটি করুন:

- hosts: dev
  tasks:
    - name: Echo my_env_var
      shell: "echo $MY_ENV_VARIABLE"
      environment:
        MY_ENV_VARIABLE: whatever_value

    - name: Echo my_env_var again
      shell: "echo $MY_ENV_VARIABLE"

মনে রাখবেন যে MY_ENV_VARIABLEকেবল প্রথম কাজের জন্য উপলব্ধ, environmentএটি আপনার সিস্টেমে স্থায়ীভাবে সেট করে না।

TASK: [Echo my_env_var] ******************************************************* 
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": "whatever_value"}

TASK: [Echo my_env_var again] ************************************************* 
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": ""}

আশা করি শিগগিরই উপরের মত টাস্ক স্তরটি নয়, প্লে স্তরেও ব্যবহার environmentসম্ভব হবে । উত্তরীয়দের গিটহাবটিতে এই বৈশিষ্ট্যের জন্য বর্তমানে একটি টান অনুরোধ রয়েছে: https://github.com/ansible/ansible/pull/8651

আপডেট: এটি এখন জানুয়ারী 2, 2015 হিসাবে একীভূত হয়েছে।

২. আপনি যদি স্থায়ী পরিবেশ পরিবর্তনশীল + সিস্টেমের প্রশস্ত / কেবল নির্দিষ্ট ব্যবহারকারীর জন্য চান want

আপনার লিনাক্স বিতরণ / শেলটিতে আপনি এটি কীভাবে করেন তা খতিয়ে দেখা উচিত, এর জন্য একাধিক স্থান রয়েছে। উবুন্টুতে উদাহরণস্বরূপ আপনি ফাইলগুলিতে এটি সংজ্ঞায়িত করেন:

  • ~/.profile
  • /etc/environment
  • /etc/profile.d ডিরেক্টরি
  • ...

আপনি এটি সম্পর্কে উবুন্টু ডক্সটি এখানে পাবেন: https://help.ubuntu.com/commune/Ennative Variables

সর্বোপরি পরিবেশের পরিবর্তনশীল নির্ধারণের জন্য। উবুন্টু আপনি কেবল lineinfileউত্তরযোগ্য থেকে মডিউল ব্যবহার করতে পারেন এবং নির্দিষ্ট ফাইলে কাঙ্ক্ষিত লাইন যুক্ত করতে পারেন। এটি স্থায়ী করতে কোথায় যুক্ত করতে হবে তা জানতে আপনার ওএস ডক্সের সাথে পরামর্শ করুন।


6
দ্বিতীয় বিকল্পটি আমার যা প্রয়োজন। আমি নিজেই সমাধানটিতে পৌঁছেছি, তবে এটির মধ্যে একটি ts
Gleeb

4
দ্রুত আপডেট: উত্তরীয়দের জন্য টান অনুরোধ # 8651 একত্রিত করা হয়েছে, সুতরাং এখন প্লে স্তরেও এটি করা সম্ভব।
মিশাল গাসেক

8
সুতরাং উত্তরীয়ের মাধ্যমে স্থির পরিবেশের পরিবর্তনশীলগুলি সেট করার কোনও উপায় নেই?
আবর্জনা বর্ণবিবাহক

4
@ ডাম্পহোল আমি এর জন্য উত্তর গ্যালাক্সির "ফ্র্যাঙ্কলিংক.ইনমায়ারমেন্ট" ভূমিকাটি ব্যবহার করেছি।
এটেস গোরাল

4
আপনি যদি কেবল বর্তমান ব্যাশ শেলের জন্য পরিবেশ পরিবর্তনযোগ্য সেট করতে চান তবে কী হবে? উদাহরণস্বরূপ, একটি ডিক্রিপ্ট করা পাসওয়ার্ডটি এভাবে ব্যবহার করা যেতে পারে।
ওপেনসিভিলিয়েশন

30

আমার মন্তব্য করার মতো খ্যাতি ছিল না এবং তাই একটি নতুন উত্তর যুক্ত করছি।
গ্যাসেকের উত্তরটি বেশ সঠিক। কেবল একটি জিনিস: আপনি যদি .bash_profileফাইলটি বা আপডেট করে থাকেন তবে আপনি /etc/profileনতুন লগইন করার পরে এই পরিবর্তনগুলি প্রতিফলিত হবে। আপনি যদি এনইভিভ ভেরিয়েবল সেট করতে চান এবং তারপরে একই প্লেবুকের পরবর্তী কার্যগুলিতে এটি ব্যবহার করতে চান তবে .bashrcফাইলটিতে সেই পরিবেশের ভেরিয়েবল যুক্ত করার বিষয়টি বিবেচনা করুন।
আমি অনুমান করি এর পিছনের কারণটি হ'ল লগইন এবং অ-লগইন শেল।
উত্তরযোগ্য, বিভিন্ন কার্য সম্পাদন করার সময়, .bashrcফাইলের .bash_profileবা পর্বের পরিবর্তে কোনও ফাইল থেকে পরামিতিগুলি পড়ে /etc/profile

উদাহরণস্বরূপ, যদি আমি .bash_profileসংশ্লিষ্ট ব্যবহারকারীর ফাইলটিতে কাস্টম বাইনারি অন্তর্ভুক্ত করার জন্য আমার পথের পরিবর্তনশীলটি আপডেট করি এবং তারপরে ফাইলটির উত্সটি করি। পরবর্তী পরবর্তী কাজগুলি আমার আদেশটি স্বীকৃতি দেবে না। তবে আপনি যদি .bashrcফাইলটিতে আপডেট করেন তবে কমান্ডটি কাজ করবে।

 - name: Adding the path in the bashrc files
   lineinfile: dest=/root/.bashrc line='export PATH=$PATH:path-to-mysql/bin' insertafter='EOF' regexp='export PATH=\$PATH:path-to-mysql/bin' state=present
 
-  - name: Source the bashrc file
   shell: source /root/.bashrc

 - name: Start the mysql client
   shell: mysql -e "show databases";

এটি কাজ করবে , তবে আমি যদি প্রোফাইল ফাইল ব্যবহার করে এটি করতাম তবে mysql -e "show databases"ত্রুটি হত।

- name: Adding the path in the Profile files
   lineinfile: dest=/root/.bash_profile line='export PATH=$PATH:{{install_path}}/{{mysql_folder_name}}/bin' insertafter='EOF' regexp='export PATH=\$PATH:{{install_path}}/{{mysql_folder_name}}/bin' state=present

 - name: Source the bash_profile file
   shell: source /root/.bash_profile

 - name: Start the mysql client
   shell: mysql -e "show databases";

এই এক কাজ না করবে , আমরা একই প্লেবুক এই সব কর্ম থাকে।


4
যদি ডিফল্ট শেলটি sh হয় তবে উত্সটি কাজ করতে পারে না। পরিবর্তে source fileDo. file
Cloverr

13

কী / মানগুলি স্থায়ীভাবে সেট করার জন্য এখানে একটি স্থানীয় স্থানীয় কাজ /etc/environment(যা সিস্টেম-ব্যাপী সমস্ত ব্যবহারকারী):

- name: populate /etc/environment
  lineinfile:
    dest: "/etc/environment"
    state: present
    regexp: "^{{ item.key }}="
    line: "{{ item.key }}={{ item.value}}"
  with_items: "{{ os_environment }}"

এবং এর জন্য vars:

os_environment:
  - key: DJANGO_SETTINGS_MODULE 
    value : websec.prod_settings  
  - key: DJANGO_SUPER_USER 
    value : admin

এবং হ্যাঁ, আপনি যদি বাইরে বেরোন এবং পিছনে প্রবেশ করেন envতবে নতুন পরিবেশের ভেরিয়েবলগুলি দেখায়।


destএর সাথে প্রতিস্থাপন করা হয়েছিল path, তবে ডক্স অনুযায়ী এখনও কাজ করা উচিত। যদি তা না হয় তবে স্যুইচ করুন path
অনুমান করা

9

অবিচ্ছিন্নভাবে পরিবেশের ভেরিয়েবলগুলি সেট করার জন্য, আপনি উত্তরীয় গ্যালাক্সিতে বিদ্যমান যে কোনও একটি ভূমিকা ব্যবহার করতে পারেন। আমি weareinteractive.en वातावरण পরামর্শ দিই

জবাবদিহি-ছায়াপথ ব্যবহার:

$ ansible-galaxy install weareinteractive.environment

প্রয়োজনীয়তা.আইএমএল ব্যবহার করে:

- src: franklinkim.environment

তারপরে আপনার প্লেবুকে:

- hosts: all
  sudo: yes
  roles:
    - role: franklinkim.environment
      environment_config:
        NODE_ENV: staging
        DATABASE_NAME: staging

টুইটারে
এটেস গোলাল

দ্রষ্টব্য: weareinteractive.en वातावरण লিখেছেন / ইত্যাদি / পরিবেশে
সিমোহে

5

এটি সেরা বিকল্প। মিখাল গাসেক (প্রথম উত্তর) যেমনটি বলেছিলেন, যেহেতু পুল অনুরোধটি মার্জ করা হয়েছে ( https://github.com/ansible/ansible/pull/8651 ), আমরা প্লে স্তরের মাধ্যমে সহজেই স্থায়ী পরিবেশের পরিবর্তনগুলি সেট করতে সক্ষম হয়েছি ।

- hosts: all
  roles:
     - php
     - nginx
  environment:
    MY_ENV_VARIABLE: whatever_value

4
পরিবেশ কি ভূমিকার আগে চলছে? কারণ আমার চেহারা এখনও খালি আছে।
EvgenyKolyakov

এমনকি আমার অনুসন্ধানটি নির্বিশেষে শূন্য
আহ্মেফএম

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