your first play, which sets up the admin user, could run every time. If set
up to be properly idempotent then would you need to test for anything?
I am facing a similar issue. I would like a play to set up a user and a
second play (in the same book) to start doing things as the created user.
So far I have tried the following:
---
- name: create user with an ssh key in authorized_keys
hosts: testMachine
sudo: True
vars:
userName: 'auser'
roles:
- { role: creatUser, userName: "{{ userName }}" }
- name: use the new user to install required stuff
hosts: testMachine
remote_user: auser
roles:
- moreConfigWithAUser
I invoke this playbook using -kK so that it is able to connect and create
the new user. But what appears to happen is that the second play fails to
use the public key and re-uses the ssh password I previously provided,
which obviously is not correct for this user as no password is set. Am I
going about this wrong or am I just missing a crucial config item somewhere?
On Tue, May 20, 2014 at 11:36 AM, Jeff Geerling wrote:
So I got quite a bit further, but was ultimately stymied by the fact that
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected] <javascript:>.
To post to this group, send email to [email protected]
<javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/a3b074d0-5f6d-4b57-b841-fc9d13109146%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/a3b074d0-5f6d-4b57-b841-fc9d13109146%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--So I got quite a bit further, but was ultimately stymied by the fact that
I can't override a playbook/role variable or global variable using the
set_fact module (at least, after 1.5/1.6). Here's the code I had almost
working:
---
- name: Check if we can connect using the normal user.
command: "ssh -oBatchMode=yes {{ admin_user }}@{{ ansible_ssh_host
}} exit"
failed_when: false
changed_when: false
register: ssh_result
connection: local
sudo: no
- debug: var=user_creation_account
- name: Switch user account if necessary.
set_fact: user_creation_account="root"
when: ssh_result.rc != 0
connection: local
sudo: no
- debug: var=user_creation_account
When I run the playbook, it checks if the local host can connect to the
server via the normal admin_user, and if not, it tries to override the
'user_creation_account' variable, which would then be used (defaults to
admin_user elsewhere) for the initial user creation 'remote_user'
configuration.
Unfortunately, 'user_creation_account' remains set to the value in the
included playbook variables file, so it seems my set_fact can't override
that variable :(
For now, I think I'll just stick to one playbook to do initial user
setup, then the normal one for once the accounts/SSH are configured
correctly. And for most other projects, just using DO's droplet
API/integration, or AWS integration, is perfectly adequate and much simpler!
-Jeff
Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/
msgid/ansible-project/da689eb9-4a16-43bd-b60f-
966ebde281b7%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/da689eb9-4a16-43bd-b60f-966ebde281b7%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--set_fact module (at least, after 1.5/1.6). Here's the code I had almost
working:
---
- name: Check if we can connect using the normal user.
command: "ssh -oBatchMode=yes {{ admin_user }}@{{ ansible_ssh_host
}} exit"
failed_when: false
changed_when: false
register: ssh_result
connection: local
sudo: no
- debug: var=user_creation_account
- name: Switch user account if necessary.
set_fact: user_creation_account="root"
when: ssh_result.rc != 0
connection: local
sudo: no
- debug: var=user_creation_account
When I run the playbook, it checks if the local host can connect to the
server via the normal admin_user, and if not, it tries to override the
'user_creation_account' variable, which would then be used (defaults to
admin_user elsewhere) for the initial user creation 'remote_user'
configuration.
Unfortunately, 'user_creation_account' remains set to the value in the
included playbook variables file, so it seems my set_fact can't override
that variable :(
For now, I think I'll just stick to one playbook to do initial user
setup, then the normal one for once the accounts/SSH are configured
correctly. And for most other projects, just using DO's droplet
API/integration, or AWS integration, is perfectly adequate and much simpler!
-Jeff
On Tuesday, May 20, 2014 9:15:00 AM UTC-5, Jeff Geerling wrote:
So, I have a playbook set up with remote_user: admin, and the remote
server only allows 'root' until the admin user is set up. If I add a ping
task as the first task in the playbook (with failed_when: false
and gather_facts: no), then I get the following:
PLAY [playbook] ******************************
***********************************
TASK: [Check if we can connect using ping module.]
****************************
fatal: [drupal] => SSH encountered an unknown error during the
connection. We recommend you re-run the command using -vvvv, which
will enable SSH debugging output to help diagnose the issue
Is there some way, in a playbook, to have a 'pre-pre-task' or a way to
catch an SSH connection error and set a flag based on that? Basically, I
don't want to fail after SSH connection error, but attempt to run a
separate play as root... something along those lines.
Worst case, I'll just keep doing what I'm doing (separate small
playbook to configure admin user and SSH security that runs as root, and
kick that playbook off by hand for each server provision). But it would be
great if it were possible to provision and re-run a playbook on any hosting
provider (besides the ones with nice APIs or kickstart abilities) with one
playbook :)
-Jeff
You received this message because you are subscribed to the GoogleSo, I have a playbook set up with remote_user: admin, and the remote
server only allows 'root' until the admin user is set up. If I add a ping
task as the first task in the playbook (with failed_when: false
and gather_facts: no), then I get the following:
PLAY [playbook] ******************************
***********************************
TASK: [Check if we can connect using ping module.]
****************************
fatal: [drupal] => SSH encountered an unknown error during the
connection. We recommend you re-run the command using -vvvv, which
will enable SSH debugging output to help diagnose the issue
Is there some way, in a playbook, to have a 'pre-pre-task' or a way to
catch an SSH connection error and set a flag based on that? Basically, I
don't want to fail after SSH connection error, but attempt to run a
separate play as root... something along those lines.
Worst case, I'll just keep doing what I'm doing (separate small
playbook to configure admin user and SSH security that runs as root, and
kick that playbook off by hand for each server provision). But it would be
great if it were possible to provision and re-run a playbook on any hosting
provider (besides the ones with nice APIs or kickstart abilities) with one
playbook :)
-Jeff
On Monday, May 19, 2014 8:50:53 AM UTC-5, Jeff Geerling wrote:
When I order a new server from a hosting provider which doesn't have
images like AMIs or user-created Images, I generally get a minimal OS
installation and a root user account.
The first thing I need to do on the server, before I can start
securely configuring the server from an admin user account, and deploying
an app to that server, is to *create* the admin user account with
which I'll do the rest of the work, and then disable password-based login
and root SSH access.
Currently, I have two separate playbooks to accomplish these two
separate tasks (first setting up the server/security minimally, second
configuring the server and deploying an app).
Are there any better ways of doing this? Basically, I'd like to have
a way of saying "if this is a new server/my admin user can't connect, first
run this set of plays as the root user, then continue on as the normal
remote_user".
Using Digital Ocean or AWS makes this a bit easier, as I can use
Packer and create an initial image that already has the minimal base
configuration... but I manage a lot of hosts from a lot of providers, and
usually don't have a way to manage fresh images.
--When I order a new server from a hosting provider which doesn't have
images like AMIs or user-created Images, I generally get a minimal OS
installation and a root user account.
The first thing I need to do on the server, before I can start
securely configuring the server from an admin user account, and deploying
an app to that server, is to *create* the admin user account with
which I'll do the rest of the work, and then disable password-based login
and root SSH access.
Currently, I have two separate playbooks to accomplish these two
separate tasks (first setting up the server/security minimally, second
configuring the server and deploying an app).
Are there any better ways of doing this? Basically, I'd like to have
a way of saying "if this is a new server/my admin user can't connect, first
run this set of plays as the root user, then continue on as the normal
remote_user".
Using Digital Ocean or AWS makes this a bit easier, as I can use
Packer and create an initial image that already has the minimal base
configuration... but I manage a lot of hosts from a lot of providers, and
usually don't have a way to manage fresh images.
Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/
msgid/ansible-project/da689eb9-4a16-43bd-b60f-
966ebde281b7%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/da689eb9-4a16-43bd-b60f-966ebde281b7%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected] <javascript:>.
To post to this group, send email to [email protected]
<javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/a3b074d0-5f6d-4b57-b841-fc9d13109146%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/a3b074d0-5f6d-4b57-b841-fc9d13109146%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/e92eb820-9c10-431b-ad39-7727e795a9eb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.