Kullanıcı başına görev veya görev kümesi nasıl değiştirilir?


160

Ansible playbook'larımda yinelenen bir tema, sudo ayrıcalıklarıyla ( sudo: yes) bir komut yürütmem gerektiğidir, çünkü belirli bir kullanıcı için yapmak istiyorum. İdeal olarak sudo'yu o kullanıcıya geçmek ve normal olarak komutları yürütmek için kullanmayı tercih ederim. Çünkü o zaman chowning dizinleri gibi her zamanki post komutlarımı temizlemek zorunda kalmayacağım. İşte oyun kitaplarımdan birinden bir pasaj:

- 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

İdeal olarak sudo to su o kullanıcıya ihtiyaç duysa bile farklı bir kullanıcı olarak komutları veya komut kümelerini çalıştırabilirim.

Yanıtlar:


241

Ansible 1.9 veya üstü ile

Yanıtlayıcı 'kullanımları become, become_userve become_methoddirektifleri ayrıcalık artmasını sağlamak için. Bunları tüm bir oyuna veya oynatma kitabına uygulayabilir, dahil edilen bir oynatma kitabına yerleştirebilir veya belirli bir görev için ayarlayabilirsiniz.

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

Sen kullanabilirsiniz become_withayrıcalık yükseltme, varsayılan varlık nasıl sağlandığını belirtmek için sudo.

Yönerge, kullanıldığı bloğun kapsamı için geçerlidir ( örnekler ).

Bazı ek örnekler için Toplantı Sahipleri ve Kullanıcılar bölümüne ve daha ayrıntılı belgeler için Become (Ayrıcalık Yükselmesi) sayfasına bakın.

Görev kapsamı becomeve become_userdirektiflere ek olarak Ansible 1.9, açık direktiflerin yokluğunda bu değerleri oyun süresi boyunca ayarlamak için bazı yeni değişkenler ve komut satırı seçenekleri ekledi:

Ansible 2.0.2.0'dan itibaren, aşağıda açıklanan daha eski sudo/ sudo_usersözdizimi hala çalışmaktadır, ancak kullanımdan kaldırma bildirimi, "Bu özellik gelecekteki bir sürümde kaldırılacaktır."


Ansible 1.9'dan itibaren kullanımdan kaldırılmış ve kaldırılması planlanan önceki sözdizimi:

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

4
Bir değişkenden sudo_user belirtmek için, değişken şablonunuzdaki tırnak işaretlerini kullanın, örneğin - sudo_user: "{{ ansible_ssh_user }}"yaml sözdizimi hatası alırsınız.
Sumeet Pareek

İyi yakalama. OP'nin problemin formülasyonunu mümkün olduğunca yakından eşleştirmeye çalışıyordum, ancak değişken enterpolasyonu kullanmanın en yaygın seçenek olacağını kabul ediyorum.
Brett

5
Ansible 1.9'dan itibaren, bu becomesistem "sudo *" yerine sistemdir .
AndiDog

2
"Be" için 1.9+ söz dizimi doğrudur. Ayrıca, sistem kurulumunuza bağlı olarak "su" bazen varsayılan "sudo" dan daha iyi olabileceğinden "became_method" öğesini kontrol etmek isteyebilirsiniz.
ElementalStorm

New Ansible variables and command line options are added to set these values for the duration of a play. @Brett, bundan sonra gelen görevlerin ana bilgisayara bağlanmak için kullanılan some_userorijinal kullanıcı değil, çalıştırılacağı anlamına remote_usermı geliyor?
JohnnyQ

43

Ansible 2.x'te blockfor görev grubunu kullanabilirsiniz :

- 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

Ansible> 1.4'te, aslında o kullanıcı olarak oturum açmanıza ve bu komutu sudo'ya başvurmadan yürütmenize izin vermesi gereken görev düzeyinde bir uzak kullanıcı belirtebilirsiniz. Bu kullanıcı olarak oturum açamıyorsanız, sudo_user çözümü de çalışır.

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

Bkz. Http://docs.ansible.com/playbooks_intro.html#hosts-and-users


Bu sudo ayrıcalıklarına sahip olmadığınız durumlar için en iyi çözümdür
Darrel Holt


1

(Varsa) olarak ayarlanan ve bunlardan birine become_methodayarlanabilecek varsayılan yöntemi geçersiz kılmayı belirtebilirsiniz .ansible.cfgsudo, 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 }}'

Göstermeli

TASK [my-task : my secret identity] ************************************************************
ok: [my_ansible_server] => {
    "msg": "some_user"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.