OpenStack vif_type: binding_failed

As part of a project that I’m involved in at work, I needed to create a reproducible OpenStack Juno environment that I could beat my head against.

I decided to forgo using the pre-packaged solutions that are readily available because I knew I was going to be knee deep in neutron and I wanted to fully envelope myself in its setup and configuration. The masochist in me would be proud.

I followed the documentation available here which was, to my great surprise, almost entirely accurate. It’s not often that one finds high quality documentation in an open source project.

During my testing and use of the end result though, I kept repeatedly running into a traceback error on the compute node. It looked like this

ERROR nova.compute.manager [...] Instance failed to spawn
TRACE nova.compute.manager [...] Traceback (most recent call last):
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2267, in _build_resources
TRACE nova.compute.manager [...]     yield resources
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 2137, in _build_and_run_instance
TRACE nova.compute.manager [...]     block_device_info=block_device_info)
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 2620, in spawn
TRACE nova.compute.manager [...]     write_to_disk=True)
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 4159, in _get_guest_xml
TRACE nova.compute.manager [...]     context)
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 3937, in _get_guest_config
TRACE nova.compute.manager [...]     flavor, CONF.libvirt.virt_type)
TRACE nova.compute.manager [...]   File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/vif.py", line 352, in get_config
TRACE nova.compute.manager [...]     _("Unexpected vif_type=%s") % vif_type)
TRACE nova.compute.manager [...] NovaException: Unexpected vif_type=binding_failed
TRACE nova.compute.manager [...]

It’s not often that I am the first person to encounter an error, so I googled the above error in the hopes that it would enlighten me to the problem. tl;dr, it didn’t.

Based on the problem I was receiving versus the accepted solutions available on the net, it seems that this is a rather general error that can indicate a problem “somewhere” in neutron.

The solution for me was actually a user error. In horizon I was logging in as the admin user and trying to boot an image using the ext-net network. That’s not going to work though because there is no DHCP service running on the external net.

Instead I should have been using the demo-net network. In the horizon UI though this network was not visible to me because it had been created by the demo user for the demo tenant.

The easy solution is to create the demo-net network with the shared bit set.

Unfortunately, for the demo user, this cannot be done because regular users, per neutron default policy, can’t do such a thing.

The work-around, for me, was to create the network as the admin user, make it shared, and by virtue of it being shared, it would be visible by the demo user.

The lesson here is if you find yourself faced with the above error, make sure you’re actually using the software correctly. It wasn’t clear that this was a DHCP related error, but in hindsight, it should have been obvious.

References

  • http://docs.openstack.org/juno/install-guide/install/apt/content/
  • https://bugs.launchpad.net/neutron/+bug/1268823

Be careful with unarchive

The unarchive module in ansible is super handy for passing around compressed files and then extracting them on the remote system. It supports a number of archive formats and also one other feature that I like…creates.

There is, however, one thing that bugs me about creates specifically with respect to the unarchive module; you can make it misbehave.

When unarchive runs (and the creates argument is specified), it will check for the existence of the file before it bothers extracting the archive.

Let’s consider what happens though when you have a very large archive and you invoke the famed ctrl+c to the ansible-playbook command.

Here’s my playbook

# unarchive-qcow.yaml
- name: Example of tricking creates
  hosts: localhost
  gather_facts: true
  connection: local

  tasks:

      - name: Unarchive qcow
        unarchive:
            src: "/tmp/some-big-archive.zip"
            dest: "/root/"
            copy: "no"
            creates: "/root/image.qcow2"

And here’s our invocation

ansible-playbook -i notahost, unarchive-qcow.yaml

If you run this playbook normally, and let it finish, you would get the expected output from a sha1sum command. Alternatively we could use the stat module to get the same information.

ddadbaf616e27d9bb8095b46fc4198e04dfe5ce2

That is the correct checksum for this file. What happens though if you kill the playbook someway through the extraction of the archive?

f8d1619a1baf91debd45513cb9f9f55c4d81d750

Oh hai there incorrect checksum.

Taking it a step further though, you get yourself into a “situation” the next time you pass the playbook back through ansible. Namely this message

ok: [localhost] => {
  "changed": false,
  "msg": "skipped, since /root/image.qcow2 exists"
}

Uh oh. That’s suggesting that we don’t need to re-unarchive the file. I mean…it exists. However, it exists incorrectly.

A checksum check would be more appropriate in this case.

Maybe we could re-vamp our playbook to address those concerns.

# unarchive-qcow.yaml
- name: Example of tricking creates
  hosts: localhost
  gather_facts: true
  connection: local

  vars:
      checksum: ddadbaf616e27d9bb8095b46fc4198e04dfe5ce2

  tasks:
      - name: Stat the qcow
        stat:
            path: "/root/image.qcow2"
        register: st

      - name: Unarchive qcow
        unarchive:
            src: "/tmp/some-big-archive.zip"
            dest: "/root/"
            copy: "no"
        when: st.stat.checksum|default('None') != checksum

Take a moment to digest that.

The changes we made were to completely eliminate the creates argument to unarchive and replace it with a step to get the checksum of the file before we attempt to extract it.

We also provide the checksum that should be expected of the file.

Our when condition also include a default() filter because the file itself may not initially exist and this would cause ansible to stop execution with and “error while evaluating conditional” message if it were not there.

I specifically do not check for defined-ness of st, because st will always be defined be defined by the stat module. I could check for defined-ness of st.stat.checksum, but since I want to re-unarchive the file if the checksum is incorrect, it’s simpler to just default to something that could never possibly be a checksum; the value “None”

With those changes in place, our un-archive steps behave as we initially intended and we will not be faced with awkward VM or CT boot errors due to corrupt images that, on the surface, should not appear to exist because “well the image is there bro”.

It is, except it’s not all there.

Understanding ansible tags

If there is a particular feature in ansible that I dont use frequently enough to understand it, yet always feel I should use it more, that feature would be tags.

Recently on a project at work, I thought that tags might be a good solution to a problem I was presented with. Since I wasn’t terribly familiar with their use, I hopped on over to the tags documentation on the ansible site.

The docs are rather sparse though, and only give the most brief of introductions to the feature. I’d like this post to serve as some added documentation about how placing tags at different points in your playbooks ultimately affect what is run.

Let’s take a look!

The first thing that you’re going to need to be aware of is the --list-tags argument to the ansible-playbook command. We’re going to use this all over the place to determine if our tags are placed properly. We don’t want too many, or too few, things to be run.

I found in my usage of tags that I would often over run tasks instead of under run.

So let’s take a look at my overly long ansible command

root@hype:~# /usr/local/bin/ansible-playbook
    --inventory-file notahost,
    -vvvv
    caphrim.yaml

To this command I am just going to be adding a single argument

--list-tags

Right. Now, let’s take a look at a section of my overly complicated playbook.

- name: Play with tags
  hosts: localhost
  gather_facts: false
  connection: local

  tags:
      - success

  tasks:
      - name: Going to play
        debug: msg="In the sandbox"

- name: Play without tags
  hosts: localhost
  gather_facts: false
  connection: local

So I have two plays above; one with tags and one without tags. Let’s look to see what happens when I use the --list-tags argument on the above plays.

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tags

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    TASK TAGS: [success]

  play #2 (Play without tags):	TAGS: []
    TASK TAGS: []

root@hype:~#

The above output is actually a lot more informative that I initially gave it credit for. It wasn’t immediately obvious what was happening though.

For the impatient, the tldr of the output is that tags are inherited from their parents; whether that be plays, roles, whatever is higher up in the stack.

Let’s break that down a bit more.

In the play #1 above, we see that a tag, success, is assigned to that play. We also have a task in play #1 though and, curiously, we also see that that task has a tag.

But wait, I didn’t assign that task a tag. If I had, it might look like this

tasks:
    - name: Going to play
      debug: msg="In the sandbox"
      tags:
          - mytag

Well, let’s do just that. Our result should then list mytag as assigned to that task

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tags

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    TASK TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []
    TASK TAGS: []

root@hype:~#

And whatd’ya know it…wait…it still has that success tag. What happened?

In ansible, the tags that you define, how do I say, “further up the stack”, are inherited by things “further down the stack”. The “stack” in this case starts at the top (with the play) and works its way down touching roles, tasks, and other things along the way.

Because we defined a tag at the play level called success, that tag was then further applied to everything else in the play. Everything.

Furthermore, tags are AND’d together; they do not replace one-another. So when I went a step further and added a tag to my individual task, it would be wrong to then assume I would “skip” that task if I only specified the following

--tags success

In ansible, that would include my task above because it is a part of the play which is tagged success.

Let’s get more convoluted.

Suppose we have a role and inside of that role, we tag a task. Our role can be something silly, like this

# roles/solution-common/tasks/main.yaml
---

- name: Include common things
  debug:
      msg: "Including common"

We’ll assign that role to play #1 from earlier.

...

roles:
    - solution-common

...

Ok, what happens when we run the playbook with --list-tags now?

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tags

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    TASK TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []
    TASK TAGS: []

root@hype:~#

Looks pretty much identical. What if we move that role to play #2? The output?

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tags

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    TASK TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []
    TASK TAGS: []

root@hype:~#

Still identical. Ok, what if we add a tag to that task in the role? I’ll add the tag asdf to the task in the role. What do we get?

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tags

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    TASK TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []
    TASK TAGS: [asdf]

root@hype:~#

Oooo a change. We can see that the asdf tag shows up in the --list-tags output. Can we see what tasks are tagged with what though? Yes, with the --list-tasks argument to ansible-playbook.

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tasks

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    Going to play	TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []
    Include common solution vars	TAGS: [asdf]

root@hype:~#

Using this newfound --list-tasks argument, let’s take a step back and look at the tags that are applied when we remove the asdf tag from our role task and add that role back to play #1

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --list-tasks

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    Include common solution vars	TAGS: [success]
    Going to play	TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []

root@hype:~#

I think this is where I became initially confused until I realized that things were inherited and AND’d together. In the first task of play #1, we see that the success tag has been applied to the task in the role.

We did not actually tag this task in this role though.

So where can this ANDing of tags get you into situations? When you assign them to plays and then expect to override them in tasks. For example.

Here is our role

---

- name: Successful task
  debug:
      msg: "Success in life"
  delegate_to: localhost
  tags:
      - success

- name: Failed task
  debug:
      msg: "Failure Will Robinson!"
  delegate_to: localhost
  tags:
      - failure

And we still have our play looking like this

---

- name: Play with tags
  hosts: localhost
  gather_facts: false
  connection: local

  roles:
      - solution-common

  tags:
      - success

  tasks:
      - name: Going to play
        debug: msg="In the sandbox"
        tags:
            - mytag

- name: Play without tags
  hosts: localhost
  gather_facts: false
  connection: local

Now we want to run our ansible playbook and only run the stuff tagged with success; we don’t want that task tagged with failure to run.

When we list our tags for the plays, what do we see?

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --tags success --list-tasks

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: [success]
    Successful task	TAGS: [success]
    Failed task	TAGS: [failure, success]
    Going to play	TAGS: [mytag, success]

  play #2 (Play without tags):	TAGS: []

root@hype:~#

Well that’s weird. Our failed task is also tagged as success. When we run this playbook, we will end up running both the success and failed tagged tasks even though we specifically only asked for the success tagged tasks.

Remember that tags are inherited from parent “stuff”. Because our role is inside of a play that itself is tagged as success, so-to will everything in our role also be tagged with success; even the failed stuff.

To rememdy this situation, the easiest thing is to just always be more specific in your tagging endeavors. To “fix” our example above, just remove the success tag from the play.

---

- name: Play with tags
  hosts: localhost
  gather_facts: false
  connection: local

  roles:
      - solution-common

  tasks:
      - name: Going to play
        debug: msg="In the sandbox"
        tags:
            - mytag

- name: Play without tags
  hosts: localhost
  gather_facts: false
  connection: local

This has the desired effect

root@hype:~# ansible-playbook -i notahost, -vvvv caphrim.yaml --tags success --list-tasks

playbook: caphrim.yaml

  play #1 (Play with tags):	TAGS: []
    Successful task	TAGS: [success]

  play #2 (Play without tags):	TAGS: []

root@hype:~#

In summary, the tags feature of ansible is really neat insofar as it allows you to cherry-pick out tasks you want to run to prevent yoursef from repeating…yourself.

The existing documentation is a tad sparse in terms of examples, but once you understand the nuances of the tagging system, it is much easier to lay out your tags to most effectively take advantage of it.

Travel woes

Hey all,

I wanted to write to update everyone on my status and the details of what happened (or what we think happened) that led to what happened on Saturday.

Roughly three weeks ago as I was riding home from work, I had a case of severe fatigue as I reached the last street to our home.

Normally I’m breathing heavy and fatigued, but this was an entirely different case. I was unable to catch my breath and could barely stand, let-alone walk up the last street to our place. I supported myself on my bike as I slowed walked the remainder. This repeated itself, but to varying degrees of lesser-ness for the rest of the week.

Flash forward a week and Nia and I took part in that 5k that we posted pics about. About half a mile into the event I came down with the breathing issues again and at the halfway point I had to stop to walk. I would walk, catch my breath, proceed about a block and then have to stop again. I thought I was simply way out of shape because, well, I haven’t run any distance since my half-marathon a while back.

Flash forward another week and I had to leave to Kuala Lumpur Malaysia for business. It was 34 hours worth of travel going from Seattle to Frankfurt (10 hours), a 12 hour layover in Frankfort, followed by 12 hours of flying to KL.

I was feeling “under the weather”, not sick with a fever or anything, but just not feeling “right”. I attributed it to anxiety about my upcoming 6000 mile journey, first time out of the country, traveling by myself, and traveling to an area of the world that is bordered by third world countries. The trip was also announced to me just 2 weeks before I actually left.

I went with it anyway and when I landed in Frankfort was struck with terrible stomach cramps, fever, and diarrhea. Wonderful, because now I had to deal with this for the next 12 hours…in an airport…with no support other than what was in my backpack and available in the airport. Later I found out about Premium and Business Class lounges, but I also wasn’t flying those, so I don’t think I would have had the option to use them even if I wanted to.

I managed to get through the 12 hours of sitting by sleeping (or trying to) on the airport benches. Add that the jet lag of crossing 6 or something timezones.

Got on the next flight to KL, wasn’t able to sleep on the plane at all and only had the dried fruit I had taken with me plus the water on the plane for sustenance. I had eaten the plane food on the flight to Germany and I attributed that to my sickness when landing so I swore off all further in-flight meals.

Landed in KL at about 5pm. All the taxis were gone due to a Formula One event that was happening that week. Instead took the train to the hotel (30 minutes of standing due to overcrowding) and then had to walk to the hotel (90 degrees and at least 100% humidity). Got to the hotel at about 6pm and collapsed into bed with labored breathing and incredible fatigue.

I attributed much of the above with severe jet lag and lack of food. Called on room service to bring me water and isotonic drinks (they dont have gatorade or powerade in KL) as well as ordered food (a bowl of white rice and bag of fruit since everything on the menu I guarantee would have made me puke)

Told the staff that I was feeling really bad and that they might have to call an ambulance for me to take me to the ER if I didn’t get better. Had them page my room every hour for the rest of the night. Doubled up my dexamethasone and tried to sleep.

The next morning (and for all days until thursday) I would wake up, have almost no ability to even stand up, and would make my way down to the breakfast area to try to get something to eat (at 7 am). I would usually eat something, but my appetite was not fully there and it would leave me feeling sick to my stomach. In addition to this, just the thought of walking down to the breakfast place on the 1st floor (even via elevator) seemed like a herculean task.

After breakfast I would walk back up stairs and collapse into bed, checking email and doing work-related stuff for the rest of the day. I felt better when laying down or sitting.

Showering was also a nightmare as the hot fog/mist left me unable to breath and the hot water zapped all my energy. I would feel more tired after a shower than I had when waking up.

Rinse and repeat until Thursday. I emailed my boss asking what the protocol was for returning early. He assured me that I had overcome the worst of it and it was probably just nerves and jet lag, so to tough it out a little longer and I’ll be home before I knew it.

I guess I believed him, but I also told him I thought it was more than that.

My co-worker Christian arrived on Wednesday and asked where I was (because I wasn’t in the meeting). I told him I was up in my room caught between doing work and being sick. He wanted to come up and see me, but I went down to see him instead because it was near lunch time.

He said I looked pretty bad at the time. I was also consciously stuck between eating and breathing. I couldn’t close my mouth to chew long enough before I needed to gasp for air.

Afterwards I told him I was going back to my room because I was too zonked to do anything.

Later that night the whole crew went out for dinner at Tony Roma’s. I had a linguini dish and felt better as I joked with the folks about things. Going to bed that night I had bad leg cramps in my left leg and basically got no sleep. Got home to go to sleep at around 10:30pm. That night I developed a case of bronchitis that left me hacking up a lung all night.

The next day (thursday) we had the presentation we needed to give. The whole time I was huffing and puffing because I needed to be on my feet and speaking to an audience. I didn’t speak very fast though to cover my labored breathing and fatigue. I also needed water all day to keep from coughing everywhere.

The group (all F5 employees) and the organizer (also F5 employee) were all very cool and we got them all squared away with things. I met a lot of great people who connected with me then as well as afterwards to work on stuff.

That day I noticed that when I squatted down to pick something up, my left leg was really tight around my knee. I thought nothing of it, and wanted to go upstairs to sleep after the presentations, but instead was dragged outside for a happy hour session that lasted until 10pm. I missed dinner that night and went to bed hungry.

The next morning, Friday, we had supplemental training that we gave to the group. I had to nurse water all day to keep from coughing, but at least the cough was no longer “productive”. Now it was just a dry heave.

It was also at this time that I realized my flight left that day at midnight instead of Saturday at midnight. I had been telling everyone Saturday but then Lufthansa sent me email that Friday morning asking me to check-in. I told Christian and he decided to change his flight to leave that day, but not until we had ventured out to see some sights.

I really wasn’t interested, and I couldn’t walk or breath anyway, but still went. We took the train to the Patronas towers, then got some vitamin water to quench thirst and to stop my hacking cough. We then sat down in an icrcream store in the mall so Christian could re-schedule his flight. After he hung up it was at 2pm. I asked him when his flight was and he said 5pm.

All the life must have drained out of my face because

  1. I wasn’t packed yet
  2. We had at least 30 min of travel to get back to the hotel
  3. we had another 30 min of travel to get to the airport, followed by whatever delays were at the airport (finding our way, getting through security etc).

We literally ran to accomplish all of the above. Don’t even ask how I managed to accomplish it as I cant explain. I felt like vomiting the whole time, had cramps in my shoulder, was unable to catch my breath, and also had my backpack on.

Somehow we made it and Christian took me to the Premium flyer lounge to wait until midnight (it was almost 5pm) and then he ran off to catch his flight.

I stayed there in a large soft chair until midnight, then got on the plane and somehow made it back to Frankfort; a 12 hour flight. During out adventure to the airport I had shown Christian my left leg and how swollen it was. I asked him if he had any ibuprofen and he did. So I popped some of those thinking it was just normal inflammation.

During the whole flight my leg was cramped and I was miserable. I ate only the shitty snack packs of crackers and the water they had on board.

When we landed I made my way to the next terminal because I had a 3 hour lay-over there….or so I thought. Turns out the flight had been late and now I only had a 1 hour layover. I bought some food to stabilize me (fruit cup and a soft pretzel) because that’s all that I felt I could keep down.

I also managed to get wireless internet in the airport; something I hadn’t been able to get on the flight over. It’s at this time that I texted Nia and told her that when I landed in the US we had to go to the ER to have my leg looked at.

The hour passed with us text’ing but I seriously didn’t know how I was going to do another 10 hours in the air. Somehow I managed it, but it was hell.

I got off the plane in the US, went through customs, walked waaaaaay too far (because SEA-TAC is apparently fucking huge when it comes to international travelers) and Nia picked me up almost immediately as I walked outside.

I was feeling immediately more safe knowing that I was back in the US, around her, and on the way to the ER.

We got to the ER, I walked in and said I wanted to have somebody look at my leg because I had some severe edema in it. They saw me right away (because the ER was vacant) and also asked if I had shortness of breath and chest pain. I told them absolutely.

They took me back, did an EKG asked a number of questions and began treating me for a suspected pulmonary embolism and/or DVT.

I had a CT scan shortly thereafter which revealed that I had multiple pulmonary embolisms in both lungs as well as a saddle embolism in my pulmonary artery.

Suffice to say I was admitted; they said I wasn’t going home for a couple days. Period.

They immediately started me on Heparin with plans to move me to Warfarin (both powerful anti-coagulants) but needed to start with Heparin because it’s a ramp-up drug to Warfarin. Warfarin then takes full effect after about 2 weeks.

Nia came by the hospital and stayed here keeping me company (and brought real food). She would leave later at night because, really, there’s no place to stay in the hospital.

During the course of the night they would check my vitals, take blood samples, etc to see that I was stablizing. The next day they scheduled an ultrasound of my heart and my left leg. Almost immediately after I was done with the ultrasounds, the doctor who was seeing me (a resident) came in and told me that the radiologist reviewing my leg stuff said he wanted me to go to surgery to have an IVC (inferior vena cafa) filter

http://en.wikipedia.org/wiki/Inferior_vena_cava_filter

put in my IVC (a vein that carriers non-oxygenated blood to the heart) because the leg ultrasound identified a blood clot near the top of my leg (where it attaches to your groin) and with the anti-coagulants that I was on, he didnt want it to break loose and float up to my lungs, further complicating my already complicated scenario.

So an hour later I was having that implanted.

I got back and Nia and I hung out for the remainder of the day in between blood draws, vitals checks, and medication deliveries. The docs also filled us in more on Warfarin; this anti-coagulant drug.

The issue comes down to whether this is an acute event or a chronic event, and they base their determination off of a number of things; risk factors for PEs, family history, recent life events, etc. I told them that AFAIK, there was no family history, I’ve never had these or these symptoms in 31 years, and I was having the chest pain before the trip to Malaysia. You might be able to pin the leg DVT on the trip, but not the lung or straddle embolism. Or who knows; actually, then jury is STILL out on the cause.

Anyways, if it’s an acute event, then the protocol is to take Warfarin for 3 to 6 months. Afterwards, re-assess the situation. If it is a chronic event, then you have to take Warfarin for the rest of your life.

I was not happy to hear that

One of the docs that stepped in later told me that all the PEs and DVTs “looked” acute. Apparently there is visual difference between acute and chronic, and they appeared to be acute. But that didnt explain the shortness of breath before the trip.

Anyways, Warfarin doesn’t sound too bad right? I mean, you’re self-imposing hemophilia on yourself to save you from dieing from a pulmonary embolism. Actually, it gets worse.

Warfarin acts by blocking your livers ability to produce Vitamin K. Vitamin K helps clot blood. Guess where vitamin K is found in nature? That’s right, in all green leafy vegetables and many other plant sources. Suddenly a problem if you eat like I do.

If you have large swings in Vitamin K intake, you can actually cause clots in your body and die from it. Wonderful. It’s also like any other medication with a host of nasty side effects; none that you want to have for the rest of your life when you’re 31.

So that’s the current situation. I’m on drugs, my leg edema has gone down, and now we’re waiting for the drugs to thin out my blood enough that hopefully the body re-absorbs these clots.

Sorry I haven’t called anyone yet, I wanted to know more before I started assuming things. They don’t know how long they’ll keep me here, but they said it’s entirely likely I would be discharged before the Warfarin begins taking effect, so things would hopefully continue progressing at home.

Dunno what to say about all this. I’m certainly not happy about it because of all the obvious health as well as travel and entertainment reasons.

I think I’m in good hands here, but the next 6 to 12 months are really rather unknown right now.

I’ll keep folks up to date on things as I find out more.

More on Rental Property

I do my own taxes and each year I tend to come across something new.

Last year before I left Rackspace, I would have quarterly meetings with Phil White (the resident CFP) about financial “stuff”. These were great meetings because Phil and I would talk about concepts that a CFP doesn’t usually talk about with clients.

For example, where most clients need to be taught the basics of personal finance, Phil and I would talk about complex financial tools, stock market strategies, tax planning, and real estate investing.

See, one of the things that always bugged me about rental property was that I never understood how people actually made money on them. It didn’t pass the logic test that it would be a “Good Idea” to take on a large amount of debt in exchange for a piddly (by comparison) monthly income; the risk was too high.

I also didn’t understand how income generated from the rental actually made you any money. It always seemed to me like that would increase your taxable base.

It was these questions that I would ask Phil because I genuinely didn’t know, and I wasn’t finding the answers on the internet.

Well, the answer to the question is really a large mix of expenses that you are allowed to deduct. These expenses can be a LOT of stuff; stuff that you’d be paying in the normal operation of a house. Things like property taxes, mortgage insurance, house (landlord) insurance, expenses related to fixng broken stuff, etc.

Still, this never quite seemed to quite turn the tables in your favor money wise.

Well, there’s another huge deduction that I was overlooking.

It was only this year that it occurred to me that I had forgotten to depreciate the rental property itself. Whoops.

I had read about this, but

  1. It totally slipped my mind
  2. I didn’t know where to do it in TurboTax

Both of those problems have since been addressed.

The area of Turbotax is in the rental itself. For instance, I have a rental called the address of my house. Inside of that I have an asset that I depreciate (the refridgerator I had to purchase to replace a dead one).

In addition to that one asset though, I also need to add another asset that is the house itself. Duh.

The one thing to keep in mind is the cost basis that you report. You report the remainder of what you owe on the mortgage as of the date that you started renting it. In addition to that, you list the value of the land so that Turbotax can do its’ calculations correctly. This value is listed on your property tax documents.

With that additional deduction in place, you tend to see a whole lot of what you owe suddenly fall off the table. This is actually a rather convenient thing because if you haven’t adjusted your witholdings on you W-2 recently, you’re probably in need of doing that now (which will increase your take-home pay).

The whole concept of owning a rental though brings with it another oddity that I wasn’t expecting; the standard deduction.

You see, when you own a house, you generally pay a butt-load of money each year in the form of interest. Usually this amount is something far north of the standard $6200 bucks the standard deduction gives you, so you tend to itemize your deductions. Great success.

With a rental property, the tables turn. All that stuff you used to get in the form of itemized deductions now turn into credits, as reported by TurboTax (forgive me for incorrect terms if there are any, this is what the software calls them).

So why is this weird? Well, because you no longer tend to have enough deductions to qualify for using itemized deductions. All the expenses related to your rental property fall under the “Credits” header instead of the “Deductions” header.

So here you are getting the standard deduction even though you paid thousands of dollars in mortgage interest, property taxes and repairs and such for your home.

Weird.

Slowly but surely the concept of how people make money with real-estate is becoming more clear to me. I would LOVE to sit down and learn from someone who does this to a larger extent than I do because I would be asking questions until I was blue-in-the face.

Note also that now that TurboTax “knows” about these assets on the property, it will automatically track the depreciation going forward; no effort on your part. Just click through the form every year and the next year’s amount of various depreciation will be taken off.

Neat-o.

Another kinda neat trick with the whole depreciation thing is that even if you’re not renting it, as long as it’s not your primary residence, you can keep skimming that depreciation off of it. And it’s not like you don’t have a lot to skim. Houses are depreciated over 27.5 YEARS. So suppose you didn’t have a tenant for a whole year. Well, with depreciation, you’d realize a huge lose in that year (upwards of thousands of dollars) and this would offset some of the income that you brought in from your day job.

Perhaps even to a sizeable amount where you end up getting a fat refund from the feds…such an odd tax world we live in…

Anyways, just thought I’d raise these topics for my own future knowledge, and others, because I have yet to find a good (said readable) PF blog that specifically targets rental property information.

All the best!