Puppet Exec không thực thi useradd


0

Theo những gì tôi hiểu, con rối chạy như root. Là root, tôi khởi chạy

 puppetd --onetime --no-daemonize --verbose

Vì vậy, tôi không hiểu tại sao điều này không hoạt động:

exec { "useradd -m testuser":
       path => "/bin:/usr/bin",
     }

Tôi chỉ nhận được:

...Exec[useradd -m testuser]/returns: change from notrun to 0 failed:useradd -m testuser returned 1 instead of one of [0] at...

Nếu tôi thực hiện lệnh trực tiếp, nó hoạt động tốt.

Có ý kiến ​​gì không?

PS: exec {"touch /root/a.test":} thành công, vì vậy nó thực sự đang thực thi với quyền root.

PS2: Tôi gặp vấn đề tương tự chính xác khi thực hiện "apt-get autoremove"


Hệ điều hành này là gì?
Tacticus

Đó là trên Ubuntu 10.04
chris

Bạn đã chuyển useradd chưa? Những người điều hành rối sẽ không kế thừa các giá trị đường dẫn mặc định từ máy chủ lưu trữ
Tacticus

Câu trả lời:


1

Vâng, trong hầu hết các hệ thống, useradd sẽ nằm trong một trong các thư mục sbin chứ không phải / bin hoặc / usr / bin. con đường của bạn nên được "/bin:/usr/bin:/sbin:/usr/sbin",. mặc dù giải pháp này khá kinh khủng nhưng tôi sẽ sử dụng loại người dùng thay vì thực thi, nó sẽ giúp bạn quản lý người dùng tốt hơn trên máy chủ (kiểm tra pw và yêu cầu tồn tại, v.v.)

@user {
  "testuser":
    uid => ,
    gid =>,
    password => #hash of password,
    home => ,
    groups => ,
}

đây là tài nguyên ảo và có thể được thêm vào máy chủ của bạn bằng cách realize ( User[testuser])cho phép nó được tham chiếu nhiều lần

đó là một giải pháp đơn giản


Con đường không may không phải là vấn đề. Và liên quan đến loại người dùng, bạn đã đúng ... xem ở trên.
chris

Sau rất nhiều cuộc điều tra, có vẻ như con đường thực sự là vấn đề! Cảm ơn!
chris

4

Hãy thử chạy lệnh với:

exec { "useradd -m testuser":
  path => "/bin:/usr/bin",
  logoutput => true,
}

Và xem những gì nó nói. Nó sẽ cung cấp cho bạn lỗi trên dòng lệnh bây giờ. Ngoài ra 'on_failure' là một tùy chọn khác chỉ xuất ra khi lệnh thất bại. Tôi thường làm:

Exec {
  logoutput => on_failure,
}

Như một mặc định, vì vậy tất cả các lệnh của tôi tạo ra một cái gì đó có ý nghĩa trên toàn cầu nếu chúng thất bại.

Nhưng thông thường - bạn sẽ sử dụng tài nguyên 'người dùng' thay thế:

user { "myusername":
  ensure => present,
  managehome => true,
}

Tài liệu tốt ở đây một mình với các loại tài nguyên khác:

http://docs.puppetlabs.com/references/2.7.0/type.html#user


Tôi dường như không thể tìm thấy nhật ký đầu ra. Mặc dù nó được đặt là / var / log / Puppet / in Puppet.conf, thư mục đó trống. Tui bỏ lỡ điều gì vậy?
chris

Nếu bạn chạy con rối trên dòng lệnh, bạn sẽ thấy nó trong báo cáo 'tác nhân bù nhìn -t' ... kiểm tra nó hoạt động bằng cách chỉ sử dụng 'echo foo' trong một tài nguyên thực thi khác.
Ken Barber

-t không phải là một lựa chọn hợp lệ ... Bằng cách chạy puppetd --onetime --no-daemonize --verbose --logdest / var / log / con rối / log --debug tôi nhận được một số thông tin hơn, nhưng không có gì hữu ích về việc tại sao useradd là thất bại.
chris

1

hoạt động nhưng nó trả về 1 thay vì 0? Hãy thử chạy echo $?theo useraddlệnh đó .

Bạn có xu hướng nhận được thông báo lỗi tốt hơn bằng cách sử dụng các kiểu Puppet tích hợp thay vì thực thi như thế này:

user { "foo":
  ensure => present,
  uid => 1001,
  password => '<some password hash>',
  shell => "/bin/bash",
  home => "/home/foo",
  groups =>  ["foogroup"],
  managehome => true,
}

Có bất kỳ lý do bạn đang sử dụng exec thay vì làm điều đó?


Không, nó không hoạt động. Phần useradd thực sự là một phần của tập lệnh lớn hơn đồng bộ hóa người dùng với bảng sql. Tôi muốn thực hiện đồng bộ hóa thông qua con rối nhưng tôi không biết bắt đầu từ đâu ...
chris

0

Bạn cần đảm bảo rằng bạn có viên ngọc Ruby Shadow để hoạt động với / etc / Shadow

sudo apt-get install libshadow-ruby1.8

hoặc trong redhat / fedora

sudo yum install ruby-shadow

Nó đã được cài đặt, phiên bản mới nhất.
chris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.