কীভাবে একজন ব্যবহারকারী প্রতি টাস্ক বা কাজের সেট সেট করবেন?


160

আমার উত্তরযোগ্য প্লেবুকগুলিতে একটি পুনরাবৃত্তি থিমটি হ'ল আমাকে প্রায়শই সুডো সুবিধাসমূহ ( sudo: yes) সহ একটি কমান্ড চালানো আবশ্যক কারণ আমি এটি একটি নির্দিষ্ট ব্যবহারকারীর জন্য করতে চাই। আদর্শভাবে আমি ব্যবহারকারীর স্যুইচ করতে এবং কমান্ডগুলি সাধারনত সম্পাদন করতে বরং সুডো ব্যবহার করি। কারণ তখন আমাকে আমার সাধারণ পোস্ট কমান্ডগুলি ক্লাউনিং ডিরেক্টরি যেমন ক্লাউনিংয়ের মতো করতে হবে না। আমার প্লেবুকগুলির একটি স্নিপেট এখানে:

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
- name: change perms
  file: dest={{ dst }} state=directory mode=0755 owner=some_user
  sudo: yes

আদর্শভাবে আমি কমান্ড বা কমান্ডের সেটগুলি পৃথক ব্যবহারকারী হিসাবে চালাতে পারি এমনকি যদি সেই ব্যবহারকারীর পক্ষে সুডোর প্রয়োজন হয়।

উত্তর:


241

উত্তর 1.9 বা তার পরে

Ansible ব্যবহারসমূহ become, become_userএবং become_methodনির্দেশনা বিশেষাধিকার উদ্দীপন অর্জন করা। আপনি এগুলি একটি সম্পূর্ণ নাটক বা প্লেবুকে প্রয়োগ করতে পারেন, অন্তর্ভুক্ত প্লেবুকে সেট করতে পারেন বা কোনও নির্দিষ্ট কাজের জন্য সেট করতে পারেন।

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  become: yes
  become_user: some_user

আপনি become_withকীভাবে সুবিধাগুলি বাড়ানো হয়েছে তা নির্ধারণ করতে ব্যবহার করতে পারেন , ডিফল্ট sudo

নির্দেশটি কার্যকর হয় সেই ব্লকের যে পরিধিটিতে এটি ব্যবহৃত হয় ( উদাহরণস্বরূপ ) scope

কিছু অতিরিক্ত উদাহরণের জন্য হোস্ট এবং ব্যবহারকারীগণ দেখুন এবং আরও বিস্তারিত ডকুমেন্টেশনের জন্য (প্রিভিলেজ এসকেলেশন) হন।

টাস্ক-স্কোপড becomeএবং become_userনির্দেশাবলী ছাড়াও , উত্তরযোগ্য ১.৯ স্পষ্ট নির্দেশনার অভাবে একটি খেলার সময়কাল জন্য এই মানগুলি নির্ধারণ করতে কিছু নতুন ভেরিয়েবল এবং কমান্ড লাইন বিকল্প যুক্ত করেছে:

উত্তরযোগ্য ২.০.২.০ অনুসারে, নীচে বর্ণিত পুরানো sudo/ sudo_userবাক্য গঠনটি এখনও কাজ করে, তবে অবমূল্যায়নের বিজ্ঞপ্তিতে বলা হয়েছে, "এই বৈশিষ্ট্যটি ভবিষ্যতের প্রকাশে মুছে ফেলা হবে।"


পূর্ববর্তী সিনট্যাক্স, উত্তরযোগ্য 1.9 হিসাবে অবমানিত এবং অপসারণের জন্য নির্ধারিত:

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
  sudo_user: some_user

4
ভেরিয়েবল থেকে sudo_user নির্দিষ্ট করতে, আপনার ভেরিয়েবল টেমপ্লেটের চারপাশে উদ্ধৃতিগুলি ব্যবহার করুন - sudo_user: "{{ ansible_ssh_user }}"অথবা আপনি একটি yaml বাক্য গঠন ত্রুটি পাবেন।
সুমিত পরিক

ভালো বল ধরা. আমি যতটা সম্ভব সমস্যাটি ওপির গঠনের সাথে মিলে যাওয়ার চেষ্টা করছিলাম, তবে আমি একমত যে পরিবর্তনশীল ইন্টারপোলেশন ব্যবহার করা সবচেয়ে সাধারণ পছন্দ হবে।
ব্রেট

5
উত্তর 1.9 থেকে, এটি "sudo *" এর পরিবর্তে becomeসিস্টেম
অ্যান্ডিডগ

2
"হয়ে উঠুন" এর জন্য 1.9+ সিনট্যাক্সটি সঠিক। আপনার সিস্টেম সেটআপের উপর নির্ভর করে "সু_" ডিফল্ট "সুডো" এর চেয়ে অনেক বেশি ভাল হতে পারে বলে আপনি "বেন_মোথোড" চেক করতেও পারেন।
এলিমেন্টালস্টোরম

New Ansible variables and command line options are added to set these values for the duration of a play. @ ব্রেট তাই এর অর্থ কি এরপরের সফল কাজগুলি সঞ্চালিত হবে some_userএবং মূল ব্যবহারকারী remote_userযা হোস্টের সাথে সংযোগ করতে ব্যবহৃত হয়েছিল তা নয় , এটি কি সঠিক?
জননিকিউ

43

উত্তরযোগ্য ২.x এ, আপনি blockগ্রুপের কাজগুলির জন্য এটি ব্যবহার করতে পারেন :

- block:
    - name: checkout repo
      git:
        repo: https://github.com/some/repo.git
        version: master
        dest: "{{ dst }}"
    - name: change perms
      file:
      dest: "{{ dst }}"
      state: directory
      mode: 0755
      owner: some_user
  become: yes
  become_user: some user

26

জবাবদিহিতে> 1.4 এ আপনি টাস্ক স্তরে এমন একটি রিমোট ব্যবহারকারীকে নির্দিষ্ট করতে পারবেন যা আপনাকে সেই ব্যবহারকারী হিসাবে লগইন করতে এবং সুডোর অবলম্বন না করে সেই আদেশটি কার্যকর করতে পারে। আপনি যদি সেই ব্যবহারকারী হিসাবে লগইন করতে না পারেন তবে sudo_user সমাধানটিও কাজ করবে।

---
- hosts: webservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
      remote_user: yourname

Http://docs.ansible.com/playbooks_intro.html#hosts- এবং- ব্যবহারকারীদের দেখুন


পরিস্থিতিগুলির জন্য এটি সেরা সমাধান যখন আপনার sudo সুবিধাগুলি না থাকে
ড্যারেল হল্ট

7

সমাধানটি হ'ল includeস্টেটমেন্টটি remote_userভেরি দিয়ে ব্যবহার করুন (সেখানে বর্ণনা করুন: http://docs.ansible.com/playbooks_roles.html ) তবে এটি টাস্ক স্তরের পরিবর্তে প্লেবুকে করতে হবে।


এটি উপরের ব্যবহারের ক্ষেত্রে ভাল সমাধান নয়। তবে আমি দীর্ঘদিন এই সমাধান সম্পর্কে অবগত ছিলাম না। আমি ভেবেছিলাম আমি কেবল ভূমিকাগুলি অন্তর্ভুক্ত করতে পারি।
আরজানচাউটেন

1

আপনি become_methodডিফল্ট পদ্ধতিতে সেট ansible.cfg(যদি কোনও থাকে) ওভাররাইড করতে নির্দিষ্ট করতে পারেন, এবং কোনটিতে সেট করা যেতে পারে sudo, su, pbrun, pfexec, doas, dzdo, ksu

- name: I am confused
  command: 'whoami'
  become: true
  become_method: su
  become_user: some_user
  register: myidentity

- name: my secret identity
  debug:
    msg: '{{ myidentity.stdout }}'

প্রদর্শন করা উচিত

TASK [my-task : my secret identity] ************************************************************
ok: [my_ansible_server] => {
    "msg": "some_user"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.