উত্তর: আমি কমান্ড লাইন থেকে ভূমিকা সম্পাদন করতে পারি?


92

ধরুন আমার "অ্যাপাচি" নামে একটি ভূমিকা আছে

এখন আমি উত্তরী হোস্টের কমান্ড লাইন থেকে 192.168.0.10 হোস্টে এই ভূমিকাটি সম্পাদন করতে চাই

ansible-playbook -i  "192.168.0.10" --role  "path to role"

এটা করার কোন উপায় আছে?

উত্তর:


84

আমি এই বৈশিষ্ট্যটি সম্পর্কে অবগত নই, তবে আপনি কেবল আপনার প্লেবুক থেকে একটি ভূমিকা চালাতে ট্যাগগুলি ব্যবহার করতে পারেন।

roles:
    - {role: 'mysql', tags: 'mysql'}
    - {role: 'apache', tags: 'apache'}

ansible-playbook webserver.yml --tags "apache"

62

উত্তরযোগ্য 2.7 দিয়ে আপনি এটি করতে পারেন:

$ cd /path/to/ansible/
$ ansible localhost -m include_role -a name=<role_name>
localhost | SUCCESS => {
    "changed": false,
    "include_variables": {
        "name": "<role_name>"
    }
}
localhost | SUCCESS => {
    "msg": "<role_name>"
}

এটি / পাথ / থেকে / উত্তরযোগ্য / ভূমিকা বা কনফিগার করা রোল পাথ থেকে ভূমিকা পালন করবে।

এখানে আরও পড়ুন: https://github.com/ansible/ansible/pull/43131


4
এটি সত্যিকার অর্থে প্রশ্নের উত্তর দেয় না কারণ @ কারি বাস্তবায়িত এবং অন্তর্ভুক্ত করতে চায় এমন ওয়াইএএমএল ফাইলের বাহ্যিক ভূমিকার কোনও উল্লেখ নেই। আমারও একই প্রশ্ন. তবুও এই উত্তরটি পড়ার পরে, আমি কেবল বুঝতে পারি যে এটি সম্ভব। আমি ঠিক জানি না কিভাবে।
কোলা

আশা করি আমি উত্তরটি @ কোলা
জুলিয়াস Žaromskis

4
এটি উত্তর ২.৮ এ ভাঙ্গা। এটি কেবল ক্রিপ্টিক ত্রুটি বার্তাগুলি লগ করে'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
ক্রিশ্চিয়ান সিচ ২ '

এই সমাধানটি আমার কাছে উত্তরদাতা ২.৮.২ নিয়ে কাজ করে বলে মনে হচ্ছে। মূল ভূমিকার (যা কোনও প্লেবুকের কোনও সমস্যা নয়) অন্তর্ভুক্ত অন্যান্য ভূমিকার সাথে ভেরিয়েবলগুলি প্রকাশ করার ক্ষেত্রে এটির সমস্যা আছে বলে মনে হয়। আমি পরিবর্তনের চেষ্টা করেছি -a "name=<role_name> public=yes", কিন্তু তাতে কোন লাভ হয়নি।
ব্যবহারকারী2066480

-M এবং -a কী ডকস.আনসিবল.com/ansible/latest/user_guide/modules_intro.html দেখতে পাবে তা বোঝার জন্য , কমান্ড লাইন ( -m <module-name>) থেকে কী = মান জোড়া যুক্তি ( -a key=value) হিসাবে
আন্ডিয়ামেল

22

উত্তরযোগ্য তেমন কোনও জিনিস নেই, তবে এটি যদি আপনার জন্য প্রায়শই ব্যবহারের ক্ষেত্রে হয় তবে এই স্ক্রিপ্টটি ব্যবহার করে দেখুন।
নাম অনুসারে এটি আপনার সন্ধানযোগ্য PATH এর মধ্যে কোথাও রাখুন ansible-role:

#!/bin/bash

if [[ $# < 2 ]]; then
  cat <<HELP
Wrapper script for ansible-playbook to apply single role.

Usage: $0 <host-pattern> <role-name> [ansible-playbook options]

Examples:
  $0 dest_host my_role
  $0 custom_host my_role -i 'custom_host,' -vv --check
HELP
  exit
fi

HOST_PATTERN=$1
shift
ROLE=$1
shift

echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."

export ANSIBLE_ROLES_PATH="$(pwd)/roles"
export ANSIBLE_RETRY_FILES_ENABLED="False"
ansible-playbook "$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  roles:
    - $ROLE
END

4
আমি একটি "একটি জবাবদিহি ভূমিকা তৈরি করুন" সরঞ্জাম প্রস্তাব তৈরি করেছি, আমরা দেখতে পাব: github.com/ansible/proposals/issues/131
ঝুতর

4
দেখে মনে হচ্ছে এটি উত্তর ২.7 এ প্রয়োগ করা হয়েছে: github.com/ansible/ansible/pull/43131
EM0

হ্যাঁ, দয়া করে চেষ্টা করুন ansible localhost -m include_role -a name=myrole- আমার জন্য কাজ করে !
ঝুতর

ansible localhost -m include_role -a name=myroleউত্তরহীন ২.৮ থেকে ভাঙা হয়েছে। এটি কেবল ক্রিপ্টিক ত্রুটি বার্তাগুলি লগ করে'ERROR! 'async_val' is not a valid attribute for a IncludeRole'.
ক্রিশ্চিয়ান সিচ ২ '


13

আমি একটি ছোট্ট উত্তরযোগ্য প্লাগইন লিখেছি, যার নাম auto_tagsআপনার প্লেবুকের প্রতিটি ভূমিকার জন্য একই নামে একটি ট্যাগ গতিশীলভাবে উত্পন্ন করে। আপনি এটি এখানে খুঁজে পেতে পারেন ।

এটি ইনস্টল করার পরে (নির্দেশাবলী উপরের শিরোনামে রয়েছে) আপনি তারপরে একটি নির্দিষ্ট ভূমিকা সম্পাদন করতে পারেন:

ansible-playbook -i "192.168.0.10" --tags "name_of_role"


4

আপনি কি চেষ্টা করেছেন? এটা দুর্দান্ত। আরও অর্থবহ উদাহরণ দেওয়ার জন্য আমি 'অ্যাপাচি' রোলের পরিবর্তে 'আপডেট-ওএস' ব্যবহার করছি। আমার একটি ভূমিকা রয়েছে যার নামটি বলা যাক আমি ./roles/update-os/বলি ./আমি এমন একটি ফাইল যুক্ত করি ./role-update-os.ymlযা দেখে মনে হয়:

#!/usr/bin/ansible-playbook
---
- hosts: all
  gather_facts: yes
  become: yes
  roles:
  - update-os

এই ফাইলটি কার্যকর ( chmod +x role-update-os.yml) কার্যকর করুন। এখন আপনি চালাতে পারেন এবং আপনার ইনভেন্টরিতে যা কিছু আছে ./update-os.yml -i inventory-dev --limit 192.168.0.10তার সীমাবদ্ধ রাখতে পারবেন আপনি গ্রুপের নামগুলিও পাস করতে পারেন।

  • --limit web,db > ওয়েব এবং ডিবি আপনার তালিকাতে সংজ্ঞায়িত গোষ্ঠী
  • --limit 192.168.0.10,192.168.0.201
$ cat inventory-dev
[web]
192.168.0.10

[db]
192.168.0.201

নোট করুন যে আপনি পাসওয়ার্ড টাইপ না করেই এক্সিকিউট করতে সক্ষম হতে ssh-key এবং sudoers নীতিটি কনফিগার করতে পারেন - অটোমেশনের জন্য আদর্শ, এটির সাথে সুরক্ষা জড়িত রয়েছে। সুতরাং আপনাকে আপনার পরিবেশটি উপযুক্ত কিনা তা বিশ্লেষণ করতে হবে।


2

জবাবদিহি ২.৮ এ এটি কিছুটা আলাদা কাজ করে

wohlgemuth@leela:~/workspace/rtmtb-ansible/kvm-cluster$ ansible localhost -m import_role -a name=rtmtb
 [WARNING]: No inventory was parsed, only implicit localhost is available

localhost | CHANGED => {
    "changed": true, 
    "checksum": "d31b41e68997e1c7f182bb56286edf993146dba1", 
    "dest": "/root/.ssh/id_rsa.github", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "b7831c4c72f3f62207b2b96d3d7ed9b3", 
    "mode": "0600", 
    "owner": "root", 
    "size": 3389, 
    "src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.46-139127672211209/source", 
    "state": "file", 
    "uid": 0
}
localhost | CHANGED => {
    "changed": true, 
    "checksum": "1972ebcd25363f8e45adc91d38405dfc0386b5f0", 
    "dest": "/root/.ssh/config", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "f82552a9494e40403da4a80e4c528781", 
    "mode": "0644", 
    "owner": "root", 
    "size": 147, 
    "src": "/home/wohlgemuth/.ansible/tmp/ansible-tmp-1561491049.99-214274671218454/source", 
    "state": "file", 
    "uid": 0
}

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