উত্তরযোগ্য হোস্টে কমান্ড চালান


247

উত্তর হোস্টে কমান্ড চালানো কি সম্ভব?

আমার পরিস্থিতিটি হ'ল আমি অভ্যন্তরীণভাবে হোস্ট করা গিট সার্ভার থেকে চেকআউট নিতে চাই (এবং সংস্থার ফায়ারওয়ালের বাইরে অ্যাক্সেসযোগ্য নয়)। তারপরে আমি চেকআউটটি (টারবল্ট) প্রোডাকশন সার্ভারে (বাহ্যিকভাবে হোস্ট করা) আপলোড করতে চাই।

এই মুহুর্তে, আমি একটি স্ক্রিপ্ট চালিয়ে যাচ্ছি যা চেকআউট করে, এটি টিবারল করে, এবং তার পরে ডিপ্লোয়মেন্ট স্ক্রিপ্টটি চালায় - তবে আমি যদি এটিকে উত্তরীয়তে সংহত করতে পারি তবে এটি অগ্রাধিকারযোগ্য।

উত্তর:


347

হ্যাঁ, আপনি উত্তরযোগ্য হোস্টে কমান্ডগুলি চালাতে পারেন। আপনি উল্লেখ করতে পারেন যে কোনও নাটকের সমস্ত কাজ উত্তরযোগ্য হোস্টে চালিত হয় বা আপনি পৃথক টাস্কগুলি উত্তরীয় হোস্টে চালানোর জন্য চিহ্নিত করতে পারেন।

আপনি যদি উত্তরীয় হোস্টটিতে একটি সম্পূর্ণ নাটকটি চালাতে চান তবে উল্লেখ করুন hosts: 127.0.0.1এবং connection:localনাটকে উদাহরণস্বরূপ:

- name: a play that runs entirely on the ansible host
  hosts: 127.0.0.1
  connection: local
  tasks:
  - name: check out a git repository
    git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path

আরও তথ্যের জন্য উত্তরযোগ্য ডকুমেন্টেশনে স্থানীয় প্লেবুকগুলি দেখুন ।

আপনি যদি নিজের উত্তরযোগ্য হোস্টে কেবল local_actionএকটি কাজ চালাতে চান তবে আপনি স্থানীয়ভাবে কোনও কাজটি চালানো উচিত তা নির্দিষ্ট করে ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

- name: an example playbook
  hosts: webservers
  tasks:
  - ...

  - name: check out a git repository
    local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path

আরও তথ্যের জন্য উত্তরীয় ডকুমেন্টেশনে ডেলিগেশন দেখুন ।

সম্পাদনা করুন: আপনার নিজের জায়টিতে এটি connection: localযোগ করে আপনি আপনার খেলতে টাইপ করা এড়াতে পারেন :

localhost ansible_connection=local

(এখানে আপনি নাটকটি উল্লেখ করতে "127.0.0.1" এর পরিবর্তে "লোকালহোস্ট" ব্যবহার করবেন)।

সম্পাদনা করুন: জবাবদিহির নতুন সংস্করণগুলিতে আপনাকে আর আপনার তালিকাতে উপরের লাইনটি যুক্ত করতে হবে না, উত্তরযোগ্য এটি ধরে নিয়েছে যে এটি ইতিমধ্যে রয়েছে।


8
আমারও sudo: noপ্রতিনিধি
দৃশ্যে

রুট ব্যবহারকারী হিসাবে স্থানীয় সংযোগটি কীভাবে চালানো যায়?
বিলাল ইউসান

@ বিলালউসিয়ান ansible-playbook -K playbook.ymlযেখানে -শ মূলের জন্য
কুশ

74

আমি এগুলি লিখতে পারে এমন আরও কয়েকটি উপায় খুঁজে পেয়েছি যা কিছুটা বেশি পঠনযোগ্য IMHO।

- name: check out a git repository
  local_action: 
    module: git
    repo: git://foosball.example.org/path/to/repo.git
    dest: /local/path

অথবা

- name: check out a git repository
  local_action: git
  args:
    repo: git://foosball.example.org/path/to/repo.git
    dest: /local/path

3
আকর্ষণীয়, কমান্ড দিয়ে কিভাবে কাজ করবে ? কারণ যতদূর আমি জানি আমরা কার্যকর করা আদেশটি সংজ্ঞায়িত করতে পেরাম ফ্রি_ফর্মটি ব্যবহার করতে পারি না
আন্ডার

@ এবং একই মডিউলটিতে প্রযোজ্য shell
সিলিং

6
কমান্ড / শেল ব্যবহারের জন্য, আপনি যা চান তা হল "_raw_params"
এমভিআর

41

আমি ভাগ করে নিতে চাই যে উত্তরিয়াকে শেলের মাধ্যমে লোকালহোস্টে চালানো যেতে পারে:

ansible all -i "localhost," -c local -m shell -a 'echo hello world'

এটি সাধারণ কাজগুলির জন্য বা কিছু উত্তরযোগ্য শেখার জন্য সহায়ক হতে পারে।

কোডের উদাহরণটি এই ভাল নিবন্ধ থেকে নেওয়া হয়েছে:

লোকালহোস্টে উত্তরযোগ্য প্লেবুক চলছে


2
লোকালহোস্টের পরে কমা (,) এর তাত্পর্য কী। আমি লক্ষ্য করেছি এটি কমান্ডের পক্ষে কাজ করা জরুরী
Tuomas Toivonen

2
ট্রেলিং কমা হ'ল একটি ফাইলের দিকে ইঙ্গিত করে একটি সাধারণ তালিকা সংজ্ঞায়িত করা। এটি একটি অননুমোদিত হ্যাক এবং এটি চলে যেতে পারে (iirc)।
সেন্সরসাইল

19

আপনি delegate_toআপনার উত্তরযোগ্য হোস্ট (অ্যাডমিন হোস্ট) এ কমান্ড চালাতে ব্যবহার করতে পারেন , যেখান থেকে আপনি আপনার উত্তরযোগ্য প্লেটি চালাচ্ছেন। উদাহরণ স্বরূপ:

কোনও ফাইল যদি এটি ইতিমধ্যে উত্তরযোগ্য হোস্টে উপস্থিত থাকে তবে মুছুন:

 - name: Remove file if already exists
   file:
    path: /tmp/logfile.log
    state: absent
    mode: "u+rw,g-wx,o-rwx"
   delegate_to: 127.0.0.1

জবাবদিহি হোস্টে একটি নতুন ফাইল তৈরি করুন:

 - name: Create log file
   file:
    path: /tmp/logfile.log
    state: touch
    mode: "u+rw,g-wx,o-rwx"
   delegate_to: 127.0.0.1

1
এটি এখন পর্যন্ত যে কোনও উত্তরের পরিষ্কার সমাধান বলে মনে হচ্ছে।
ছানা

1
একমত। সর্বনিম্ন নতুন বাক্য গঠন, সবচেয়ে নমনীয় (অন্য কোথাও প্রতিনিধি)। একটি বিষয় লক্ষণীয় - যদি becomeকাজের জন্য সত্য হয় তবে এটি সুডো এবং এ জাতীয় সম্পর্কে অভিযোগ করবে। এটি সরাসরি টাস্কে ঘটতে পারে বা অন্য কোথাও উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে।
জেএল পেয়ারেট

4

@ গর্ডনের উত্তরের সম্প্রসারণ, এখানে শেল / কমান্ড মডিউল সহ পাঠযোগ্য পাঠ্য সিনট্যাক্স এবং যুক্তির উদাহরণ রয়েছে (এটি গ্যান্ড মডিউল থেকে পৃথক যেগুলি ফ্রি-ফর্ম আর্গুমেন্ট, যেমন @ রেন্ডার দ্বারা উল্লিখিত)

- নাম: "রিলিজ টারবাল উত্পন্ন হয়"
  local_action:
    মডিউল: শেল
    _আরও_প্রেমস: গিট আর্কাইভ - ফর্ম্যাট জিপ - আউটপুট রিলিজ.জিপ হেড
    chdir: "ফাইল / ক্লোনস / ওয়েবহুকস"

2

উত্তরীয় ডকুমেন্টেশন থেকে :

প্রতিনিধিদলটি এটি আসলে আপডেট নির্দিষ্টভাবে ঘূর্ণায়মান নয় তবে এই ক্ষেত্রে প্রায়শই উপস্থিত হয়।

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

---

- hosts: webservers
  serial: 5

  tasks:

  - name: take out of load balancer pool
    command: /usr/bin/take_out_of_pool {{ inventory_hostname }}
    delegate_to: 127.0.0.1

  - name: actual steps would go here
    yum:
      name: acme-web-stack
      state: latest

  - name: add back to load balancer pool
    command: /usr/bin/add_back_to_pool {{ inventory_hostname }}
    delegate_to: 127.0.0.1

এই কমান্ডগুলি 127.0.0.1 এ চলবে, এটি মেশিনটি আনসিবল চলমান। একটি শর্টহ্যান্ড সিনট্যাক্সও রয়েছে যা আপনি প্রতি টাস্ক ভিত্তিতে ব্যবহার করতে পারেন: 'লোকাল_অ্যাকশন'। এখানে উপরের মতো একই প্লেবুক রয়েছে, তবে 127.0.0.1 তে প্রতিনিধিত্ব করার জন্য শর্টহ্যান্ড সিনট্যাক্স ব্যবহার করে:

---

# ...

  tasks:

  - name: take out of load balancer pool
    local_action: command /usr/bin/take_out_of_pool {{ inventory_hostname }}

# ...

  - name: add back to load balancer pool
    local_action: command /usr/bin/add_back_to_pool {{ inventory_hostname }}

একটি সাধারণ প্যাটার্ন হ'ল পরিচালিত সার্ভারগুলিতে পুনরাবৃত্তভাবে ফাইলগুলি অনুলিপি করতে 'আরএসসিএনসি' কল করতে স্থানীয় ক্রিয়া ব্যবহার করা use এখানে একটি উদাহরণ:

---
# ...
  tasks:

  - name: recursively copy files from management server to target
    local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/

নোট করুন যে আপনার কাজ করার জন্য পাসফ্রেজ-কম এসএসএইচ কী বা একটি এসএস-এজেন্ট কনফিগার করা থাকতে হবে, অন্যথায় আরএসসিএনকে একটি পাসফ্রেজ চাইতে হবে।


0
ansible your_server_name -i custom_inventory_file_name -m -a "uptime"

ডিফল্ট মডিউল হ'ল কমান্ড মডিউল, সুতরাং commandকীওয়ার্ডের প্রয়োজন হয় না।

আপনাকে যদি -bএকই কমান্ডের শেষে উন্নত সুবিধাসমূহ সহ কোনও কমান্ড জারি করতে হয়।

ansible your_server_name -i custom_inventory_file_name -m -a "uptime" -b

-1

আপনি এইভাবে চেষ্টা করতে পারেন

  • গিট: রেপো: ' https://foosball.example.org/path/to/repo.git ' গন্তব্য: / এসআরভি / চেকআউট সংস্করণ: রিলিজ -২.২ প্রতিনিধি_তে: লোকালহোস্ট
  • নাম: পরের yum কিছু কমান্ড সম্পাদন করুন: নাম = এনটিপি অবস্থা = সর্বশেষ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.